配置初始化参数、上下文参数、以及使用@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. BI 底座——数据仓库技术(Data Warehouse)

    在开始喷这个主题之前,让我们先看看数据仓库的官方定义: 数据仓库(Data Warehouse)是一个面向主题的(Subject Oriented).集成的(Integrate).相对稳定的(Non- ...

  2. .NET Framework 2.0安装问题

    在.NET Framework 2.0安装的时候,如果提示 system.deployment.dll失败,另一个程序正在使用此文件,进程无法访问.这种情况下,我们可能的解决方案是: 关闭掉杀毒软件在 ...

  3. windows7如何打开远程桌面&nbsp;-…

    单位的机器,刚装上了windows7旗舰版(当然不是花银子滴),想打开远程桌面连接,这样从别的机器登录也方便.可是问题来了,windows7对安全的设置比较高,不像windows XP那么随便一点就可 ...

  4. Protobuf 文件生成工具 Prototool 命令详解

    Protobuf 文件生成工具 Prototool 命令详解 简介 Prototool 是 Protobuf 文件的生成工具, 目前支持go, php, java, c#, object c 五种语言 ...

  5. HDU - 4821 String(窗口移动+map去重+hash优化)

    String Given a string S and two integers L and M, we consider a substring of S as “recoverable” if a ...

  6. HDU - 6415 多校9 Rikka with Nash Equilibrium(纳什均衡+记忆化搜索/dp)

    Rikka with Nash Equilibrium Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 524288/524288 K ...

  7. hihocoder1475 数组分拆【DP+前缀和优化】

    思路: DP[ i ] 代表以 i 结尾的方案数. dp[i] += sum[i] - sum[j - 1] != 0 ? dp[j] : 0 ; 对于100%的数据,满足1<=N<=10 ...

  8. ue4 修改3dui内容

    修改text内容1 修改text内容2 上面的方法是对外公开某个控件,然后再蓝图中直接改控件内容 另一种更好的方法时,在控件上新建public变量,控件绑定到这个变量上,由蓝图直接改变这个public ...

  9. c++弱引用与强引用

    https://www.zhihu.com/question/26851369 智能指针一个很重要的概念是"所有权",所有权意味着当这个智能指针被销毁的时候,它指向的内存(或其它资 ...

  10. Android权限之三共享UID和签名

    http://blog.csdn.net/a345017062/article/details/6236263 共享UID 安装在设备中的每一个Android包文件(.apk)都会被分配到一个属于自己 ...