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);
}
}
}
Servlet中的初始化参数、上下文参数、以及@Resource资源注入的更多相关文章
- Servlet中的属性(attribute)和参数(parameter)的区别
1.引子 初学者对属性(attribute)和参数(parameter)容易搞混.没搞清他们的区别,项目中就可能出现一此莫名其妙的问题. 2.两者的区别 1) 属性(attribute) 属性是在后台 ...
- Servlet中获取POST请求的参数
在servlet.filter等中获取POST请求的参数 form表单形式提交post方式,可以直接从 request 的 getParameterMap 方法中获取到参数 JSON形式提交post方 ...
- JavaWeb(一)Servlet中的ServletConfig与ServletContext
前言 前面我介绍了一下什么是servlet,它的生命周期,执行过程和它的原理.这里我们做一个简单的回顾! 什么是Servlet? servlet 是运行在 Web 服务器中的小型 Java 程序(即: ...
- Servlet中的几个重要的对象(转)
讲解四大类,ServletConfig对象,ServletContext对象.request对象,response对象 ServletConfig对象 获取途径:getServletConfig(); ...
- Servlet中读取参数的几种方式
为每一Servlet设置初始化参数 可以为每一个Servlet在对应的web.xml中的Servlet节点下编写初始化参数,格式如下: <init-param> <param-nam ...
- 使用监听器来启动spring -------使用监听器初始化上下文参数
问题: 数据初始化监听器要注入spring容器的对象,必须先启动spring容器才能使用监听器初始化数据. 解决: 使用监听器来启动spring框架 问题:spring框架启动需要哪些参数? 1.需要 ...
- web.xml中在Servlet中获取context-param和init-param内的参数
引自:http://blog.csdn.net/yakson/article/details/9203231 web.xml里面可以定义两种参数:1.application范围内的参数,存放在serv ...
- oracle中有关初始化参数文件的几个视图对比
涉及oracle中有关初始化参数文件的几个视图主要有:v$paraemter,v$parameter2,v$system_parameter,v$system_parameter2,v$spparam ...
- servlet中获取配置文件中的参数.
web.xml (添加init-param) <?xml version="1.0" encoding="UTF-8"?> <web-app ...
随机推荐
- hive通过spark导入hbase
发现采用shcjar的话,总是执行到某个点就停止了 于是我打算尝试一下直接说哦用org.apache.hadoop.hbase.spark这个datasource看看 确实不行,即使没有createt ...
- Oracle的case 用法
1.测试表declare @stuinfo table(id int, sname nvarchar(20), ///小组名称 gender varchar(1), //小组性别 sgroup int ...
- 用OpenLayers开发地图应用
项目背景 最近有一个使用全球地图展示数据的项目,用地图展示数据本身没什么难度,但出于安全和保密的考虑,甲方单位要求项目不能连接外网,只能在内网使用,也就是说,我们不得不在内网中部署一个地图服务器,在这 ...
- 二叉树遍历入门 Lebal:research
解决二叉树遍历的画法 对于二叉树的基本概念,一般学生都知道,但对于二叉树的遍历,在实际运用中可以发现很多问题,这里提供一次性彻底解决这个问题的方法. 二叉树的遍历 二叉树的遍历是指不重复地访问二叉树中 ...
- cassandra自启动服务器脚本
新建一个文件. vi /etc/rc.d/init.d/vi cassandra2 #!/bin/sh # chkconfig: # description: service -- # process ...
- ubuntu在recovery模式下更改用户密码
http://www.jb51.net/os/Ubuntu/164636.html 1, restart 2, Hold down shift key / press and hold 3, sele ...
- JVM StackOverflowError vs. OutOfMemoryError
if the computation in a thread needs a larger Java Virtual Machine stack than is permitted, the Java ...
- 2.6用tr进行转换
tr可以对来自标准输入的内容进行字符替换.字符删除以及重复字符压缩.它可以将一组字符变成另一组字符,因而通常也被称为转换命令. 1.tr只能通过stdin(标准输入),而无法通过命令行参数来接受输入. ...
- 7.20实习培训日志-Java基础程序设计结构
Java基础程序设计结构 在 Math 类中,为了达到最快的性能,所有的方法都使用计算机浮点单元中的例程,如果得到一个完全可预测的结果比运行速度更重要的话,那么就应该使用StrictMath类,它使用 ...
- AJAX 入门教程
一.前言 AJAX 是我们教程用到的请求数据的技术,在这里我就给自己做一个小结. 二.案例 我使用的是 JQuery 的 AJAX 来实践.后端服务我使用的是 c# 的mvc. 后端代码: using ...