複数のリクエストを1つのサーブレットで処理する方法

7110 ワード

方法1:
jspでは、1つの変数に異なる値を付与して、異なる機能を実現することができる.
次の例のように.フォームラベルを使用してopに異なる値findOneとfindAllを付与し、idクエリーまたはすべてのユーザーを検索します.
index.jsp





Insert title here


	
id


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
CustomerName:
Address:
Phone: