配置初始化参数、上下文参数、以及使用@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);
}
}
}

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. Html 5 版 电子时钟

    效果图: html 5 canvas元素  Html 5的canvas元素可以用于在网页上绘制图形[即canvas的作用]. canvas画布使用JavaScript在网页上绘制图形 其拥有绘制各种路 ...

  2. μC/OS-II与RT-Thread对比—任务调度

    在任务调度器的实现上,μC/OS-II和RT-Thread都采用了位图调度(bitmap scheduling),任务优先级的值越小则代表具有越高的优先级,主要区别在于实现形式,是采用多级队列的形式, ...

  3. printf函数指向串口的方法

    简单地说:想在mdk 中用printf,需要同时重定义fputc函数和避免使用semihosting(半主机模式),标准库函数的默认输出设备是显示器,要实现在串口或LCD输出,必须重定义标准库函数里调 ...

  4. JavaScript高级程序设计学习笔记第六章--面向对象程序设计

    1.ECMAScript没有类的概念,ECMA-262 把对象定义为:“无序属性的集合,其属性可以包含基本值.对象或者函数.”,有点类似于散列表 2.ECMAScript 中有两种属性:数据属性和访问 ...

  5. java之Date(日期)、Date格式化、Calendar(日历)

    参考http://how2j.cn/k/date/date-date/346.html Date(日期) Date类 注意:是java.util.Date; 而非 java.sql.Date,此类是给 ...

  6. redis需要掌握的知识点

  7. 一个工程多个Target

    当我们同一个工程需要在不同情形下编译打包,比如打个人包.企业包的时候,其中可能有一些细小的差别,又不想每次都先修改再打包的时候,我们可以通过创建多个Target来实现. 1.copy原有Target ...

  8. 51nod1110(xjb)

    题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1110 题意:中文题诶- 思路:可以将在 xi 位置,权值为 w ...

  9. uoj#399. 【CTSC2018】假面(概率期望)

    传送门 记\(p_{i,j}\)为\(i\)还剩\(j\)滴血的概率,那么\(i\)最后血量的期望就是\[E_i=\sum_{j=0}^{m_i}j\times p_{i,j}\] 然后\(p\)数组 ...

  10. IT兄弟连 Java语法教程 运行Java程序

    编译好Java字节码文件后,接下来就应该运行Java程序了. 运行Java程序需要使用JDK中提供的java命令,因为已经把java命令所在的路径添加到了系统的Path环境变量中,因此现在可以直接使用 ...