Servlet
servlet是基于java语言编写的服务端程序,主要功能是能够在服务器中执行并生成数据。
特点:单进程,多线程
创建一个Servlet案例
1.编写Servlet的java代码文件
package com.test.servlet;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class Hello extends HttpServlet{
public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException ,IOException{
PrintWriter pw = response.getWriter();
pw.println("<!DOCTYPE html>");
pw.println("<html lang='en'>");
pw.println("<head>");
pw.println("<meta charset='UTF-8'>");
pw.println("<meta name='viewport' content='width=device-width, initial-scale=1.0'>");
pw.println("<title>Document</title>");
pw.println("</head>");
pw.println("<body>");
pw.println("hello,world");
pw.println("</body>");
pw.println("</html>");
pw.flush();
//关闭资源
pw.close();
}
}
2.编译java文件生成class字节码文件
这里由于代码使用到tomcat里面的jar包,因此需要这样编译。
javac -classpath "C:\tomcat\apache-tomcat-9.0.80\lib\servlet-api.jar" Hello.java
3.创建web.xml配置文件
web.xml是web项目的部署描述文件,是javaweb工程的配置文件,通过web.xml文件可以配置servlet,filter等技术,Tomcat启动时会先解析该配置文件获取项目的配置信息。
web.xml文件的头信息
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!-- 其他配置 -->
</web-app>
在web.xml文件配置Servlet
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!-- 其他配置 -->
<!-- 配置servlet全名-->
<servlet>
<!-- 配置servlet别名 -->
<servlet-name>hello</servlet-name>
<!-- 配置servlet全名 -->
<servlet-class>com.test.servlet.Hello</servlet-class>
</servlet>
<!-- 配置servlet的url -->
<servlet-mapping>
<!-- 指定那个servlet绑定url,使用上面配置的别名 -->
<servlet-name>hello</servlet-name>
<!-- 配置servlet的url -->
<url-pattern>/demo</url-pattern>
</servlet-mapping>
</web-app>
部署servlet
web项目的目录结构是
webapps ->project ->WEB-IF ->classes(com -> test ->servlet ->Hello.class),lib,web.xml
目录名不能写错,将class字节文件放到指定文件夹里面
运行tomcat,
访问
http://localhost:8080/servletdemo/demo
Tomcat运行过程
- 用户访问http://localhost:8080/servletdemo/demo,请求被发送到Tomcat,被监听8080端口并被处理HTTP/1.1协议的Connector连接器获得。
- Connector把该请求交给它所在的Service的Engine(引擎)l来处理,并等待Engine的回应。
- Engine获得请求http://localhost:8080/servletdemo/demo,匹配所有虚拟主机Host.
- Engine匹配到名为localhost的Host虚拟主机来出路/servletdemo/demo请求,如果没有匹配到会交给默认的虚拟主机Host处理。
- 匹配到的Context获得请求/demo。
- 构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用Hello的doGet()或doPost()方法,执行业务逻辑,数据存储等。
- Context把执行完之后的结果通过HttpServletResponse对象返回给Host。
- Host把HttpServletResponse返回给Engine。
- Engine把HttpServletResponse返回给Connector。
- Connector把HttpServletResponse对象返回给客户Browser。