配置初始化参数、上下文参数、以及使用@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. MySQL 用户管理与权限管理

    MySQL 用户管理与权限管理 -- 操作环境mysql> show variables like 'version';  +---------------+--------+| Variabl ...

  2. poj2392磊石头——排序后背包

    题目: 首先按限制高度从小到大排序,不会影响可行解,而不排序可能卡掉正确的情况: 用%2滚动数组时一定注意每次复制上一种情况,因为这个WA了好几次. 代码如下: #include<iostrea ...

  3. 创建自己的YUM仓库

    1. 首先,假定我们应用的名字叫helloworld(可以参考简单 RPM 包制作来创建两个版本helloworld安装RPM包,helloworld-1.0.0-1.el6.x86_64.rpm和h ...

  4. C# 对象间的 深拷贝 实现

        以下的这个类实现了 2个含有部分字段名字相同 的对象的 赋值拷贝. public class ShallowCopyHelper     {         public static voi ...

  5. Mysql常用命令行大全(三)

    /**操作数据库*/ SHOW DATABASES; CREATE DATABASE db; SHOW DATABASES; DROP DATABASE db; /**操作表*/ USE  db; S ...

  6. Jsp介绍(1)

    JSP(Java Server Pages)是运行在服务端的语言是一种动态网页开发技术它使用JSP标签在HTML网页中插入Java代码.标签通常以<%开头以%>结束.是一种使软件开发者可以 ...

  7. SQL 排序规则问题

    http://blog.csdn.net/delphigbg/article/details/12744807 MSSQL排序规则总结   什么是排序规则呢? 排序规则根据特定语言和区域设置标准指定对 ...

  8. .NET&nbsp;下的&nbsp;POP3&nbsp;编程代码共享

    前一段时间在论坛上看见有人问如何使用.net进行POP3编程,其实POP3的使用很简单,所以.net没有向SMTP那样给出相应的类来控制. 废话少说,程序员最需要的使代码. 1.打开VS.NET 20 ...

  9. linux消息队列相关操作

    /* 发送消息队列 */ #include <stdio.h>#include <stdlib.h>#include <string.h>#include < ...

  10. echarts学习的一些笔记

    工具栏组件 Show 是否显示 Feature 具体显示的功能 saveAslmage  保存图片 Restore 还原 dataZoom  缩放视图 magicType 动态类型切换 toltip组 ...