一次请求的执行过程:

请求:发送请求地址-->到达web.xml中,找到地址对应的servlet类-->通过反射调用该类的构造函数,创建该servlet类的对象-->通过当前对象调用该servlet的init方法-->发现没有-->从其父类HttpServlet找init,还是没有-->再找其父类GenericServlet,有init,调用该init方法加载当前servlet类-->调用当前servlet的service方法-->发现没有,找父类HttpServlet-->父类有该方法,调用它,service中获取请求方式-->然后调用do post()方法,当前servlet的do post()方法-->最后销毁,调用disdroy。嗯,其实调用父类的init,service方法这种说貌似不妥,应该是调用继承自父类的这两个方法

对原本的service方法进行重写,利用反射调用子类的具体执行方法

 package com.jixh.ss.web.base;

 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 { private static final long serialVersionUID = 1L; @Override
public void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // localhost:8080/store/productServlet?method=updateUser,url中必须带有所要调用的子类具体方法的方法名
String method = req.getParameter("method"); if (null == method || "".equals(method) || method.trim().equals("")) {
method = "execute";
} // 注意:此处的this代表的是子类的对象
// System.out.println(this);
// 子类对象字节码对象
@SuppressWarnings("rawtypes")
Class clazz = this.getClass(); try {
// 查找子类对象对应的字节码中的名称为method的方法.这个方法的参数类型是:HttpServletRequest.class,HttpServletResponse.class
@SuppressWarnings("unchecked")
Method md = clazz.getMethod(method, HttpServletRequest.class, HttpServletResponse.class);
if(null!=md){
String jspPath = (String)md.invoke(this, req, resp);
if (null != jspPath) {
req.getRequestDispatcher(jspPath).forward(req, resp);
}
}
} catch (Exception e) {
e.printStackTrace();
} } // 默认方法
public String execute(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
return null;
} }

子类Servlet只进行具体的业务处理

 package com.jixh.ss.web.servlet;

 import java.util.List;

 import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import com.jixh.peanut.domian.FirstMenu;
import com.jixh.peanut.domian.User;
import com.jixh.peanut.domian.UserPower;
import com.jixh.peanut.service.MenueService;
import com.jixh.peanut.service.UserService;
import com.jixh.peanut.service.impl.MenueServiceImpl;
import com.jixh.peanut.service.impl.UserServiceImpl;
import com.jixh.peanut.util.DateUtils;
import com.jixh.peanut.util.UUIDUtils;
import com.jixh.peanut.web.base.BaseServlet; import net.sf.json.JSONObject; public class userServlet extends BaseServlet {
private static final long serialVersionUID = 1L; // 修改用户
public String updateUser(HttpServletRequest request, HttpServletResponse response) {
try {
// 允许跨域访问的响应头
response.setHeader("Access-Control-Allow-Origin", "*"); String username = request.getParameter("username");
String password = request.getParameter("password");
// 验证用户名密码
UserService userService = new UserServiceImpl();
User user = userService.userLoging(username, password);
if (user != null) {
// 验证通过,进行下一步
String uid = (String) request.getSession().getAttribute("thisUser");
String utype = request.getParameter("utype");
int ustate = Integer.parseInt(request.getParameter("ustate"));
String powerIdArray = request.getParameter("powerIdArray");
System.out.println(uid+"=="+username + "==" + password + "==" + utype + "==" + ustate + "==" + powerIdArray);
//修改用户表
boolean result = userService.updateUser(uid, utype, ustate);
System.out.println("修改用户结果为"+result);
if(result) {
response.getWriter().write("success");
}else {
response.getWriter().write("faild");
}
} else {
// 直接响应
response.getWriter().write("error");
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}

最新文章

  1. mac php环境启动
  2. Leetcode 206 Reverse Linked List 链表
  3. 关于职位的解释---转CSDN的文章
  4. .NET开发工具
  5. VC 无标题栏对话框移动(在OnLButtonDown里再次发送消息)
  6. java相关各种页面跳转
  7. ExtJS5_自定义菜单2
  8. js中的call()与apply()
  9. 利用dedecms给近三天(或当天)发布的文章显示红色日期或加上new字或new小图片
  10. socket(套接字)
  11. UVA 12263 Rankings(拓扑排序)
  12. Hadoop2.7.3分布式集群安装
  13. pyinstaller生成exe文件失败
  14. pig脚本不需要后缀名(python tempfile模块生成pig脚本临时文件,执行)
  15. 台达wplsoft2.34指令表
  16. Windows系统CMD下常用命令
  17. Office Web Apps 2013 修改Excel在线查看文件大小限制
  18. 【AtCoder】CODE FESTIVAL 2017 qual A
  19. eclipse启动时发生的Initializing Java Tooling错误
  20. DNA binding motif比对算法

热门文章

  1. nginx 1.5 支持websocket
  2. legend---九、js的核心是什么
  3. centos7 阿里云yum源更换
  4. [AtCoder Regular Contest 096 E] Everything on It 解题报告 (第二类斯特林数+容斥原理)
  5. 安卓开发--ListView
  6. sicily 1031 Campus(图算法)
  7. 【DNN 系列】 MVC 分页
  8. AngularJs轻松入门(四)模块化
  9. Surfaces
  10. vue动态绑定img标签的src地址