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

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

  配置以及使用:

 web.xml: 

  1. <!-- 配置上下文参数,所有的Servlet中都可以使用 -->
  2. <context-param>
  3. <param-name>encoding</param-name>
  4. <param-value>utf-8</param-value>
  5. </context-param>
  6.  
  7. <!-- 初始化参数Servlet -->
  8. <servlet>
  9. <servlet-name>InitParamServlet</servlet-name>
  10. <servlet-class>cn.woo.servlet.InitParamServlet</servlet-class>
  11. <!-- 配置初始化参数(用户名/密码),仅InitParamServlet中可用 -->
  12. <init-param>
  13. <param-name>woo</param-name>
  14. <param-value>123</param-value>
  15. </init-param>
  16. <init-param>
  17. <param-name>unknown</param-name>
  18. <param-value>456</param-value>
  19. </init-param>
  20. <init-param>
  21. <param-name>ljl</param-name>
  22. <param-value>789</param-value>
  23. </init-param>
  24. </servlet>
  25.  
  26. <servlet-mapping>
  27. <servlet-name>InitParamServlet</servlet-name>
  28. <url-pattern>/servlet/InitParamServlet</url-pattern>
  29. </servlet-mapping>

InitParamServlet.java:

  1. public class InitParamServlet extends HttpServlet {
  2.  
  3. /**
  4. *
  5. */
  6. private static final long serialVersionUID = 1L;
  7.  
  8. @Override
  9. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  10. this.doPost(req, resp);
  11. }
  12.  
  13. @Override
  14. protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  15. // 获取上下文参数,设置请求和响应的编码格式
  16. ServletContext servletContext = getServletContext();
  17. String encoding = servletContext.getInitParameter("encoding");
  18. req.setCharacterEncoding(encoding);
  19. resp.setCharacterEncoding(encoding);
  20.  
  21. // 获取用户名密码
  22. String username = req.getParameter("username");
  23. String password = req.getParameter("password");
  24.  
  25. // 判断用户名和密码是否正确,只有正确的用户才能访问,私密文件
  26. ServletConfig servletConfig = getServletConfig();
  27. // 获取所有初始化参数的名称
  28. Enumeration<String> initParameterNames = servletConfig.getInitParameterNames();
  29.  
  30. while (initParameterNames.hasMoreElements()) {
  31. // 获取每一个初始化参数名
  32. String name = initParameterNames.nextElement();
  33. // 获取参数名称对应的value
  34. String pwd = servletConfig.getInitParameter(name);
  35.  
  36. if (name.equals(username) && pwd.equals(password)) {
  37. // 有访问权限的人[转发]
  38. req.getRequestDispatcher("/WEB-INF/notice.html").forward(req, resp);
  39. return;
  40. }
  41. }
  42. // 重新返回登录界面 [转发到index.html]
  43. req.getRequestDispatcher("/index.html").forward(req, resp);
  44. }
  45. }

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

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

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

  配置以及使用:

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

  1. <!-- 注入的String类型的名称 -->
  2. <env-entry>
  3. <env-entry-name>name</env-entry-name>
  4. <env-entry-type>java.lang.String</env-entry-type>
  5. <env-entry-value>woo</env-entry-value>
  6. </env-entry>
  7.  
  8. <!-- 注入的Integer类型的年龄 -->
  9. <env-entry>
  10. <env-entry-name>age</env-entry-name>
  11. <env-entry-type>java.lang.Integer</env-entry-type>
  12. <env-entry-value>23</env-entry-value>
  13. </env-entry>
  14.  
  15. <!-- 注入的Double类型的身高 -->
  16. <env-entry>
  17. <env-entry-name>height</env-entry-name>
  18. <env-entry-type>java.lang.Double</env-entry-type>
  19. <env-entry-value>178.5</env-entry-value>
  20. </env-entry>
  21.  
  22. <!-- 注入字符串数组 -->
  23. <env-entry>
  24. <env-entry-name>language</env-entry-name>
  25. <env-entry-type>java.lang.String</env-entry-type>
  26. <env-entry-value>汉语,英语,韩语</env-entry-value>
  27. </env-entry>

ResourcesServlet.java

  1. public class ResourcesServlet extends HttpServlet{
  2.  
  3. /**
  4. *
  5. */
  6. private static final long serialVersionUID = 1L;
  7.  
  8. /**
  9. * 注入用户名(name属性名称要和web.xml文件中的env-entry-name名称一致,类型也要一致)
  10. */
  11. @Resource(name="name")
  12. private String name;
  13.  
  14. /**
  15. * 注入年龄
  16. */
  17. @Resource(name="age")
  18. private Integer age;
  19.  
  20. /**
  21. * 注入身高
  22. */
  23. @Resource(name="height")
  24. private Double height;
  25.  
  26. /**
  27. * 注入语言数组信息
  28. */
  29. @Resource(name="language")
  30. private String language;
  31.  
  32. @Override
  33. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  34. this.doPost(req, resp);
  35. }
  36.  
  37. @Override
  38. protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  39. //输出注入的资源信息
  40. System.out.println(name);
  41. System.out.println(age);
  42. System.out.println(height);
  43. for (String string : language.split(",")) {
  44. System.out.println(string);
  45. }
  46. }
  47. }

Servlet中的初始化参数、上下文参数、以及@Resource资源注入的更多相关文章

  1. Servlet中的属性(attribute)和参数(parameter)的区别

    1.引子 初学者对属性(attribute)和参数(parameter)容易搞混.没搞清他们的区别,项目中就可能出现一此莫名其妙的问题. 2.两者的区别 1) 属性(attribute) 属性是在后台 ...

  2. Servlet中获取POST请求的参数

    在servlet.filter等中获取POST请求的参数 form表单形式提交post方式,可以直接从 request 的 getParameterMap 方法中获取到参数 JSON形式提交post方 ...

  3. JavaWeb(一)Servlet中的ServletConfig与ServletContext

    前言 前面我介绍了一下什么是servlet,它的生命周期,执行过程和它的原理.这里我们做一个简单的回顾! 什么是Servlet? servlet 是运行在 Web 服务器中的小型 Java 程序(即: ...

  4. Servlet中的几个重要的对象(转)

    讲解四大类,ServletConfig对象,ServletContext对象.request对象,response对象 ServletConfig对象 获取途径:getServletConfig(); ...

  5. Servlet中读取参数的几种方式

    为每一Servlet设置初始化参数 可以为每一个Servlet在对应的web.xml中的Servlet节点下编写初始化参数,格式如下: <init-param> <param-nam ...

  6. 使用监听器来启动spring -------使用监听器初始化上下文参数

    问题: 数据初始化监听器要注入spring容器的对象,必须先启动spring容器才能使用监听器初始化数据. 解决: 使用监听器来启动spring框架 问题:spring框架启动需要哪些参数? 1.需要 ...

  7. web.xml中在Servlet中获取context-param和init-param内的参数

    引自:http://blog.csdn.net/yakson/article/details/9203231 web.xml里面可以定义两种参数:1.application范围内的参数,存放在serv ...

  8. oracle中有关初始化参数文件的几个视图对比

    涉及oracle中有关初始化参数文件的几个视图主要有:v$paraemter,v$parameter2,v$system_parameter,v$system_parameter2,v$spparam ...

  9. servlet中获取配置文件中的参数.

    web.xml (添加init-param) <?xml version="1.0" encoding="UTF-8"?> <web-app ...

随机推荐

  1. ScikitLearn 学习器类型

    源自在线课程的学习:http://www.studyai.com/course/detail/d086826e9be84b818f9c54893633663d

  2. Jasper:用户指南 / 设备 / 生命周期管理 / SIM 卡状态

    ylbtech-Jasper:用户指南 / 设备 / 生命周期管理 / SIM 卡状态 1.返回顶部 1. SIM 卡状态 每个设备都有一个状态,决定了它能否在网络上建立数据连接,并且会影响设备是否计 ...

  3. Java多线程运行机制的基本原理

    Java多线程运行机制的基本原理 进程和线程的区别 进程 进程是一个程序执行的实例,比如说我们打开10个IE浏览器窗口,那么就有10个进程开启.一个进程可以同时被运行若干次,进程是CPU进行资源分配和 ...

  4. git base cli

  5. url&nbsp;传递参数(特殊字符)解决方法

    url 传递参数(特殊字符)解决方法 首先设置 apache 配置文件, server.xml 在 port=8080 那一行中加上 URIEcoding=GBK 有些符号在URL中是不能直接传递的, ...

  6. RHEL&nbsp;6&nbsp;搭建ftp服务&nbsp;xinetd,telnet

    1.挂载光盘 设置vmware中光驱选项,载入rhel6光盘镜像 6 搭建ftp服务 xinetd,telnet" /> 2.安装rpm包 输入"#cd /media/&qu ...

  7. 滴滴Booster移动APP质量优化框架 学习之旅 三

    推荐阅读: 滴滴Booster移动App质量优化框架-学习之旅 一 Android 模块Api化演练 不一样视角的Glide剖析(一) 滴滴Booster移动App质量优化框架-学习之旅 二对重复资源 ...

  8. iOS内购流程二(添加产品、沙盒账号以及上架流程)

    注意:使用了IAP的App必须先配置好协议.税务和银行业务 一.创建一个App应用 1.登录iTunes Store,点击我的App 2.新建一个App(如果App已经创建,直接点击App进入就行了) ...

  9. .net过滤器重写beginrequest

    在J2EE Web开发中有过滤器filter,该filter可以对指定的URL访问进行拦截,并执行过滤器的方法,根据实际应用情况,在过滤器中修改请求的代码.判断会话信息,也可以做权限控制,总之这个过滤 ...

  10. codevs1105 过河

    1105 过河 2005年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description 在河上有一座独木桥,一 ...