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

时间:2023-02-26 18:36:11

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

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

使用@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)初始化参数

讨论:使用哪种方式

如果我们需要对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相关文章