Java for Web学习笔记(七):Servlet(5)初始化参数

Context Init参数

在web.xml中可以基于整个上下文进行设置,在web app内各个Servlet都可以获取。

 
     settingOne
     foo
 
 
     settingTwo
     bar
 

我们可以在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中加入以下定义:


    ServletParamTestServlet
    cn.wei.flowingflying.chapter03.ServletParamTestServlet
    
        databaseName
        mydabase
    
    
        databaseIp
        192.168.1.101
    


    ServletParamTestServlet
    /servletInitTest
 

代码如下:

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"));
	}
}

Java for Web学习笔记(七):Servlet(5)初始化参数_第1张图片

使用@WebServlet

使用@WebServlet的例子如下:

@WebServlet(
		name = "servletParameTest2Servlet",
		urlPatterns = {"/servletParameTest2"},
		initParams = {
			@WebInitParam(name = "databaseName", value = "TestDatabase"),
			@WebInitParam(name = "databaseIp", value = "181.0.0.100")
		})

代码内容同上一个例子,运行结果如下:

Java for Web学习笔记(七):Servlet(5)初始化参数_第2张图片

讨论:使用哪种方式

如果我们需要对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,愷风(Wei)之Java,for,Web学习笔记)