一、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{
@Override
public 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---");
// }
@Override
public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
//servlce 每次请求都会被执行
System.out.println("---service---");
}
@Override
public 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实现加载配置文件和框架初始化的工作