Servlet初识
1、servlet (转自http://blog.sina.com.cn/s/blog_78c913e30100wdld.html)
打开API文档,我们可以看到Servlet接口是在javax.servlet包中。该接口定义了五种方法:
public void init(ServletConfig config) throws ServletException
public void service(ServletRequest req,ServletResponse res) throws ServletException,java.io.IOException
public void destroy()
public ServletConfig getServletConfig()
public java.lang.String getServletInfo()
下面是这五种方法的作用:
init():在Servlet实例化后,Servlet容器会调用init()方法,来初始化该对象,主要是为了让Servlet对象在处理客户请求前可以完成一些初始化的工作。例如:建立数据库连接,获取配置信息等。对于每一个Servlet实例,init()方法只能被调用一次。init()方法有一个类型为ServletConfig的参数,Servlet容器通过这个参数向Servlet传递配置信息。Servlet使用ServletConfig对象从Web应用程序的配置信息中获取以名-值对形式提供的初始化参数。另外,在Servlet中,还可以通过ServletConfig对象获取描述Servlet运行环境的ServletContext对象,使用该对象,Servlet可以和它的Servlet容器进行通信。
service():容器调用service()方法来处理客户端的请求。要注意的是,在service()方法被容器调用之前,必须确保init()方法正确完成。容器会构造一个表示客户端请求信息的请求对象(类型为ServletRequest)和一个用于对客户端进行响应的响应对象(类型为ServletResponse)作为参数传递给service()方法。在service()方法中,Servlet对象通过ServletRequest对象得到客户端的相关信息和请求信息,在对请求进行处理后,调用ServletResponse对象的方法设置响应信息。
destroy():当容器检测到一个Servlet对象应该从服务中被移除的时候,容器会调用该对象的destroy()方法,以便让Servlet对象可以释放它所使用的资源,保存数据到持久存储设备中。例如:将内存中的数据保存到数据库中,关闭数据库的连接等。当需要释放内存或容器关闭时,容器就会调用Servlet对象的destroy()方法。在Servlet容器调用destroy()方法前,如果还有其他的线程正在service()方法中执行,容器会等待这些线程执行完毕或等待服务器设定的超时值到达。一旦Servlet对象的destroy()方法被调用,容器不会再把其他的请求发送给该对象。如果需要该Servlet再次为客户端服务,容器会重新产生一个Servlet对象来处理客户端的请求。在destroy()方法调用后,容器会释放这个Servlet对象,在随后的时候内,该对象会被Java的垃圾收集器所回收。
getServletConfig():该方法返回容器调用init()方法时传递给Servlet对象的ServletConfig对象,ServletConfig对象包含了Servlet的初始化参数。
getServletInfo():返回一个String类型的字符串,其中包括了关于Servlet的信息,例如,作者、版本和版权。该方法返回的应该是纯文本字符串,而不是任何类型的标记(HTML,XML等)。
2、第一个servlet
servlet
public class FirstServlet extends HttpServlet{
//get请求的数据在这个函数中处理
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
//super.doGet(req, resp);
PrintWriter printWriter=resp.getWriter();
ServletConfig servletConfig=getServletConfig();
printWriter.println("encoding: "+servletConfig.getInitParameter("encoding"));
printWriter.println("<br/>");
ServletContext servletContext=getServletContext();
Enumeration<String> enumeration=servletContext.getInitParameterNames();
while(enumeration.hasMoreElements()){
String nameString=enumeration.nextElement();
String valueString=servletContext.getInitParameter(nameString);
printWriter.println("name :"+nameString);
printWriter.println("<br/>");
printWriter.println("value :"+valueString);
printWriter.println("<br/>");
}
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException ,IOException {
PrintWriter printWriter=resp.getWriter();
printWriter.println("this is dopost");
};
}
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>Day6_25</display-name>
<welcome-file-list>
<welcome-file>welcome.html</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>FirstServlet</servlet-name>
<servlet-class>com.fan.servlet.FirstServlet</servlet-class>
//可以在代码中通过servletconfig获取下面定义的数据
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
//可以在服务器启动时候初始化
<load-on-startup>1</load-on-startup>
</servlet>
//处理/firstservlet 的请求使用firstservlet
<servlet-mapping>
<servlet-name>FirstServlet</servlet-name>
<url-pattern>/FirstServlet</url-pattern>
</servlet-mapping>
//可以通过servletcontext获取下面定义的数据
<context-param>
<param-name>first</param-name>
<param-value>first-value</param-value>
</context-param>
<context-param>
<param-name>second</param-name>
<param-value>second-value</param-value>
</context-param>
</web-app>
get.xml
<!DOCTYPE html>
<body>
<form action="/Day6_25/HelloWorldServlet" method="get">
濮撳悕:<input type="text" size="10"></input><p/>
瀵嗙爜:<input type="password" size="20"></input><p/>
<input type="submit" value="鎻愪氦"></input><p/>
</form>
</body>
post.xml
<!DOCTYPE html>
<body>
<form action="/Day6_25/HelloWorldServlet" method="post">
濮撳悕:<input type="text" size="10"></input><p/>
瀵嗙爜:<input type="password" size="20"></input><p/>
<input type="submit" value="鎻愪氦"></input><p/>
</form>
</body>
浙公网安备 33010602011771号