首先请看一个servlet类:
package servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class StudyServlet extends javax.servlet.http.HttpServlet {
private static final long serialVersionUID = 9186180488616928747L;
private String contextPrarmeter;
private String servletPrarmeter;
@Override public void init() throws ServletException {
// init方法在Servlet的生命周期中只会执行一次,一般在这个地方初始化应用中共用的数据。
System.out.println("in StudyServlet init()...");
// 下面是读取应用级参数的方法,对应的参数放置在<context-param>小节里面
ServletContext context = getServletContext();
contextPrarmeter = context.getInitParameter("contextPrarmeter");
// 下面是读取Servlet参数的方法,对应的参数放置在<servlet>小节的<init-param>小节里面
servletPrarmeter = getInitParameter("servletPrarmeter");
}
@Override protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doProcess(request, response);
}
@Override protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doProcess(request, response);
}
@Override public void destroy() {
// destroy方法在Servlet的生命周期中只会执行一次。一般用于释放应用中使用的某些资源。
System.out.println("in StudyServlet destroy()...");
contextPrarmeter = null;
servletPrarmeter = null;
}
private void doProcess(HttpServletRequest request, HttpServletResponse response) throws ServletException,
IOException {
// 每次请求都会进入到本方法,请注意:doGet和doPost都是调用的本方法,它们对应了html中GET和POST两种请求方式。
System.out.println("in StudyServlet doProcess()...");
/*
* 读取请求的参数 如果是GET方式的请求,它就是请求的URL中?后面的部分,例如StudyServlet.jsp?mode=xxxx
* 如果是POST方式的请求,它就是form中的一个name为mode的表单元素的数据,例如<input type="hidden"
* name="mode" value="xxxx">
*/
String parameter = request.getParameter("mode");
// 获取页面输出对象
PrintWriter out = response.getWriter();
// 演示设定不同输出类型,这里只演示了两种模式。
if ("xml".equalsIgnoreCase(parameter)) { //xml输出
response.setContentType("text/xml");
out.println("<?xml version=/"1.0/" encoding=/"UTF-8/"?>");
out.println("<root>");
out.println("<ContextPrarmeter>" + contextPrarmeter + "</ContextPrarmeter>");
out.println("<ServletPrarmeter>" + servletPrarmeter + "</ServletPrarmeter>");
out.println("</root>");
}
else { //普通html输出
response.setContentType("text/html");
out.println("<html><body>");
out.println("ContextPrarmeter:" + contextPrarmeter + "<br>");
out.println("ServletPrarmeter:" + servletPrarmeter);
out.println("</body></html>");
}
}
}
然后在web.xml中添加下面的配置。
<context-param>
<description>Context参数测试</description>
<param-name>contextPrarmeter</param-name>
<param-value>TestContextPrarmeter</param-value>
</context-param>
<servlet>
<description>Servlet学习</description>
<display-name>StudyServlet</display-name>
<servlet-name>StudyServlet</servlet-name>
<servlet-class>servlet.StudyServlet</servlet-class>
<init-param>
<description>Servlet参数测试</description>
<param-name>servletPrarmeter</param-name>
<param-value>TestServletPrarmeter</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>StudyServlet</servlet-name>
<url-pattern>/StudyServlet.jsp</url-pattern>
</servlet-mapping>
配置的简单说明:
<load-on-startup>1</load-on-startup>表示应用启动的时候就初始化Servlet,也就是调用init方法。如果没有这一项,就是在初次访问Servlet的时候初始化。
<servlet>和<servlet-mapping>小节共同构成一个映射,让你通过http://主机:端口/应用/StudyServlet.jsp访问servlet.StudyServlet,class名称是包含包路径的(废话)。
<context-param>和<init-param>小节在类里面的注释说明了使用方法。
现在可以发布并启动你的应用了,启动浏览器,输入http://主机:端口/应用/StudyServlet.jsp看看。
页面是不是显示:
ContextPrarmeter:TestContextPrarmeter
ServletPrarmeter:TestServletPrarmeter
如果输入http://主机:端口/应用/StudyServlet.jsp?mode=xml
浏览将会显示一个xml文件。
如果你细心观察服务器控制台的输出,就会发现:
in StudyServlet init()... 和 in StudyServlet destroy()... 都只会出现一次。这两个方法都只会在应用程序的生命周期中出现一次。
而in StudyServlet doProcess()...是每次访问StudyServlet.jsp都会出现。
好了,虽然这个示例很简短,但是已经包含了建置一个Servlet的基本元素,以及读取Servlet、以及应用的配置的方法,也就是入门的知识。
package servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class StudyServlet extends javax.servlet.http.HttpServlet {
private static final long serialVersionUID = 9186180488616928747L;
private String contextPrarmeter;
private String servletPrarmeter;
@Override public void init() throws ServletException {
// init方法在Servlet的生命周期中只会执行一次,一般在这个地方初始化应用中共用的数据。
System.out.println("in StudyServlet init()...");
// 下面是读取应用级参数的方法,对应的参数放置在<context-param>小节里面
ServletContext context = getServletContext();
contextPrarmeter = context.getInitParameter("contextPrarmeter");
// 下面是读取Servlet参数的方法,对应的参数放置在<servlet>小节的<init-param>小节里面
servletPrarmeter = getInitParameter("servletPrarmeter");
}
@Override protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doProcess(request, response);
}
@Override protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doProcess(request, response);
}
@Override public void destroy() {
// destroy方法在Servlet的生命周期中只会执行一次。一般用于释放应用中使用的某些资源。
System.out.println("in StudyServlet destroy()...");
contextPrarmeter = null;
servletPrarmeter = null;
}
private void doProcess(HttpServletRequest request, HttpServletResponse response) throws ServletException,
IOException {
// 每次请求都会进入到本方法,请注意:doGet和doPost都是调用的本方法,它们对应了html中GET和POST两种请求方式。
System.out.println("in StudyServlet doProcess()...");
/*
* 读取请求的参数 如果是GET方式的请求,它就是请求的URL中?后面的部分,例如StudyServlet.jsp?mode=xxxx
* 如果是POST方式的请求,它就是form中的一个name为mode的表单元素的数据,例如<input type="hidden"
* name="mode" value="xxxx">
*/
String parameter = request.getParameter("mode");
// 获取页面输出对象
PrintWriter out = response.getWriter();
// 演示设定不同输出类型,这里只演示了两种模式。
if ("xml".equalsIgnoreCase(parameter)) { //xml输出
response.setContentType("text/xml");
out.println("<?xml version=/"1.0/" encoding=/"UTF-8/"?>");
out.println("<root>");
out.println("<ContextPrarmeter>" + contextPrarmeter + "</ContextPrarmeter>");
out.println("<ServletPrarmeter>" + servletPrarmeter + "</ServletPrarmeter>");
out.println("</root>");
}
else { //普通html输出
response.setContentType("text/html");
out.println("<html><body>");
out.println("ContextPrarmeter:" + contextPrarmeter + "<br>");
out.println("ServletPrarmeter:" + servletPrarmeter);
out.println("</body></html>");
}
}
}
然后在web.xml中添加下面的配置。
<context-param>
<description>Context参数测试</description>
<param-name>contextPrarmeter</param-name>
<param-value>TestContextPrarmeter</param-value>
</context-param>
<servlet>
<description>Servlet学习</description>
<display-name>StudyServlet</display-name>
<servlet-name>StudyServlet</servlet-name>
<servlet-class>servlet.StudyServlet</servlet-class>
<init-param>
<description>Servlet参数测试</description>
<param-name>servletPrarmeter</param-name>
<param-value>TestServletPrarmeter</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>StudyServlet</servlet-name>
<url-pattern>/StudyServlet.jsp</url-pattern>
</servlet-mapping>
配置的简单说明:
<load-on-startup>1</load-on-startup>表示应用启动的时候就初始化Servlet,也就是调用init方法。如果没有这一项,就是在初次访问Servlet的时候初始化。
<servlet>和<servlet-mapping>小节共同构成一个映射,让你通过http://主机:端口/应用/StudyServlet.jsp访问servlet.StudyServlet,class名称是包含包路径的(废话)。
<context-param>和<init-param>小节在类里面的注释说明了使用方法。
现在可以发布并启动你的应用了,启动浏览器,输入http://主机:端口/应用/StudyServlet.jsp看看。
页面是不是显示:
ContextPrarmeter:TestContextPrarmeter
ServletPrarmeter:TestServletPrarmeter
如果输入http://主机:端口/应用/StudyServlet.jsp?mode=xml
浏览将会显示一个xml文件。
如果你细心观察服务器控制台的输出,就会发现:
in StudyServlet init()... 和 in StudyServlet destroy()... 都只会出现一次。这两个方法都只会在应用程序的生命周期中出现一次。
而in StudyServlet doProcess()...是每次访问StudyServlet.jsp都会出现。
好了,虽然这个示例很简短,但是已经包含了建置一个Servlet的基本元素,以及读取Servlet、以及应用的配置的方法,也就是入门的知识。