知识回顾
ThreadLocal
1.java.lang包中的一个类 支持泛型
2.使用起来更像是session特点
3.对比session机制
通过String JSESSIONID找到session对象
通过String key找到session中存储的Object value
通过Thread t找到ThreadLocalMap对象
通过ThreadLocal key打开Thread LocalMap找到里面存储的Object value
4.利用自己封装的管理类 来管理ThreadLocal对象
ThreadLocal set(value) get() remove()
==========================================
WEB3.0以后的给予注解访问web组件
WEB容器给我们提供了很多组件
Servlet Filter JSP Listener
JSP使用特殊 我们自己不需要做配置 WEB容器内部给我们做了配置 *.jsp
Servlet Filter Listener 使用的时候必须遵循规则(继承 实现 方法重写) 我们自己需要做配置web.xml
自己做web.xml文件配置的时候比较麻烦
一个请求(一个功能点)-----对应-----一个Servlet类(只有一个方法)
每多写一个Servlet类 需要多做一个配置(8行)
都觉得配置过于麻烦---->web.xml配置优化(WEB框架)
SpringMVC Struts2
Tomcat也更新了相关的版本3.0以后就支持注解的方式
注解为了替代web.xml文件的配置
Servlet Filter Listener JSP(不用我们自己配置)
为什么有web.xml文件????
web.xml文件中配置的目的
请求名字-----真实类全名 对应关系
发送请求--->String ip:port/工程/资源.xxx?key=value&key=value
请求到达服务器 解析请求 根据请求的资源名 找真实的执行类(反射)
Class.forName("包名.类名")
WEB3.0版本之后出现了注解 为了替代web.xml配置
@WebServlet
@WebFilter
@WebListener
1.使用注解的方式访问Servlet
自己写一个类Servlet
类继承HttpServlet
类重写方法
方法参数 抛出异常
配置 在类上 添加一个注解
@WebServlet()
urlPatterns={"/test","/test2"}
如果请求url只有一个的话 大括号是可以省略的
value信息 等价于urlPatterns
建议用value如果只有value是可以生路的
loadOnStartUp信息 控制servlet对象的加载的(立即)
initParams 为了携带信息
里面需要{@WebInitParam(name="",value="")}
2.使用注解的方式访问Filter
自己写一个类
类继承HttpFilter
重写方法doFilter
方法参数 request respons chain 抛异常
配置 类上添加注解
@WebFilter
urlPatterns
value
initParams 为了携带信息
里面需要{@WebInitParam(name="",value="")}
3.使用注解的方式让Listener执行
自己写一个类
实现接口
方法必须重写
配置 类上添加注解
@WebListener
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!-- 请求名字 真实类名的关系 -->
<!--<servlet>-->
<!--<servlet-name>test</servlet-name>-->
<!--<servlet-class>controller.TestController</servlet-class>-->
<!--<init-param>-->
<!--<param-name>zhangsan</param-name>-->
<!--<param-value>333</param-value>-->
<!--</init-param>-->
<!--<init-param>-->
<!--<param-name>lisi</param-name>-->
<!--<param-value>444</param-value>-->
<!--</init-param>-->
<!--<init-param>-->
<!--<param-name>wangwu</param-name>-->
<!--<param-value>555</param-value>-->
<!--</init-param>-->
<!--<load-on-startup>0</load-on-startup>-->
<!--</servlet>-->
<!--<servlet-mapping>-->
<!--<servlet-name>test</servlet-name>-->
<!--<url-pattern>/test</url-pattern>-->
<!--</servlet-mapping>-->
</web-app>
index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body>
<a href="test?name=zzt&pass=123">点我呀</a>
</body>
</html>
TestController
package controller;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Enumeration;
@WebServlet(
// name = "",
// description = "",
// displayName = "",
// asyncSupported = true,
// value="",
urlPatterns={"/test",""},
loadOnStartup=0,
initParams={
@WebInitParam(name="zhangsan",value="333"),
@WebInitParam(name="lisi",value="444"),
@WebInitParam(name="wangwu",value="555")
}
)
public class TestController extends HttpServlet {
public void init(ServletConfig config) throws ServletException {
System.out.println("testController对象加载了");
Enumeration en = config.getInitParameterNames();//获取全部参数的key
while(en.hasMoreElements()){
String key = (String)en.nextElement();
String value = config.getInitParameter(key);
System.out.println(key+"---"+value);
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("我是testController,我执行啦");
String name = request.getParameter("name");
String pass = request.getParameter("pass");
System.out.println(name+"--"+pass);
}
}
TestFilter
package filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebFilter;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.http.HttpFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Enumeration;
@WebFilter(
urlPatterns={"/*"},
initParams={
@WebInitParam(name="key1",value="value1"),
@WebInitParam(name="key2",value="value2")
}
)
public class TestFilter extends HttpFilter {
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("我是filter,我加载啦");
Enumeration en = filterConfig.getInitParameterNames();
while(en.hasMoreElements()){
String key = (String)en.nextElement();
String value = filterConfig.getInitParameter(key);
System.out.println(key+"----"+value);
}
}
protected void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println("我是filter,我执行啦");
chain.doFilter(request,response);
}
}
TestRequestListener
package listener;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.annotation.WebListener;
@WebListener
public class TestRequestListener implements ServletRequestListener {
public void requestDestroyed(ServletRequestEvent sre) {
System.out.println("request对象销毁啦");
}
public void requestInitialized(ServletRequestEvent sre) {
System.out.println("request对象创建啦");
}
}
网友评论