RESTっぽいJava
JSFやらDIやらを転職するときの糧にと思い、後輩に教えようとしてたのですが
仕事のかたわらですし、「Interfaceって何なんすか?」な所からスタートなので、
あえなく挫折です。ですので、JavaによるWebアプリ開発はServlet + JSP(JSTL含む) 程度のアプリにすることにしました。
今からStruts覚えても、仕様どうなるか分からないし、アレの必要性について疑問になってきたので…
そういう流れでサンプルアプリ作ってたら、RESTなアプローチの方が分かりやすいかなと思い、
調べてたら、ブラウザからPUT,DELETEを投げる方法もあるみたいで、どうにかできそうです。
以下は断片的なコードです。
package web; import java.io.IOException; import java.util.List; import javax.servlet.RequestDispatcher; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import autotest.service.MachineService; public class VottieServlet extends HttpServlet { protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { HttpSession session = req.getSession(); Service service = new Service(); List list = service.getMachines(); session.setAttribute("results", list); ServletContext ctx = getServletContext(); RequestDispatcher rd = ctx.getRequestDispatcher("/list.jsp"); rd.forward(req, res); } protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { System.out.println("---- POST ----"); ServletContext ctx = getServletContext(); RequestDispatcher rd = ctx.getRequestDispatcher("/list.jsp"); rd.forward(req, res); } protected void doDelete(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { System.out.println("---- DELETE ----"); ServletContext ctx = getServletContext(); RequestDispatcher rd = ctx.getRequestDispatcher("/list.jsp"); rd.forward(req, res); } protected void doPut(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { System.out.println("---- PUT ----"); ServletContext ctx = getServletContext(); RequestDispatcher rd = ctx.getRequestDispatcher("/list.jsp"); rd.forward(req, res); } }
- list.jsp
<%@ page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %> <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <title>sample</title> <script language="javascript" type="text/javascript"> function createXMLHttpRequest() { return this.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP"); } var req = createXMLHttpRequest(); function send_request(method) { req.open(method, "/sample/vottie", true) req.send(null) } </script> </head> <body> <table border="1"> <c:forEach var="loop" items="${results}"> <tr> <td> <c:out value="${loop.name}"></c:out> </td> <td> <c:out value="${loop.value}" /> </td> <td> <input type="button" value="delete" onclick="send_request('DELETE')" /> </td> <td> <input type="button" value="put" onclick="send_request('PUT')" /> </td> </tr> </c:forEach> </table> <form action="/sample/vottie" method="POST"> <input type="hidden" name="method" value="POST" /> <input type="text" name="name" size="10"/> <input type="text" name="port" size="5"/> <input type="submit" value="POST" /> </form> </body> </html>
- web.xml
<?xml version="1.0"?> <web-app> <servlet> <servlet-name>sample</servlet-name> <servlet-class>web.VottieServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>sample</servlet-name> <url-pattern>/sample/*</url-pattern> </servlet-mapping> <el-ignored>false</el-ignored> <!-- Welcome files --> <welcome-file-list> <welcome-file>index.jsp</welcome-file> <welcome-file>index.html</welcome-file> </welcome-file-list> </web-app>