在编写java web应用程序的时候,我们难免会遇到需要使用参数来初始化应用程序的问题。在这里介绍最简单的三种方式:使用上下文参数进行配置、使用Servlet初始化参数以及使用注释来初始化参数。

这些参数有很多的用途,比如定义数据库的连接信息、作为全局变量等。它们在应用程序启动的时候被定义,只有重启应用程序才可以修改这些参数。

1>使用上下文参数进行配置

在web.xml文件中使用标签声明上下文初始化参数:

XHTML

first

AmosH's

second

blog


first

AmosH's

second

blog

该代码创建了两个上下文初始化参数:值为AmosH’s的first以及值为blog的second。这样我们在Servlet代码的任何地方都可以使用这些初始化参数。

Java
@WebServlet(
name = "AmosH",
urlPatterns = {"/blog"},
loadOnStartup = 1
)
public class HelloServlet extends HttpServlet{
@Override
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws IOException{
//创建ServletContext类,用以管理上下文参数
ServletContext sc = this.getServletContext();
PrintWriter pr = response.getWriter();
pr.append(sc.getInitParameter("first"));
pr.append(" ");
pr.append(sc.getInitParameter("second"));
}
}


@WebServlet(
name="AmosH",
urlPatterns={"/blog"},
loadOnStartup=1
)
publicclassHelloServletextendsHttpServlet{
@Override
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
throwsIOException{
//创建ServletContext类,用以管理上下文参数
ServletContextsc=this.getServletContext();
PrintWriterpr=response.getWriter();
pr.append(sc.getInitParameter("first"));
pr.append(" ");
pr.append(sc.getInitParameter("second"));
}
}

运行结果:

javaweb

2>使用Servlet初始化参数

使用Servlet初始化参数可以为该Servlet创建一个专属的初始化参数。这些参数绑定在这个类上,只能被它所用。

首先在web.xml文件中,为Servlet绑定初始化参数:

XHTML

AmosH

com.HelloServlet

first

和喧嚣保持距离

second

与梦想平等交易

AmosH

/blog

AmosH

com.HelloServlet

first

和喧嚣保持距离

second

与梦想平等交易

AmosH

/blog

看下面的代码,和使用上下文参数进行配置看起来很相像,但是这里使用的是ServletConfig类来获取初始化参数:

Java
public class HelloServlet extends HttpServlet{
@Override
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws IOException{
ServletConfig sc = this.getServletConfig();
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html");
PrintWriter pr = response.getWriter();
pr.append(sc.getInitParameter("first"));
pr.append(" ");
pr.append(sc.getInitParameter("second"));
}
}
publicclassHelloServletextendsHttpServlet{
@Override
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
throwsIOException{
ServletConfigsc=this.getServletConfig();
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html");
PrintWriterpr=response.getWriter();
pr.append(sc.getInitParameter("first"));
pr.append(" ");
pr.append(sc.getInitParameter("second"));
}
}

运行结果:

webapp

3>使用注解获取注解

我们可以通过注解的方式,移除web.xml中的servlet标签和servlet-mapping标签:

Java
@WebServlet(
name = "blog",
urlPatterns = {"/blog"},
loadOnStartup = 1,
initParams = {
@WebInitParam(name="first",value="玄学编程"),
@WebInitParam(name="second",value = "佛性养生")
}
)
public class HelloServlet extends HttpServlet{
@Override
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws IOException{
ServletConfig sc = this.getServletConfig();
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html");
PrintWriter pr = response.getWriter();
pr.append(sc.getInitParameter("first"));
pr.append(" ");
pr.append(sc.getInitParameter("second"));
}
}
@WebServlet(
name="blog",
urlPatterns={"/blog"},
loadOnStartup=1,
initParams={
@WebInitParam(name="first",value="玄学编程"),
@WebInitParam(name="second",value="佛性养生")
}
)
publicclassHelloServletextendsHttpServlet{
@Override
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
throwsIOException{
ServletConfigsc=this.getServletConfig();
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html");
PrintWriterpr=response.getWriter();
pr.append(sc.getInitParameter("first"));
pr.append(" ");
pr.append(sc.getInitParameter("second"));
}
}

运行效果:

注解修改初始化参数

这样虽然比使用部署描述符更加简洁,不过这样也有一个缺点,就是修改了参数之后必须重新编译之后才能使得修改生效。既然必须重新编译才能生效,不如将其设置为类常量。

使用web.xml这样的部署描述符的优点便是,修改后只需要重启应用程序即可生效。