在web.xml中使用资源注射(@Resource) (Tomcat7此路不通,Tomcat6大多可以)
2012-02-08 21:22
399 查看
资源注射是从JavaEE 5.0开始出现,实现了Tomcat在启动时自动将web.xml中的配置信息“注射”到Servlet中。资源注射是通过Annotation完成,Annotation是一种特殊的接口,以"@"为标志,用法如下:
有时为了简洁,上面的两行代码可以缩写为一行:
下面用实例来说明:
下一步,在web.xml中使用标签<env-entry>来配置资源。<env-entry>仅能配置java.lang包下标准类型的变量,如String, Integer, Double等。配置后的代码如下:
资源注射的原理:JNDI
InjectionServlet实例中使用<env-entry>配置了名为hello, i, persons的JNDI资源,然后使用@Resource将指定名称的JNDI资源注射到InjectionServlet里。如果不使用@Resource,直接通过JNDI也可以获取这三个参数,代码如下:
注:参考《Java Web整合开发》一书
@Resource (name="messageNameInWebXml") private String message;
有时为了简洁,上面的两行代码可以缩写为一行:
private @Resource(name="messageNameInWebXml") String message;加入@Resource注释后,Tomcat会在Servlet运行时将变量message的值注入,这个值设置在web.xml中名为messageNameInWebXml的参数中。
下面用实例来说明:
package com.hello.servlet; import java.io.*; import javax.annotation.Resource; import javax.servlet.*; import javax.servlet.http.*; public class InjectionServlet extends HttpServlet{ private @Resource(name="hello") String hello; private @Resource(name="i") int i; @Resource(name="persons") private String persons; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ response.setCharacterEncoding("UTF-8"); request.setCharacterEncoding("UTF-8"); response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional //EN\">"); out.println("<HTML>"); out.println("<HEAD><TITLE>资源注入</TITLE></HEAD>"); out.println("<style>body{font-size:12px;}</style>"); out.println("<b>注入的字符串</b>: <br/> - " + hello +"<br />"); out.println("<b>注入的整数</b>: <br/> - " + i +"<br />"); out.println("<b>注入的字符串数组</b>: <br/>"); for(String person : persons.split(",")){ out.println(" - " + person +"<br />"); } out.println("<BODY>"); out.println("</BODY>"); out.println("</HTML>"); out.flush(); out.close(); } }
下一步,在web.xml中使用标签<env-entry>来配置资源。<env-entry>仅能配置java.lang包下标准类型的变量,如String, Integer, Double等。配置后的代码如下:
<servlet> <servlet-name>InjectionServlet</servlet-name> <servlet-class>com.hello.servlet.InjectionServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>InjectionServlet</servlet-name> <url-pattern>/servlet/InjectionServlet</url-pattern> </servlet-mapping> <!-- 下面是资源配置 --> <env-entry> <env-entry-name>hello</env-entry-name> <env-entry-type>java.lang.String</env-entry-type> <env-entry-value>Hello, Welcome to the JavaEE Resource Injection</env-entry-value> </env-entry> <env-entry> <env-entry-name>i</env-entry-name> <env-entry-type>java.lang.Integer</env-entry-type> <env-entry-value>14</env-entry-value> </env-entry> <env-entry> <env-entry-name>persons</env-entry-name> <env-entry-type>java.lang.String</env-entry-type> <env-entry-value>Helloween, Cobain, Roses, WLJ, </env-entry-value> </env-entry>
资源注射的原理:JNDI
InjectionServlet实例中使用<env-entry>配置了名为hello, i, persons的JNDI资源,然后使用@Resource将指定名称的JNDI资源注射到InjectionServlet里。如果不使用@Resource,直接通过JNDI也可以获取这三个参数,代码如下:
Context ctx = new InitialContext(); String message = (String)ctx.lookup("message"); Integer i = (Integer)ctx.lookup("i"); String persons = (String)ctx.lookup("persons");
注:参考《Java Web整合开发》一书
相关文章推荐
- 3.使用资源注射(@Resource)读取web.xml初始参数
- 备忘:在web.xml中使用org.springframework.js.resource.ResourceServlet的配置对静态资源的访问
- eclipse中把web项目部署在tomcat中,可以使用浏览器访问,但是无法在tomcat目录中的webapps中找到?
- Java Servlet学习【1】编写Servlet程序,配置web.xml,使用免安装版tomcat
- 第8天(就业班) xml约束、Schema约束、Web开发入门、tomcat服务器、手动开发动态资源
- web.xml之资源管理对象配置 resource-env-ref
- 在web.xml定义,在网页中使用变量实例 使用只有创建变量的servlet才可以访问的<init-param>方式 附带登陆和跳转实现
- 使用ServletConfig获得web.xml资源中的参数
- WebSphere Application Server 更新web.xml的问题以解决有些应用在tomcat环境下可以跑,更新到was上失效的问题
- 使用android-resource-remover优化资源使用率和lint-result.xml如果导出
- eclipse 使用tomcat7.0建立Dynamic Web Project 时 web.xml的问题
- Xml使用二三事: 小事1:做一个可以动态修改的“App.config”或“web.config”
- WebSphere Application Server 更新web.xml的问题以解决有些应用在tomcat环境下可以跑,更新到was上失效的问题
- WEB项目tomcat容器下 java访问自定义的资源文件xml
- Digester 的使用(tomcat中server.xml and web.xml 的加载)
- 在web.xml定义,在网页中使用变量实例 使用所有Servlet都可以访问的<context-param>方式
- tomcat对于web.xml的security-constraint使用的处理机制
- tomcat 可以在web.xml当中配置404 自定义错误页面
- 二十六、使用${pageContext.request.contextPath}指定js资源包、以及经由web.xml指定.action等的理解
- WebPack系列:Webpack编译的代码如何在tomcat中使用时静态资源路径不对的问题如何解决