概念简介:
Servlet 是使用Java编写的一个Java类,通过Web容器的加在、初始化,受到容器的管理才能成为Servlet。
Web容器是Java编写的一个应用程序,负责于服务器沟通,管理Sevlet所需的各种对象于数据、Sevlet生命周期,没有容器,无法想要客户端的请求。
JSP可以在HTML中潜入java代码的web页面,容器会将JSP网页转译为Sevlet并加在到容器中管理,所有的JSP最后都以Servlet的实例存在于容器中。
CGI:运行在服务器操作系统上的一个可执行程序,每次有请求过来,就会启动一次程序来处理请求,会对内存或CPU负担加重
Sevlet是运行在容器中,容器是由服务器上的JVM启动的,每次请求过来时,使用同一个容器来处理,由容器开启一个线程,并决定由哪个Sevlet来处理
Web容器于HTTP服务器程序不同,HTTP服务器程序用来接收客户端请求,与WEB容器交互,并返回处理后的信息。
Tomcat集成了web容器于http服务器的功能。
Sevlet应用程序原理:
1、客户端发出请求
2、HTTP服务器程序获得用户请求,动态程序由WEB容器处理
3、每一次请求开启一个线程,根据web.xml文件,寻找对应的url模式,找出Sevlet注册名词,选择对应的Sevlet类名
4、处理结束,返回
例如:
访问http://localhost:9090/test/hello.do?name=hh时
首先当请求来到HTTP 服务器时,而HTTP服务器转交请求给容器,容器会创建一个代表当次请求的HttpServletRequest对象,将请求信息设置给该对象,创建一个HttpServletresponse对象以返回信息。
然后,容器根据web.xml的设置,找出处理该请求的Servlet,调用它的service()方法,service()方法会根据HTTp请求方式决定调用哪个do方法。
若找不到对应规则,查看物理位置文件是否存在
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" 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_2_5.xsd"> <display-name></display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>HelloServlet</servlet-name> <servlet-class>com.HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloServlet</servlet-name> <url-pattern>/hello.do</url-pattern> </servlet-mapping> </web-app>
找到对应的servlet进行处理
package com;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@SuppressWarnings("serial")
public class HelloServlet extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse res){
try {
res.setContentType("text/html;charset=UTF-8");
PrintWriter out = res.getWriter();
String name = req.getParameter("name");
out.println("<html>");
out.println("<body>");
out.println("<h1>信息"+ name);
out.println("</h1>");
out.println("</body>");
out.println("</html>");
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}