Java for Web学习笔记(七):Servlet(5)初始化参数
2015-11-13 15:56
323 查看
Context Init参数
在web.xml中可以基于整个上下文进行设置,在web app内各个Servlet都可以获取。<context-param> <param-name>settingOne</param-name> <param-value>foo</param-value> </context-param> <context-param> <param-name>settingTwo</param-name> <param-value>bar</param-value> </context-param>
我们可以在context中获取这些数值。例子如下:
@WebServlet( name = "ContextparamTestServlet", urlPatterns = {"/ContextParamTest"} ) public class ContextparamTestServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /* 应养成设置Content-Type这个Header的习惯 ,本例设置为Content-Type:“text/plain;charset=UTF-8”*/ response.setContentType("text/plain"); response.setCharacterEncoding("UTF-8"); ServletContext context = getServletContext(); //获取上下文 response.getWriter().append("settingOne = ").append(context.getInitParameter("settingOne")) .append("\nsettingTwo = ").append(context.getInitParameter("settingTwo")); } }
Servlet Init参数
使用web.xml
基于不要同时使用web.xml和代码中的@WebServlet的原则,我们在代码中删除或者注释掉@WebServlet。在web.xml中加入以下定义:<servlet> <servlet-name>ServletParamTestServlet</servlet-name> <servlet-class>cn.wei.flowingflying.chapter03.ServletParamTestServlet</servlet-class> <init-param> <param-name>databaseName</param-name> <param-value>mydabase</param-value> </init-param> <init-param> <param-name>databaseIp</param-name> <param-value>192.168.1.101</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>ServletParamTestServlet</servlet-name> <url-pattern>/servletInitTest</url-pattern> </servlet-mapping>
代码如下:
public class ServletParamTestServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/plain"); response.setCharacterEncoding("UTF-8"); ServletConfig c = this.getServletConfig(); PrintWriter writer = response.getWriter(); writer.append("databaseName = ").append(c.getInitParameter("databaseName")) .append("\ndatabaseIp = ").append(c.getInitParameter("databaseIp")); } }
使用@WebServlet
使用@WebServlet的例子如下:@WebServlet( name = "servletParameTest2Servlet", urlPatterns = {"/servletParameTest2"}, initParams = { @WebInitParam(name = "databaseName", value = "TestDatabase"), @WebInitParam(name = "databaseIp", value = "181.0.0.100") })
代码内容同上一个例子,运行结果如下:
讨论:使用哪种方式
如果我们需要对Servlet的初始参数进行设定,一般使用web.xml。这些配置可以根据部署情况变化而进行修改,无需开发人员重新进行编译。当然,有一些参数可能是固定,那么这种情况,我们可以将此放置在一个类中。使用@Config的方式(在javax.servlet.annotation中定义),可以简化web.xml内容,一般推荐使用,但是这种方式不适用于:
1、 为同一个servlet创建多个servlet实例;
2、 无需重新编译,修改初始化参数(通常和具体的配置有关)
3、 超过一个Filter。对于Filter,提供了@WebFilter的方式,如果有多个Filter,使用@Config方式无法设定Filter的顺序。
相关链接:
我的Professional Java for Web Applications相关文章
相关文章推荐
- Java:String和Date、Timestamp之间的转换
- Java NIO教程(二) Channel
- Java NIO教程(一) 核心概述
- 深入浅析Java中Static Class及静态内部类和非静态内部类的不同
- java如何打包
- java 如何获取服务器当前时间
- Java中g的数据类型
- 利用JMX统计远程JAVA进程的CPU和Memory---jVM managerment API
- Java Class类以及获取Class实例的三种方式
- Java正则表达式
- java 反射
- Java构造方法小总结
- Spring framework不同Scope的Bean注入时使用代理类的理解
- 使用Spring Quartz做自动任务 启动和关闭
- OpenJDK和JDK区别
- java8的时间处理
- Java如何将json格式字符串解析为json对象
- java系列-反射 Reflection
- eclipse详细手册
- Java反射机制