## 什么是Servlet?
宏观定义:sun公司制定的用java编写的Web应用程序的规范技术
微观定义:一个继承自HttpServlet ,部署在WebServer可以处理客户端请求的java类(一次请求就是一个servlet)
Servlet与java普通类的比较
servlet继承结构
servlet的生命周期
在上述各个阶段,只有服务是调用多次的,其余的方法只调用一次。
servelt的service()方法调用机制
一般做过BS项目的人都知道,客户端进行请求访问的时候一般会写 method = “get/post”,用来告诉servlet到底调用那个方法去请求响应,其实这个功能是由service()实现的。service方法得到请求的名称,然后调相应的方法。如果想要重写service()方法,一定记得去掉super(),不然机制回自己向父类调service()方法。
baseSer重写了service方法,实现一个Servlet处理多个请求的需求
String methodName = req.getParameter("method");
Method method = this.getClass().getMethod(methodName, HttpServletRequest.class,HttpServletResponse.class);
//调用方法
String strReturn = (String )method.invoke(this, req,resp);
String pre = "redirect:";
if(strReturn.startsWith("redirect:")) {
//substring()方法的下标是从0开始 所以不应该+1
String path = strReturn.substring(pre.length());
resp.sendRedirect(req.getContextPath() + path);
}else {
req.getRequestDispatcher(strReturn).forward(req, resp);
}
下面的类继承baseSer
/**
* Servlet implementation class StudentSer2
*/
@WebServlet("/jsp/StudentSer2")
public class StudentSer2 extends baseSer {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public StudentSer2() {
super();
// TODO Auto-generated constructor stub
}
public String list(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
StuDao stuDao = new StuDao();
List<Student> list = stuDao.list();
for (Student student : list) {
System.out.println(student);
}
//
request.setAttribute("list", list);
//返回值要准确 不然 地址栏的地址是错误的 会404
return "/jsp/list.jsp"; //在baseSer 里面得到返回值
}
public String save(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
String age = request.getParameter("age");
String id = request.getParameter("id");
String name = request.getParameter("name");
System.out.println(id + age);
String sex = request.getParameter("sex");
Student student = new Student(Integer.parseInt(id), name, Integer.parseInt(age), sex);
System.out.println(student);
StuDao stuDao = new StuDao();
stuDao.save(student);
//重定向
//redirect:/StudentSer2?method=list /是根目录 应该是jsp下
return ("redirect:/jsp/StudentSer2?method=list");
}
}