实现了servlet接口的类,会被servlet容器管理。
- 当被请求的时候,会创建单例的对象。对应的方法由servlet容器调用
Servlet特点
- Servlet的生命周期:从Servlet被创建到Servlet被销毁的过程
- 一次创建,到处服务
- 一个Servlet只会有一个对象,服务所有的请求
一个Servlet类中内含的方法
- 1.实例化 (使用构造函数创建对象)
- 2.初始化 执行init方法
- 3.服务 执行service方法
- 4.销毁 执行destroy方法(由 JVM 的垃圾回收器进行垃圾回收的)
public class chen implements Servlet {
//实现Servlet接口
@Override
public void init(ServletConfig servletConfig) throws ServletException {
//当Servlet第一次被创建对象时执行该方法,该方法在整个生命周期中只执行一次
//且Servlet其是单例模式,其运行时只存在一个对象
}
@Override
public ServletConfig getServletConfig() {
return null;
//当停止tomcat时也就销毁的servlet
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
//对客户端响应的方法,该方法会被执行多次,每次请求该servlet都会执行该方法
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
//当Servlet被销毁时执行该方法
}
}
request与response的使用
- web服务器收到客户端的HTTP请求,会针对每一次请求分别创建一个用于代表请求的request对象和代表响应的response对象。
- 要得到前端提交过来的数据,需要用request对象。
- 要向前端输出数据,需要用response对象。
servlet常用方法:
根据前台表单内
input
输入框内定义的name
值匹配,获取前端输入的值。
servletRequest.getParameter("*");
例如:String firstName = req.getParameter("firstName");
- 向会话内存入数据等待
request.setAttribute("键",值);
转发/重定向(request.getRequestDispatcher()/response.sendRedirect())
request.getRequestDispatcher("/*").forward(request,response);
1、属于转发,也是服务器跳转,相当于方法调用,在执行当前文件的过程中转向执行目标文件,两个文件(当前文件和目标文件)属于同一次请求,前后页共用一个request,可以通过此来传递一些数据或者session信息,request.setAttribute()和request.getAttribute()。
2、在前后两次执行后,地址栏不变,仍是当前文件的地址。
3、由于它不能转向到本web程序之外的页面和网站,所以转向的速度要快。
4、URL中所包含的“/”表示应用程序(项目)的路径。
第二种是response.sendRedirect(/*);
1、属于重定向,也是客户端跳转,相当于客户端向服务端发送请求之后,服务器返回一个响应,客户端接收到响应之后又向服务端发送一次请求,一共是2次请求,前后页不共用一个request,不能读取转向前通过request.setAttribute()设置的属性值。
2、在前后两次执行后,地址栏发生改变,是目标文件的地址。
3、可以转向到本web应用之外的页面和网站,所以转向的速度相对要慢。
4、URL种所包含的"/"表示根目录的路径。
特殊的应用:
对数据进行修改、删除、添加操作的时候,应该用response.sendRedirect()。如果是采用了request.getRequestDispatcher().forward(request,response),那么操作前后的地址栏都不会发生改变,仍然是修改的控制器,如果此时再对当前页面刷新的话,就会重新发送一次请求对数据进行修改,这也就是有的人在刷新一次页面就增加一条数据的原因。
如何采用response.sendRedirect(/*)
方式传递数据:
1、可以选择session,但要在第二个文件中删除;
2、可以在请求的url中带上参数,如"add.htm?id=122"
转发/重定向的区别
- requset是请求,是在服务器端运行的,response是相应,是在客户端运行的;
参考:转发/重定向详解