Servlet是使用Java 编写的服务器端程序,主要运行在服务器端,并且由服务器调用执行,是一种按照servlet标准开发的类。
Servlet是Java对CGI程序的实现,并且采用了多线程的处理方式,效率更高, 同时Servlet还有Java可移植性的特点。
Servlet可以处理客户端发送的http请求,同时会返回一个响应。Servlet处理的基本流程如下图:
Servlet的处理步骤如下:
1.客户端提出http请求;
2.Web服务器接收到该请求并且把请求发送到Servlet;如果这个Servlet还没有被加载,则Web服务器先把Servlet加载到Java虚拟机并且执行它;
3.Servlet接收这个http请求并作出处理;
4.Servlet把处理结果返回给Web服务器,进行应答
5.Web服务器把收到的应答返回给客户端
Servlet接口下定义了一个GenericServlet的子类,但是一般不会直接继承,而是根据所选的协议选取GenericServlet的子类继承,例如选用Http协议,则使用Servlet时,所有的Servlet类都要继承HttpServlet类。
要开发一个处理http请求的Servlet程序,要继承Servlet类,而且在自定义的Servlet类中要覆写HttpServlet类中提供的doGet()方法。
doGet()中定义了两个参数,HttpServletRequest和HttpServletResponse。
第一个Servlet程序:
package com.zzh.Servlet; import java.io.IOException; import java.io.PrintWriter; import java.rmi.ServerException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class HelloServlet extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServerException, IOException { PrintWriter out = resp.getWriter(); out.println("<html>"); out.println("<head><title>Servlet</title></head>"); out.println("<body>"); out.println("<h1>Hello~~~~World</h1>"); out.println("</body>"); out.println("<html>"); out.close(); } }注:在Myeclipse中的web工程下的src包中编译即可,会在tomcat的项目文件夹下的WEB-INF文件夹中的class中生成.class文件。
一个Servlet程序编译后,无法立即访问,因为所有的Servlet程序都是以*.class的形式存在的,所以必须在WEB-INF\web.xml文件中进行Servlet的映射配置。
配置web.xml文件:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <display-name>Servlet_Test</display-name> <servlet> <servlet-name>hello</servlet-name> <servlet-class>com.zzh.Servlet.HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/helloServlet</url-pattern> </servlet-mapping> </web-app>
运行结果: