いよいよJSP & ServletとHibernate ORMを結合するときがきました
動的Webプロジェクト"dynWeb"を作り、Servletを追加
ライブラリとソースの配置は→のようにする
META-INF/MANIFEST.MF
Manifest-Version: 1.0 Class-Path: ../lib
WEB-INF/web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>dynWeb</display-name> <servlet> <servlet-name>SendServlet</servlet-name> <servlet-class>SendServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>SendServlet</servlet-name> <url-pattern>/servlet/SendServlet</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>request.jsp</welcome-file> </welcome-file-list> </web-app>
request.jsp
<%@ page contentType="text/html; charset=utf8" %> <%@page import="java.util.*"%> <html> <body> <h2>データベース検索</h2> <form action="/dynWeb/servlet/SendServlet" method="POST"> 日付 <input type="text" name="date" value="<%=request.getAttribute("date")%>"> <input type="submit" name="command" value="送信"> </form> <table border="1"> <% Iterator i = (Iterator) request.getAttribute("ite"); if (i != null) { while (i.hasNext()) { Map m = (Map) i.next(); %> <tr><td bgcolor="#e0e0ff"><%=m.get("id")%></td> <td><%=m.get("name")%></td> <td><%=m.get("date")%></td></tr> <% } } %> </table> </body> </html>
SendServlet.java
import gikoha.util.HibernateUtil; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.*; import java.net.*; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import javax.servlet.*; import javax.servlet.http.*; import org.hibernate.Session; import org.hibernate.Transaction; import gikoha.util.HibernateUtil; import hib.Tcholdata; import hib.TcholdataId; import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.Transaction; import org.hibernate.criterion.Restrictions; /** * Servlet implementation class SendServlet */ public class SendServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { request.setCharacterEncoding("utf8"); HttpSession httpsession = request.getSession(); Session session = HibernateUtil.getSessionFactory().openSession(); Transaction transaction = null; ServletContext application = getServletContext(); String date = (String) httpsession.getAttribute("date"); if (date == null) date = ""; List patients = (List) application.getAttribute("patients"); // patientsがすでに定義されていた場合でもそれを破棄してしまいます patients = new ArrayList(); application.setAttribute("patients", patients); if ("送信".equals(request.getParameter("command"))) { date = (String) request.getParameter("date"); httpsession.setAttribute("date", date); transaction = session.beginTransaction(); List list = session.createCriteria(Tcholdata.class) .add(Restrictions.eq("id.date", date)).list(); for (Iterator iterator = list.iterator(); iterator.hasNext();) { Tcholdata idcard = (Tcholdata) iterator.next(); TcholdataId person = idcard.getId(); Map m = new HashMap(); m.put("id", person.getId()); m.put("name", person.getName()); m.put("date", person.getDate()); patients.add(m); } } session.close(); Iterator i = patients.iterator(); request.setAttribute("date", date); request.setAttribute("ite", i); RequestDispatcher rd = request.getRequestDispatcher("/request.jsp"); rd.forward(request, response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } /** * Default constructor. */ public SendServlet() { // TODO Auto-generated constructor stub } }
HibernateUtil.java
package gikoha.util; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public class HibernateUtil { private static final SessionFactory sessionFactory; static { try { sessionFactory = new Configuration().configure() .buildSessionFactory(); } catch (Throwable ex) { System.err.println("Initial SessionFactory creation failed." + ex); throw new ExceptionInInitializerError(ex); } } public static SessionFactory getSessionFactory() { return sessionFactory; } }
/usr/local/tomcat/webapps/dynWeb.warに エクスポートしてから web browserからhttp://localhost:8080/dynWeb/request.jspにアクセスすると、日付入力を求められ、送信クリックで無事データが表示されました
ついでにApache2ともajpで連携をとってサーバーでの立ち上げに成功。