通过反射写BaseServlet
来源:互联网 发布:r语言如何读取csv数据 编辑:程序博客网 时间:2024/06/15 19:40
package ming.stop.base;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;import java.lang.reflect.Method;/** * Created by Ming on 2017/8/22. */@WebServlet(name = "BaseServlet",urlPatterns = {"/base"})public class BaseServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // action名就是方法名b String action = request.getParameter("action"); if(action != null && !action.equals("")) { Class aClass = this.getClass(); //反射执行这个方法 try { Method method = aClass.getDeclaredMethod(action, HttpServletRequest.class, HttpServletResponse.class); method.invoke(this, request, response); } catch (Exception e) { System.out.println("没有这个方法: "+action); e.printStackTrace(); throw new RuntimeException(e); } } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request,response); }}
子类DEMO:
package ming.stop.biz.front.web;import ming.stop.base.BaseServlet;import ming.stop.biz.front.service.UserService;import ming.stop.biz.front.service.impl.UserServiceImpl;import ming.stop.entity.User;import ming.stop.utils.CommonUtils;import ming.stop.utils.MD5Utils;import javax.servlet.annotation.WebServlet;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import java.text.SimpleDateFormat;import java.util.Date;/** * Created by Ming on 2017/8/24.f */@WebServlet(urlPatterns = {"/user"})public class UserServlet extends BaseServlet { UserService userService = new UserServiceImpl(); //注册业务 public void register(HttpServletRequest request, HttpServletResponse response){ try { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-DD HH:mm:SS"); User user = CommonUtils.copyToBean(request,User.class); user.setUid(CommonUtils.getUUID()); user.setState(0); user.setCode(CommonUtils.getUUID64()); user.setRegistertime(new Date()); System.out.println(user); boolean isRegisterSuccess = false; isRegisterSuccess = userService.register(user); //判断是否注册成功 if(isRegisterSuccess){ //注册成功 response.sendRedirect(request.getContextPath()+"/registerSuccess.jsp"); }else { //注册失败 response.sendRedirect(request.getContextPath()+"/registerFail.jsp"); } //处理异常 } catch (Exception e) { request.setAttribute("msg",e.getMessage()); e.printStackTrace(); } } //激活业务 public void active(HttpServletRequest request,HttpServletResponse response){ //激活码 String code = request.getParameter("code"); try { boolean activeFlag = userService.activeUser(code); if(activeFlag){ //激活成功 System.out.println("激活成功!"); response.sendRedirect(request.getContextPath()+"/login.jsp"); }else { System.out.println("激活失败!可能你超过了有效期!或服务繁忙请稍后再试试!"); } } catch (Exception e) { e.printStackTrace(); } } //登录业务 public void login(HttpServletRequest request,HttpServletResponse response){ String username = request.getParameter("username"); String password = request.getParameter("password"); password = MD5Utils.md5(password); String autoLogin = request.getParameter("autoLogin"); String saveUsername = request.getParameter("saveUsername"); try { User user = userService.queryUserByUsername(username); if(user != null && user.getState() == 1){ //用户不为空就判断密码 if( !user.getPassword().equals(password)){ request.setAttribute("msg_password","密码错误"); request.getRequestDispatcher("/login.jsp").forward(request,response); return; }else{ HttpSession session = request.getSession(); session.setAttribute("user",user); session.setAttribute("loginTime",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); //判断是否 记住用户名 if(saveUsername != null){ Cookie cookie = new Cookie("username",username); cookie.setMaxAge(60*30); response.addCookie(cookie); }else { Cookie cookie = new Cookie("username",""); cookie.setMaxAge(0); response.addCookie(cookie); } //判断是否自动登录 if(autoLogin != null){ Cookie cookie_uid = new Cookie("cookie_uid",user.getUid()); Cookie cookie_pwd = new Cookie("cookie_pwd",user.getPassword()); cookie_uid.setMaxAge(60*15); cookie_pwd.setMaxAge(60*15); response.addCookie(cookie_uid); response.addCookie(cookie_pwd); } response.sendRedirect(request.getContextPath()); System.out.println("登录成功!"); } }else { request.setAttribute("msg_username","没有此用户"); request.getRequestDispatcher("/login.jsp").forward(request,response); } } catch (Exception e) { e.printStackTrace(); } } //退出登录 public void logout(HttpServletRequest request,HttpServletResponse response){ HttpSession session = request.getSession(false); if(session != null) session.invalidate(); Cookie username = new Cookie("username",""); username.setMaxAge(0); Cookie cookie_uid = new Cookie("cookie_uid",""); cookie_uid.setMaxAge(0); response.addCookie(username);response.addCookie(cookie_uid); Cookie cookie_pwd = new Cookie("cookie_pwd",""); cookie_pwd.setMaxAge(0); response.addCookie(username);response.addCookie(cookie_pwd); try { request.getRequestDispatcher("/login.jsp").forward(request,response); } catch (Exception e) { e.printStackTrace(); } } // 检查用户名是否重复 业务 public void checkUsername(HttpServletRequest request,HttpServletResponse response){ String username = request.getParameter("username"); try { User user = userService.queryUserByUsername(username); if(user != null){ response.getWriter().write("{\"isExist\":true}"); }else { response.getWriter().write("{\"isExist\":false}"); } } catch (Exception e) { e.printStackTrace(); } }}
可以看出一个Servlet 应该处理一个业务,
编写多个方法,访问时候只需要 http://localhost:8080/项目名/user?action=方法名
阅读全文
0 0
- 通过反射写BaseServlet
- 自定义BaseServlet利用反射
- BaseServlet
- BaseServlet
- BaseServlet
- BaseServlet
- BaseServlet
- BaseServlet
- BaseServlet
- 【怎样写代码】偷窥高手 -- 反射技术(七):通过反射实例化对象
- BaseServlet反射method通用类/ 首页跳转/ 注册功能/ 登录功能/ 退出 (网上商城一)
- 自制BaseServlet
- BaseServlet第一版
- 反射(通过反射写一个通用的设置某个对象的某个属性为指定的值)
- 反射_通过反射写一个通用的设置某个对象的某个属性为指定的值
- 反射-通过反射写一个通用的设置某个对象的某个属性为指定的值
- C#通过反射让Request对象只读属性可写的方法
- 利用java类的反射机制,实现了 映射 获得post(get)的参数 的BaseServlet
- OpenCV+MFC显示图像
- 10002
- Qt之表单布局(QFormLayout)
- 第十周项目1 (1)
- 2017-11-3每日练习
- 通过反射写BaseServlet
- 笨办法学python习题13 参数、解包和变量
- 用c语言编写猜数字小游戏
- 神经网络实现手写字符识别系统
- 第十周项目1(2)
- 计算图(Computational Graph)笔记-BPTT
- CMakeList.txt脚本文件及Cmake常用命令
- 打开IIS管理器命令
- 第十周项目1(3)