一.什么是servlet
servlet有良好的生存期的定义,包括加载和实例化、初始化、处理请求以及服务结束。这个生存期由javax.servlet.Servlet接口的init,service和destroy方法表达。
Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。
web容器加载servlet,生命周期开始。通过调用servlet的init()方法进行servlet的初始化。通过调用service()方法实现,根据请求的不同调用不同的do***()方法。结束服务,web容器调用servlet的destroy()方法。
二.servlet类的编写
要继承HttpServlet,重写service()方法
public void service(HttpServletRequest request,HttpServletResponse response){
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
根据页面传来的数据包,进行下一步处理 用request.getParameter("括号内为String的字符串,是html提交数据的标签的name 值");
然后调用dao或者java类的方法进行业务处理
建立entity实例
因为有关和数据库连接处理的业务我们都放在了dao中,所以此处不写.
}
三.需要在web.xml中配置servlet
建立和html页面连接的配置文件 web.xml
该文件在Deployed Resources/webapp/WEB-INF/web.xml
改配置文件中的内容
<servlet>
<servlet-name>一个名字</servlet-name>
<servlet-class>包名.类名</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>一个名字,和上面的一样</servlet-name>
<url-pattern>/路径</url-pattern>
</servlet-mapping>
四.区别
forward()与redirect()的区别?
前者仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;后者则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。所以,前者更加高效,在前者可以满足需要时,尽量使用forward()方法,并且,这样也有助于隐藏实际的链接。在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用sendRedirect()方法。
什么情况下调用doGet()和doPost()?
Jsp页面中的FORM标签里的method属性为get时调用doGet(),为post时调用doPost()
五.如何转发和重定向
请求转发:
request.getRequestDispatcher().forward();
重定向:
response.sendRedirect();
例如:
请求转发:
request.getRequestDispatcher("/student_list.jsp").forward(request,response);
重定向:
response.sendRedirect(request.getContextPath + "/student_list.jsp")
1、转发是在服务器端完成的,重定向是在客户端发生的;
2、转发的速度快,重定向速度慢;
3、转发是同一次请求,重定向是两次请求;
4、转发地址栏没有变化,重定向地址栏有变化;
5、转发必须是在同一台服务器下完成,重定向可以在不同的服务器下完成