Web注解

作者: _FireFly_ | 来源:发表于2019-10-27 19:30 被阅读0次
    知识回顾
    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对象创建啦");
        }
    }
    
    

    相关文章

      网友评论

          本文标题:Web注解

          本文链接:https://www.haomeiwen.com/subject/wcjmvctx.html