您的位置:首页 > Web前端 > JavaScript

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

2017-07-21 18:50 441 查看
基类 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>
至此大功告成!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐