一、Servlet
是将显示与接受的请求、处理的请求分开,就是将java代码写到servlet类中
只有当服务器端使用Servlet API 时,才能算是一个Servlet
面试题:
Servlet的生命周期
(1)、加载和实例化,客户端发送请求,tomcat会先查找内存在是否存在servlet,如果不存在就创建一个,
(2)、初始化,init()方法,此方法只会被调用一次
(3)、提供服务,处理请求;service()方法
(4)、销毁,destroy();tomcat结束时就销毁
对比生命周期代码
HelloServlet:
package cn.bdqn.servlet;import java.io.IOException;import javax.servlet.ServletConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class HelloServlet extends HttpServlet{@Overridepublic void init(ServletConfig config) throws ServletException {String param=config.getInitParameter("paramCharacter");System.out.println(param);}// @Override// public void init() throws ServletException {// //servlet初始化的方法,只被执行一次,// System.out.println("---init---");// }@Overridepublic void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {//servlce 每次请求都会被执行System.out.println("---service---");}@Overridepublic void destroy() {//destroy 销毁方法,tomcat停止的时候会被调用System.out.println("---destroy---");}}
pages—->he2.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body><form action="/web42/he2" method="post"><input type="text" name="userName"><input type="submit" value="提交"></form></body></html>
he2-post.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body><h1>${userName }</h1></body></html>
web.xml
<!-- 配置servlet --><servlet><servlet-name>hello</servlet-name><servlet-class>cn.bdqn.servlet.HelloServlet</servlet-class><init-param><param-name>paramCharacter</param-name><param-value>UTF-8</param-value></init-param></servlet><servlet-mapping><servlet-name>hello</servlet-name><url-pattern>/hello</url-pattern></servlet-mapping><servlet><servlet-name>hello2</servlet-name><servlet-class>cn.bdqn.servlet.Hello2Servlet</servlet-class></servlet><servlet-mapping><servlet-name>hello2</servlet-name><url-pattern>/he2</url-pattern></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实现加载配置文件和框架初始化的工作
