一、Servlet 的概念和特点
1、Servlet 概念引入
问题:
服务器在接收到浏览器的请求后,会自动调用对应的逻辑代码进行请求处理。但是逻辑代码是由程序员编写并放到服务器中,那么服务器怎么知道该怎么调用并调用哪个类和哪个方法来进行请求处理。
解决:
程序员在编写代码的时候如果能够按照服务器能够识别的规则进行编写,浏览器按照指定的规则进行发送请求,那么服务器就可以调用并执行响应的逻辑代码进行请求处理了。
实现:
Servlet 技术:狭义的 Servlet 是指 Java 语言实现的一个接口,广义的 Servlet 是指任何实现了这个 Servlet 接口的实现类。一般情况下,人们将 Servlet 理解为后者。Servlet 运行于支持 Java 的应用服务器中。从原理上讲,Servlet 可以响应任何类型的请求,但绝大多数情况下 Servlet 只用来扩展基于 HTTP 协议的 Web 服务器。
2、Servlet 的特点
运行在支持 Java 的应用服务器上 Servlet 的实现遵循了服务器能够识别的规则,也就是服务器会自动的根据请求调用对应的 Servlet 进行请求处理。简单方便,可移植性强。
二、手动部署第一个 Servlet 案例
在学习 Servlet 的之前,我们先尝试手写一个简单的 Servlet 案例,并手动的将其部署到 Tomcat 服务器中。
项目环境:Servlet 4.0 JDK 1.8 NotePad++ Tomcat 9.0.37
1、第一个 Servlet 程序
在学习了服务器并成功安装后,我们知道当浏览器发送请求给服务器后,服务器会调用并执行对应的逻辑代码进行请求处理。逻辑代码是由程序员自己编写然后放进服务器进行运行,其实就是 Servlet 程序。
1)使用 NotePad++ 编写第一个 Servlet 类:HelloWorld.java
创建普通的 Java 类并继承 HttpServlet
public class HelloWorld extends HttpServlet{
}
覆写 service 方法
public class HelloWorld extends HttpServlet{
public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
}
}
在 service 方法中书写逻辑代码
public class HelloWorld extends HttpServlet{
public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.0 Transitional//EN'>");
out.println("<HTML>");
out.println("<HEAD>");
out.println("<TITLE>First Servlet</TITLE>");
out.println("</HEAD>");
out.println("<BODY>");
out.println("<font color='red'>First Servlet!</font>");
out.println("</BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
}
导包
package com.bjsxt.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HelloWorld extends HttpServlet{
public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.0 Transitional//EN'>");
out.println("<HTML>");
out.println("<HEAD>");
out.println("<TITLE>First Servlet</TITLE>");
out.println("</HEAD>");
out.println("<BODY>");
out.println("<font color='red'>First Servlet!</font>");
out.println("</BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
}
2、编译 Servlet
注意:由于 Servlet 除了导入 jre 自带 jar 包外,还导入了 Tomcat 里面的 jar 包(servlet-api.jar),所以在编译的时候需要配置引用 jar 包的临时环境变量,语法如下:
javac -classpath "D:apache-tomcat-9.0.37libservlet-api.jar" HelloWorld.java
动态演示:
3、创建 web.xml
web.xml 是项目的部署描述文件,是 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 类路径
servlet-mapping:配置访问方式
两个组成部分的 servlet-name 的值必须一致。
-->
<servlet>
<servlet-name>first</servlet-name>
<!-- 书写 servlet 的全限定路径(包名+类名) -->
<servlet-class>com.bjsxt.servlet.HelloWorld</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>first</servlet-name>
<!-- 配置 servlet 的访问别名 -->
<url-pattern>/first</url-pattern>
</servlet-mapping>
</web-app>
4、部署 Servlet
Web 工程目录结构:
根据 Web 工程结构图,在 Tomcat 安装目录下的 webapps 目录下创建对应的目录结构,并将编译好的字节码文件以及 web.xml 配置文件放到指定的目录结构下:
动态目录结构展示:
5、启动 Tomcat ,访问 Servlet
希望能够帮到大家,有问题的可以留言讨论哦!