对于Servlet,并不陌生,因为在学习Ajax时,王新奎老师的视频中每个例子都涉及到了。所以理解起来不是很困难。保持以往的博客特点——废话不多说,直接进主题。
1,什么是Servlet?
(1)是服务器端执行的用于响应客户端请求的Java类.
(2)是嵌入了Html内容的java类;
——即,Servlet是一个用Java编写的应用程序,在服务器上运行,处理客户端发送的请求,并将处理结果发送到客户端;
Servlet的客户端可以提出请求并获得该请求你的响应,他可以是任何java应用程序、浏览器或任何设备;
对于所有的客户端请求,只需要创建Servlet的实例一次,因此节省了大量的内存;
Servlet在初始化后即驻留在内存中,因此每次做出请求时无需加载.
2,Servlet生命周期
是指创建Servlet实例之后其存在的时间以及何时消失;
主要包括:实例化、初始化、请求处理以及销毁几个阶段;
(1)第一次Servlet请求到达时,由Servlet容器实例化Servlet。
(2)实例化成功后,调用其init()方法初始化Servlet;
(3)对每个客户端请求,Servlet容器都在不同的线程体内形成对应的request和response对象,并通过Servlet的service()方法间接调用doPos()或doGet()方法;
(4)当容器决定移除Servlet时调用其destroy()方法,并释放Servlet实例对象;
生命周期的3个方法:
init():Servlet实例化时调用此方法;
service():客户请求和响应调用此方法;
destroy():释放内存、关闭Web服务器调用此方法;
3,Servlet框架的两个java包
Servlet框架是由两个java包组成:javax.servlet和javax.servlet.http;
(1)javax.servlet包:包中定义了所有的servlet类都必须实现的接口和类(与Http协议无关的一般性servlet类);
(2)javax.servlet.http包:包中定义了采用Http协议通信的HttpServlet类(增加了与Http协议有关的功能)
(注:所有Servlet都必须实现javax.servlet.Servlet接口,但是通常我们都会从javax.servlet.GenericServlet或javax.servlet.http.HttpServlet择一来实现。如果写的Servlet代码和HTTP协议无关,那么必须继承GenericServlet类;若有关,就必须继承HttpServlet类。)
<1>介绍此包(javax.servlet.http)中的HttpServlet类中提供的doGet()和doPost()方法:
public voiddoGet(HttpservletRequest req,HttpServletResponse res):处理客户端做出的Get请求;
Publicvoid doPost(HttpservletRequest req,HttpServletResponse res):
处理客户端做出的Post请求;
(注:当请求到来时,service()方法决定请求的类型(GET、POST、HEAD、OPTIONS、DELETE、PUT、TRACE),并把请求分发给相应的处理方法(doGet()、doPost()、doHead()、doOptions()、doDelete()、doPut()、doTrace())每个do方法具有和第一个service()相同的形式。我们常用的就是doGet()和doPost()方法,为了响应特定类型的HTTP请求,我们必须重载相应的do方法。如果Servlet收到一个HTTP请求而你没有重载相应的do方法,它就返回一个说明此方法对本资源不可用的标准HTTP错误。
)
4,实例
NetBeans下新建项目名称为Servlet:
创建一个servlet——HelloWordServlet.java:
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(urlPatterns = {"/HelloWordServlet"})
public class HelloWordServlet extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//设定内容类型为Html网页Utf-8编码
response.setContentType("text/html;charset=UTF-8");
//输出页面
PrintWriter out = response.getWriter();
try {
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet HelloWordServlet</title>");
out.println("</head>");
out.println("<body>");
out.println(" HelloWordServlet,我是韩学敏" );
out.println("</body>");
out.println("</html>");
} finally {
out.close();
}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//调用processRequest()函数
processRequest(request, response);
}
Web.xml中的配置:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<servlet>
<!--servlet名字-->
<servlet-name>HelloWordServlet</servlet-name>
<!--所要调用的java类-->
<servlet-class>HelloWordServlet</servlet-class>
</servlet>
<servlet-mapping>
<!--servlet名字-->
<servlet-name>HelloWordServlet</servlet-name>
<!--url连接,在这里,我们设置的是“/HelloWordServlet”。这里的Servlet名字必须和上面的<servlet>标签中的<servlet-name>的值一致-->
<!--当我们的页面中设定的连接和<url-pattern>中设定的值一致时,则会通过<servlet-name>找到对应Servlet类来运行。
这里,当页面的连接(a标签或form设定的action)是“/HelloWordServlet”时,则会通过Servlet的名字“HelloWordServlet”
来找到对应的Servlet类“HelloWordServlet”来运行-->
<url-pattern>/HelloWordServlet</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
</web-app>
运行结果:
以上代码中不多做解释,结合前面的基础知识和代码中的注释,相信很容易理解;
5,总结:
(1)了解什么是Servlet;
(2)了解Servlet框架中的两个java包,及包中的接口和类的应用;
(3)Servlet的生命周期
(4)基本应用