一、Servlet

是将显示与接受的请求、处理的请求分开,就是将java代码写到servlet类中
只有当服务器端使用Servlet API 时,才能算是一个Servlet
面试题:
Servlet的生命周期
(1)、加载和实例化,客户端发送请求,tomcat会先查找内存在是否存在servlet,如果不存在就创建一个,
(2)、初始化,init()方法,此方法只会被调用一次
(3)、提供服务,处理请求;service()方法
(4)、销毁,destroy();tomcat结束时就销毁
对比生命周期代码
HelloServlet:

  1. package cn.bdqn.servlet;
  2. import java.io.IOException;
  3. import javax.servlet.ServletConfig;
  4. import javax.servlet.ServletException;
  5. import javax.servlet.ServletRequest;
  6. import javax.servlet.ServletResponse;
  7. import javax.servlet.http.HttpServlet;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpServletResponse;
  10. public class HelloServlet extends HttpServlet{
  11. @Override
  12. public void init(ServletConfig config) throws ServletException {
  13. String param=config.getInitParameter("paramCharacter");
  14. System.out.println(param);
  15. }
  16. // @Override
  17. // public void init() throws ServletException {
  18. // //servlet初始化的方法,只被执行一次,
  19. // System.out.println("---init---");
  20. // }
  21. @Override
  22. public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
  23. //servlce 每次请求都会被执行
  24. System.out.println("---service---");
  25. }
  26. @Override
  27. public void destroy() {
  28. //destroy 销毁方法,tomcat停止的时候会被调用
  29. System.out.println("---destroy---");
  30. }
  31. }

pages—->he2.jsp

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  7. <title>Insert title here</title>
  8. </head>
  9. <body>
  10. <form action="/web42/he2" method="post">
  11. <input type="text" name="userName">
  12. <input type="submit" value="提交">
  13. </form>
  14. </body>
  15. </html>

he2-post.jsp

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  7. <title>Insert title here</title>
  8. </head>
  9. <body>
  10. <h1>${userName }</h1>
  11. </body>
  12. </html>

web.xml

  1. <!-- 配置servlet -->
  2. <servlet>
  3. <servlet-name>hello</servlet-name>
  4. <servlet-class>cn.bdqn.servlet.HelloServlet</servlet-class>
  5. <init-param>
  6. <param-name>paramCharacter</param-name>
  7. <param-value>UTF-8</param-value>
  8. </init-param>
  9. </servlet>
  10. <servlet-mapping>
  11. <servlet-name>hello</servlet-name>
  12. <url-pattern>/hello</url-pattern>
  13. </servlet-mapping>
  14. <servlet>
  15. <servlet-name>hello2</servlet-name>
  16. <servlet-class>cn.bdqn.servlet.Hello2Servlet</servlet-class>
  17. </servlet>
  18. <servlet-mapping>
  19. <servlet-name>hello2</servlet-name>
  20. <url-pattern>/he2</url-pattern>
  21. </servlet-mapping>

二、用Servlet修改新闻列表页
1、创建NewsDetailListServlet类,继承HttpServlet类,重写doGet和doPost方法
2、将newsDetailList中的java代码,复制到NewsDetailListServlet中,简单修改
3、在NewsDetailListServlet中,写一个跳转req.getRequestDispatcher(“/news/newsDetailList.jsp”).forward(req, resp);
4、配置web.xml———/news/newsList

5、实现翻页:在script中,toJump()和toPage()中的地址改成/news/newsList?pageNo。。。。。
6、修改优化:创建UpdateNewsDetailServlet,在upDatenewsDetail中加入 <%@taglib uri=”http://java.sun.com/jsp/jstl/core” prefix=”c” %>c标签,将java代码进行修改
7、进入addNewsDetail中,将富文本编辑器复制到upDateNewsDetail中
8、web.xml中配置newsUpdate
9、在newsDetailList中,修改按钮地址
注意,修改跳转的地址和web.xml的url-pattern保持一致

10、修改提交按钮,创建UpdateNewsDetailSubmitServlet类,将upDateDetailsubmit代码复制到这里,然后配置web.xml,将upDatetail中表单action改一下
11、删除,创建DeleteNewsDetailServlet,将deletenewsDetail中的java代码写入,再配置web.xml文件,
12、添加:创建addNewsDetailSubmitServlet,将addNewsDetailSubmit中的java代码写入,配置web.xml,将addNewsDetail提交表单的action跳转地址改一下,

Servlet/Filter/Listener对比

1、Servlect
是运行于服务器端的java应用程序,具有独立于平台和协议的特性,可以动态生成Web页面;主要用于控制器,负责解释和执行客户端请求。
2、Filter
与Servlet区别在于,Filter不能直接向用户生成响应,Servlet只要处理请求,而Filter负责拦截请求,对用户进行预处理,也可以对响应进行后处理;Filter是一个可以复用的代码片段
3、Listener
采用观察者模式,是web应用程序事件模型的一部分,当一个会话被创建或者被销毁、session作用域中添加或移出一个变量等这些状态改变会产生相应的事件,而Listener可以接收这些事件,以便事件发生时做出处理。主流框架技术经常采用Listener实现加载配置文件和框架初始化的工作