在一个Servlet中处理多个请求方法

1. 在一个Servlet中可以有多个请求处理方法!
2. 客户端发送请求时,必须多给出一个参数,用来说明要调用的方法
  请求处理方法的签名必须与service相同,即返回值和参数,以及声明的异常都相同!
3. 客户端必须传递一个参数!

package servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class AServlet extends HttpServlet {

	public void service(HttpServletRequest req, HttpServletResponse res)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		/*
		 * 1.获取参数,识别用户想请求的方法
		 */
		String methodName = req.getParameter("method");
		if(methodName.equals("addUser")) { addUser(req,res);}
		else if(methodName.equals("editUser")) { editUser(req,res);}
		else if(methodName.equals("deleteUser")) {deleteUser(req,res);}
		else if(methodName.equals("loadUser")) {loadUser(req,res);}
	}

	public void addUser(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		System.out.println("addUser()...");
	}
	
	public void editUser(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		System.out.println("editUser()...");
	}

	public void deleteUser(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		System.out.println("deleteUser()...");
	}
	
	public void loadUser(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		System.out.println("loadUser()...");
	}


}


service方法的参数与用户想调用的方法的参数一致

http://localhost:8080/day0213_1/AServlet?method=deleteUser

但是每添加一个新方法,service中就需要多加一个else if语句,作以下改进:

public void service(HttpServletRequest req, HttpServletResponse res)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		/*
		 * 1.获取参数,识别用户想请求的方法
		 */
		String methodName = req.getParameter("method");
		if(methodName==null || methodName.isEmpty()){
			throw new RuntimeException("没有传递method参数");
		}
		/*
		 * 得到方法名称,通过反射调用方法
		 *   得到方法名,通过方法名得到Method类的对象!
		 */
		Class c=this.getClass();
		
		Method method=null;
		try {
			method =c.getMethod(methodName,
					HttpServletRequest.class,HttpServletResponse.class);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			throw new RuntimeException("您调用的方法"+methodName+"不存在!");
		} 
		
		/*
		 * 调用method表示的方法
		 */
		try {
			method.invoke(this, req,res);
		} catch (Exception e) {
			System.out.println("您调用的方法"+methodName+"内部抛出了异常");
			throw new RuntimeException (e);
		} 
	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值