基类 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方法被调用"); // 获取数据
}// 删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、控制跳转
// 获取数据
// 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>
至此大功告成!