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);
        }
    }
}

 

转载于:https://www.cnblogs.com/wooyoohoo/p/9463497.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值