複数のリクエストを1つのサーブレットで処理する方法
7110 ワード
方法1:
jspでは、1つの変数に異なる値を付与して、異なる機能を実現することができる.
次の例のように.フォームラベルを使用してopに異なる値findOneとfindAllを付与し、idクエリーまたはすべてのユーザーを検索します.
index.jsp
UserServlet.java
方法2
jspでは、ジャンプするサーブレットを異なる接尾辞に基づいて区別します.サーブレットでサーブレットPathを取得します.次のように
url: http://localhost:8080/MVC1/findOne.do?id=3
サーブレットPath:findOne
次に、サーブレットPathに従って、対応する方法を作成する(findOne).
その後,反射機構を用いてサーブレット中のfindOneメソッドを取得し,このfindOne()メソッドを実行する.
web.xmlは、Sercletを構成するために使用されます(以下、すべての.doの最後のものがcom.atguigu.mvcapp.servlet.CostomerServiceにジャンプして処理されることを示します).
CustomerServlet.JAva(以下、反射メカニズムを利用)
findOneメソッド
index.jsp
jspでは、1つの変数に異なる値を付与して、異なる機能を実現することができる.
次の例のように.フォームラベルを使用してopに異なる値findOneとfindAllを付与し、idクエリーまたはすべてのユーザーを検索します.
index.jsp
Insert title here
UserServlet.java
package cn.itcast.servlet;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import cn.itcast.bean.UserBean;
import cn.itcast.biz.UserBiz;
import cn.itcast.uitil.ServletUtil;
/**
* Servlet implementation class UserServlet
*/
@WebServlet("/user.s")
public class UserServlet extends BasicServlet {
private UserBiz ubiz = new UserBiz();
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
String op = req.getParameter("op");
if("findOne".equals(op)){
try {
findOne(req,resp);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
req.getRequestDispatcher("/WEB-INF/error.jsp").forward(req, resp);
}
}else if("findAll".equals(op)){
try {
findAll(req,resp);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
req.getRequestDispatcher("/WEB-INF/error.jsp").forward(req, resp);
}
}else if("delete".equals(op)){
try {
delete(req,resp);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
req.getRequestDispatcher("/WEB-INF/error.jsp").forward(req, resp);
}
}
}
/**
* id
* @param req
* @param resp
* @throws Exception
* @throws Exception
*/
private void delete(HttpServletRequest req, HttpServletResponse resp) throws Exception {
// TODO Auto-generated method stub
System.out.println("delete");
String id = req.getParameter("id");
System.out.println(id);
ubiz.delete(id);
findAll(req,resp);
}
/**
*
* @param req
* @param resp
* @throws Exception
* @throws Exception
*/
private void findAll(HttpServletRequest req, HttpServletResponse resp) throws Exception, Exception {
// TODO Auto-generated method stub
System.out.println("findAll");
List list = ubiz.selectAll();
req.setAttribute("list", list);
req.getRequestDispatcher("user1.jsp").forward(req, resp);
}
/**
* id
* @param req
* @param resp
* @throws ServletException
* @throws Exception
*/
private void findOne(HttpServletRequest req, HttpServletResponse resp) throws ServletException, Exception {
// TODO Auto-generated method stub
System.out.println("findOne");
Integer id = ServletUtil.getParamter(req, Integer.class, "id");
UserBean ub = ubiz.selectByid(id);
req.setAttribute("user", ub);
req.getRequestDispatcher("user.jsp").forward(req, resp);
}
}
方法2
jspでは、ジャンプするサーブレットを異なる接尾辞に基づいて区別します.サーブレットでサーブレットPathを取得します.次のように
url: http://localhost:8080/MVC1/findOne.do?id=3
サーブレットPath:findOne
次に、サーブレットPathに従って、対応する方法を作成する(findOne).
その後,反射機構を用いてサーブレット中のfindOneメソッドを取得し,このfindOne()メソッドを実行する.
web.xmlは、Sercletを構成するために使用されます(以下、すべての.doの最後のものがcom.atguigu.mvcapp.servlet.CostomerServiceにジャンプして処理されることを示します).
CustomerServlet
CustomerServlet
com.atguigu.mvcapp.servlet.CustomerServlet
CustomerServlet
*.do
CustomerServlet.JAva(以下、反射メカニズムを利用)
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//1. ServletPath: /edit.do /addCustomer.do
String servletPath = req.getServletPath();
//2. / .do, edit addCustomer
String methodName = servletPath.substring(1);
methodName = methodName.substring(0, methodName.length() - 3);
try {
//3. methodName method.invoke
Method method = getClass().getDeclaredMethod(methodName, HttpServletRequest.class,
HttpServletResponse.class);
//4.
method.invoke(this, req, resp);
} catch (Exception e) {
e.printStackTrace();
// .
resp.sendRedirect("error.jsp");
}
}
findOneメソッド
private void findOne(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
//1. : name, address, phone
String name = request.getParameter("name");
String address = request.getParameter("address");
String phone = request.getParameter("phone");
//2. name :
//2.1 CustomerDAO getCountWithName(String name) name
long count = customerDAO.getCountWithName(name);
//2.2 0, newcustomer.jsp :
// newcustomer.jsp
if(count > 0){
//2.2.1 newcustomer.jsp : name , !
// request message: name , !,
// request.getAttribute("message")
request.setAttribute("message", " " + name + " , !");
//2.2.2 newcustomer.jsp .
// value=""
//
//2.2.3 : return
request.getRequestDispatcher("/newcustomer.jsp").forward(request, response);
return;
}
//3. , Customer customer
Customer customer = new Customer(name, address, phone);
//4. CustomerDAO save(Customer customer)
customerDAO.save(customer);
//5. success.jsp : .
response.sendRedirect("success.jsp");
//request.getRequestDispatcher("/success.jsp").forward(request, response);
}
index.jsp