利用 JSP 中的反射机制封装一个 Servlet ,就不用每张表的每个方法都写一个 Servlet

基类 Servlet 代码如下:

package com.yibin.cn.servlet;

import java.awt.print.Printable;
import java.io.IOException;
import java.lang.reflect.Method;

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

public class BaseServlet extends HttpServlet {
	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// post中文乱码处理
		request.setCharacterEncoding("utf-8");
		// 响应到客户端的乱码处理
		response.setCharacterEncoding("utf-8");
		// 响应到客户端的头部乱码处理
		response.setContentType("text/html;charset=UTF-8");

		//获取动作参数
		String action = request.getParameter("action");
		System.out.println(action);
		if(action==null||"".equals(action.trim())){//参数为空或空字符串.
			response.getWriter().print("你提交的是非法参数");
		    return;
		}
		//反射机制:反射可以做未来不确定的事情。用反射机制得到该对象的方法对象。
		Method method;
		try {
			//获取本类方法,传递参数:动作、参数类型。
			method = this.getClass().getMethod(action, HttpServletRequest.class,HttpServletResponse.class);
			//通过method方法对象调用方法
			//User user = new User();
			//user.getName();
			method.invoke(this, request,response);//this调用method,传递参数request和response。
		} catch (Exception e) {
            System.out.println("你提交的是非法参数");
			e.printStackTrace();
		} 
	}
}
用户表的Servlet代码如下(可以直接实现本表需要的各个操作,继承自基类(实现了反射机制以及乱码处理)):

package com.yibin.cn.servlet;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.UUID;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.websocket.Session;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import utils.Page;

import com.yibin.cn.dao.entity.User;
import com.yibin.cn.service.IUserService;
import com.yibin.cn.service.impl.UserServiceImpl;

public class UserServlet extends BaseServlet {
	// 登录
	public void login(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		System.out.println("login方法被调用");
		// 1、获取数据
		// 2、封装数据
		// 3、调用API
		// 4、控制跳转
	}

	// 增
	public void add(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		System.out.println("add方法被调用");
		// 获取数据
		// 2、封装数据
		// 3、调用API
		// 4、控制跳转		
}// 删public void delete(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {System.out.println("delete方法被调用");
		// 获取数据
		// 2、封装数据
		// 3、调用API
		// 4、控制跳转


}// 改public void update(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {System.out.println("update方法被调用");
		// 获取数据
		// 2、封装数据
		// 3、调用API
		// 4、控制跳转

}// 查public void listAll(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {System.out.println("listAll方法被调用");

		// 获取数据
		// 2、封装数据
		// 3、调用API
		// 4、控制跳转

}// 分页public void getPage(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {System.out.println("getPage方法被调用");
		// 获取数据
		// 2、封装数据
		// 3、调用API
		// 4、控制跳转

}}


如上,原来一个方法需要写一个 servlet,现在都封装到一个表名命名的servlet了,既方便,结构又清晰,调用如下所示:

			request.getRequestDispatcher("UserServlet?action=delete").forward(request, response);

通过跳转到指定方法来调用,主要要传递动作参数 "action" ,然后 BaseServlet 利用反射机制就会帮你调用对应的方法,是不是很方便呢。

对了,servlet还需要配置,在工程目录:工程名/WebContent/WEB-INF/web.xml 加上以下代码:

   <!-- 基类Servlet -->
  <servlet>
    <servlet-name>BaseServlet</servlet-name>
    <servlet-class>com.yibin.cn.servlet.BaseServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>BaseServlet</servlet-name>
    <url-pattern>/BaseServlet</url-pattern>
  </servlet-mapping>
  
     <!-- 通用UserServlet -->
  <servlet>
    <servlet-name>UserServlet</servlet-name>
    <servlet-class>com.yibin.cn.servlet.UserServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>UserServlet</servlet-name>
    <url-pattern>/UserServlet</url-pattern>
  </servlet-mapping> 

至此大功告成!


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值