本文共 5325 字,大约阅读时间需要 17 分钟。
在实际的项目开发中,一个模块,一般只使用一个 Servlet 程序
代码优化一:代码优化:合并 LoginServlet 和 RegistServlet 程序为 UserServlet 程序 给 login.jsp、regist.jsp 页面添加隐藏域 action,和修改请求地址 login.jsp:regist.jsp:
UserServlet 程序:
public class UserServlet extends HttpServlet { private UserService userService = new UserServiceImpl(); protected void login(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 1、获取请求的参数 String username = req.getParameter("username"); String password = req.getParameter("password"); // 调用 userService.login()登录处理业务 if(userService.login(new User(null,username,password,null)) != null){ //登录成功 //转到登录成功页面 req.getRequestDispatcher("/pages/user/login_success.jsp").forward(req,resp); }else{ // 把错误信息,和回显的表单项信息,保存到Request域中 req.setAttribute("msg","用户名或密码错误!"); req.setAttribute("username",username);// System.out.println("用户名或密码错误!"); req.getRequestDispatcher("/pages/user/login.jsp").forward(req,resp); } } protected void regist(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 1、获取请求的参数 String username = req.getParameter("username"); String password = req.getParameter("password"); String email = req.getParameter("email"); String code = req.getParameter("code");// 2、检查 验证码是否正确 === 写死,要求验证码为:6n6np if("6n6np".equalsIgnoreCase(code)){ // 3、检查 用户名是否可用 if(userService.existsUsername(username)){ // // 把回显信息,保存到Request域中 req.setAttribute("msg","用户名已存在!!!"); req.setAttribute("username",username); req.setAttribute("email",email); // 跳回注册页面 req.getRequestDispatcher("/pages/user/myregist.jsp").forward(req, resp); }else{ // 可用// 调用service保存到数据库 userService.registUser(new User(null,username,password,email)); // 跳到注册成功页面 regist_success.jsp req.getRequestDispatcher("/pages/user/regist_success.jsp").forward(req,resp); } }else{ // 把回显信息,保存到Request域中 req.setAttribute("msg","验证码错误!!!"); req.setAttribute("username",username); req.setAttribute("email",email); //请求转发必须要以斜杠打头,/ 斜杠表示地址为:http://ip:port/工程名/ req.getRequestDispatcher("/pages/user/myregist.jsp").forward(req,resp); } } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String action = req.getParameter("action"); if("login".equals(action)){ login(req,resp); }else if("regist".equals(action)){ regist(req,resp); } }}
如果还有别的功能要实现的话,就得不停的在后面加else if会产生大量的代码,耦合性不好
public class BaseServlet extends HttpServlet { @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 设置请求体的字符集为UTF-8,从而解决post请求的中文乱码问题 // 也要在获取请求参数之前调用才效 req.setCharacterEncoding("UTF-8"); // 它会同时设置服务器和客户端都使用UTF-8字符集,还设置了响应头 // 此方法一定要在获取流对象之前调用才有效 resp.setContentType("text/html;charset=UTF-8"); String action = req.getParameter("action"); try { //获 取 action 业 务 鉴 别 字 符 串 , 获 取 相 应 的 业 务 方 法 反 射 对 象 Method method = this.getClass().getDeclaredMethod(action,HttpServletRequest.class,HttpServletResponse.class); //调用目标业务方法 method.invoke(this,req,resp); } catch (Exception e) { e.printStackTrace(); } }}
BaseServlet 程序代码:
public class BaseServlet extends HttpServlet { @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String action = req.getParameter("action"); try { //获 取 action 业 务 鉴 别 字 符 串 , 获 取 相 应 的 业 务 方 法 反 射 对 象 Method method = this.getClass().getDeclaredMethod(action,HttpServletRequest.class,HttpServletResponse.class); //调用目标业务方法 method.invoke(this,req,resp); } catch (Exception e) { e.printStackTrace(); } }}
修改 UserServlet 程序继承 BaseServlet 程序:
并且删除里面的doPost方法BeanUtils 工具类,它可以一次性的把所有请求的参数注入到 JavaBean 中。 BeanUtils 工具类,经常用于把 Map 中的值注入到 JavaBean 中,或者是对象属性值的拷贝操作。
BeanUtils 它不是 Jdk 的类。而是第三方的工具类。所以需要导包。WebUtils 工具类:
public class WebUtils { /** * 把Map中的值注入到对应的JavaBean属性中。 * * @param value * @param bean * @param* @return */ public static T copyParamToBean(Map value, T bean){ try { /** * 把所请求的参数都注入到user对象中 */ BeanUtils.populate(bean,value); } catch (Exception e) { e.printStackTrace(); } return bean; }}
UserServlet程序修改处:
login中: regist中: 使用 EL 表达式修改表单回显 登录: 注册:转载地址:http://smuki.baihongyu.com/