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 ...
随机推荐
- ScikitLearn 学习器类型
源自在线课程的学习:http://www.studyai.com/course/detail/d086826e9be84b818f9c54893633663d
- Jasper:用户指南 / 设备 / 生命周期管理 / SIM 卡状态
ylbtech-Jasper:用户指南 / 设备 / 生命周期管理 / SIM 卡状态 1.返回顶部 1. SIM 卡状态 每个设备都有一个状态,决定了它能否在网络上建立数据连接,并且会影响设备是否计 ...
- Java多线程运行机制的基本原理
Java多线程运行机制的基本原理 进程和线程的区别 进程 进程是一个程序执行的实例,比如说我们打开10个IE浏览器窗口,那么就有10个进程开启.一个进程可以同时被运行若干次,进程是CPU进行资源分配和 ...
- git base cli
- url 传递参数(特殊字符)解决方法
url 传递参数(特殊字符)解决方法 首先设置 apache 配置文件, server.xml 在 port=8080 那一行中加上 URIEcoding=GBK 有些符号在URL中是不能直接传递的, ...
- RHEL 6 搭建ftp服务 xinetd,telnet
1.挂载光盘 设置vmware中光驱选项,载入rhel6光盘镜像 6 搭建ftp服务 xinetd,telnet" /> 2.安装rpm包 输入"#cd /media/&qu ...
- 滴滴Booster移动APP质量优化框架 学习之旅 三
推荐阅读: 滴滴Booster移动App质量优化框架-学习之旅 一 Android 模块Api化演练 不一样视角的Glide剖析(一) 滴滴Booster移动App质量优化框架-学习之旅 二对重复资源 ...
- iOS内购流程二(添加产品、沙盒账号以及上架流程)
注意:使用了IAP的App必须先配置好协议.税务和银行业务 一.创建一个App应用 1.登录iTunes Store,点击我的App 2.新建一个App(如果App已经创建,直接点击App进入就行了) ...
- .net过滤器重写beginrequest
在J2EE Web开发中有过滤器filter,该filter可以对指定的URL访问进行拦截,并执行过滤器的方法,根据实际应用情况,在过滤器中修改请求的代码.判断会话信息,也可以做权限控制,总之这个过滤 ...
- codevs1105 过河
1105 过河 2005年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description 在河上有一座独木桥,一 ...