zoukankan      html  css  js  c++  java
  • Servlet中的初始化参数、上下文参数、以及@Resource资源注入

      配置初始化参数、上下文参数、以及使用@Resource注解进行资源注入,目的是为了降低代码的耦合度。当项目需求进行变更的时候,不需要反复更改源代码,只需更改web.xml文件即可。

    一:Servlet的初始化参数和上下文参数

      配置以及使用:

     web.xml: 

      <!-- 配置上下文参数,所有的Servlet中都可以使用 -->
      <context-param>
          <param-name>encoding</param-name>
          <param-value>utf-8</param-value>
      </context-param>
      
      <!-- 初始化参数Servlet -->
      <servlet>
          <servlet-name>InitParamServlet</servlet-name>
          <servlet-class>cn.woo.servlet.InitParamServlet</servlet-class>
          <!-- 配置初始化参数(用户名/密码),仅InitParamServlet中可用 -->
          <init-param>
              <param-name>woo</param-name>
              <param-value>123</param-value>
          </init-param>
          <init-param>
              <param-name>unknown</param-name>
              <param-value>456</param-value>
          </init-param>
          <init-param>
              <param-name>ljl</param-name>
              <param-value>789</param-value>
          </init-param>
      </servlet>
      
      <servlet-mapping>
          <servlet-name>InitParamServlet</servlet-name>
          <url-pattern>/servlet/InitParamServlet</url-pattern>
      </servlet-mapping> 

    InitParamServlet.java:

    public class InitParamServlet extends HttpServlet {
    
        /**
         * 
         */
        private static final long serialVersionUID = 1L;
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            this.doPost(req, resp);
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            // 获取上下文参数,设置请求和响应的编码格式
            ServletContext servletContext = getServletContext();
            String encoding = servletContext.getInitParameter("encoding");
            req.setCharacterEncoding(encoding);
            resp.setCharacterEncoding(encoding);
    
            // 获取用户名密码
            String username = req.getParameter("username");
            String password = req.getParameter("password");
    
            // 判断用户名和密码是否正确,只有正确的用户才能访问,私密文件
            ServletConfig servletConfig = getServletConfig();
            // 获取所有初始化参数的名称
            Enumeration<String> initParameterNames = servletConfig.getInitParameterNames();
    
            while (initParameterNames.hasMoreElements()) {
                // 获取每一个初始化参数名
                String name = initParameterNames.nextElement();
                // 获取参数名称对应的value
                String pwd = servletConfig.getInitParameter(name);
    
                if (name.equals(username) && pwd.equals(password)) {
                    // 有访问权限的人[转发]
                    req.getRequestDispatcher("/WEB-INF/notice.html").forward(req, resp);
                    return;
                } 
            }
            // 重新返回登录界面 [转发到index.html]
            req.getRequestDispatcher("/index.html").forward(req, resp);
        }
    }

    二:使用@Resource注解,进行资源注入

      该注解不需要Servlet主动去读取资源,Tomcat启动的时候会把web.xml文件中配置的信息主动"注入"到Servlet里,该过程是自动完成的。

      *:该注解是从JavaEE 5 规范、Tomcat 6.x 开始支持的功能。

      配置以及使用:

      web.xml (env-entry只能配置java.lang包中标准类型的变量 如:String Integer Double等)

      <!-- 注入的String类型的名称 -->
      <env-entry>
          <env-entry-name>name</env-entry-name>
          <env-entry-type>java.lang.String</env-entry-type>
          <env-entry-value>woo</env-entry-value>
      </env-entry>
      
      <!-- 注入的Integer类型的年龄 -->
      <env-entry>
          <env-entry-name>age</env-entry-name>
          <env-entry-type>java.lang.Integer</env-entry-type>
          <env-entry-value>23</env-entry-value>
      </env-entry>
      
      <!-- 注入的Double类型的身高 -->
      <env-entry>
          <env-entry-name>height</env-entry-name>
          <env-entry-type>java.lang.Double</env-entry-type>
          <env-entry-value>178.5</env-entry-value>
      </env-entry>
      
       <!-- 注入字符串数组 -->
      <env-entry>
          <env-entry-name>language</env-entry-name>
          <env-entry-type>java.lang.String</env-entry-type>
          <env-entry-value>汉语,英语,韩语</env-entry-value>
      </env-entry>

    ResourcesServlet.java

    public class ResourcesServlet extends HttpServlet{
    
        /**
         * 
         */
        private static final long serialVersionUID = 1L;
        
        /**
         * 注入用户名(name属性名称要和web.xml文件中的env-entry-name名称一致,类型也要一致)
         */
        @Resource(name="name")
        private String name;
        
        /**
         * 注入年龄
         */
        @Resource(name="age")
        private Integer age;
        
        /**
         * 注入身高
         */
        @Resource(name="height")
        private Double height;
        
        /**
         * 注入语言数组信息
         */
        @Resource(name="language")
        private String language;
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            this.doPost(req, resp);
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //输出注入的资源信息
            System.out.println(name);
            System.out.println(age);
            System.out.println(height);
            for (String string : language.split(",")) {
                System.out.println(string);
            }
        }
    }
  • 相关阅读:
    最短路径算法 2.Dijkstra算法
    最短路径算法 1.Floyed-Warshall算法
    POLYGON(动态规划)
    JAG Asia 2016-Similarity of Subtrees(BFS+哈希)
    2019ACM-ICPC南京网络赛Holy Grail (SPFA / Floyd 模板题)
    2019ACM-ICPC南京网络赛Greedy Sequence
    快速输入输出
    2019HDU多校训练第七场J-Just Repeat
    JAG Asia 2017 C-----Prime-Factor Prime(素数区间筛)
    2019HDU多校训练第五场1007-permutation 2
  • 原文地址:https://www.cnblogs.com/wooyoohoo/p/9463497.html
Copyright © 2011-2022 走看看