Servlet类
一,什么是Servlet类
1,Servlet类是一个Java程序,是在服务上运行以处理客户端请求并做出响应的程序。
Servlet类的核心是javax.servlet.Servlet接口,所有的Servlet必须实现这个接口。
自定义的Servlet大都是从GenericServlet或HttpServlet类进行扩展来实现的。
2,Servlet API
Servlet API包含于两个包中,分别是javax.servlet和javax.servlet.http
3,扩展Servlet的方式
①,继承GenericServlet
GenericServlet是个抽象类,其中service()方法定义为抽象方法
②,继承HttpServlet
HttpServlet中重写GenericServlet的抽象的service方法
HttpServlet中重载GenericServlet的抽象的service方法
4,HttpServlet中的方法
HttpServlet可以用来处理Http请求
Http的请求方式包括DELETE、GET、OPTIONS、POST、PUT、TRACE
HttpServlet中与这些请求方式相对应的方法
doHead():用来处理HTTP客户端的HEAD请求
doGet(): 如果HTTP客户端发给服务器的请求是GET方式,这个方法将被service方法调用
doPost():如果HTTP客户端发给服务器的请求是POST方式,这个方法会被service方法调用
doDelete():用来处理HTTP客户端的DELETE请求
doOptions():用来处理HTTP的OPTIONS请求
此外,还有doPut()方法和doTrace()
5,ServletRequest接口
ServletRequest接口中封装了客户请求的数据信息,如客户的请求方式、参数名和参数值、客户端正在使用的协议以及发出客户请求的远程主机信息等
ServletRequest接口还为Servlet提供了直接以二进制方式读取客户请求数据流的ServletlnputStream
接口中定义了下面的方法:
二,Servlet的执行原理
客户端输入url访问服务器
服务器解析输入的url解析到访问servle的资源路径
服务器根据解析到的资源路径,在web.xml文件里面找到对应的< url-pattenr >,如果有,同时找到servlet名称
根据servlet名称找到对应的servlet类
服务器自动创建servlet 类的对象,调用其中的方法
三,Servlet的生命周期
1,Servlet的生命周期由Servlet容器(如:Tomcat)控制
容器如何处理请求:
2,生命周期的各个阶段
初始化和销毁在一个生命周期中只能发生一次。服务可以多次调用。
代码展示:
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
@WebServlet("/tan")
public class Servelt_01 implements Servlet{
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("初始化init");
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("服务service");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
System.out.println("停止");
}
}
运行结果:
四,HTTP协议—超文本传输协议
1,HTTP协议—无状态协议
不用记录谁发出的请求,只需要给出响应
适用于传输文件
2,用于通过Internet发送请求消息和响应消息
3,使用端口接受和发送消息,默认为80端口
4,HTTP请求
一个典型的HTTP请求由3部分组成,分别是请求方法URI协议/版本、请求头、请求正文
5,HTTP响应
HTTP响应也是由3部分组成,它们分别是:协议状态代码描述、响应头、响应正文
6,HttpServletResponse接口
HttpServletResponse接口与HTTP响应对应
HttpServletResponse接口中定义了提供生成响应数据Header的方法
五,Servlet应用实例
功能:在一个登录的JSP页面有两个文本框,用户可以输入登录名和密码,用户可以提交该页面的数据到Servlet,Servlet验证登录名和密码。如果用户名和密码匹配,则提示登录成功,否则提示失败
代码展示:
1,设置登陆页面
<%--
Created by IntelliJ IDEA.
User: manager
Date: 2020/12/10
Time: 11:57
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<!--action 把当前这个表单提交到哪个程序去处理-->
<form action="login" method="post">
用户名<input type="text" name="username"/><br/>
密码<input type="password" name="pwd"><br/>
<input type="submit" value="登陆"/>
</form>
</body>
</html>
2
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置请求的编码格式
request.setCharacterEncoding("utf-8");
//设置响应的编码格式
response.setContentType("text/html;charset=utf-8");
//得到用户输入的文本框的数据
String username=request.getParameter("username");
String pwd = request.getParameter("pwd");
if (username.equals("tan")&&pwd.equals("123")){
//页面重定向
response.sendRedirect("success.jsp");
}else {
response.sendRedirect("error.jsp");
}
}
}
3,成功登陆
<%--
Created by IntelliJ IDEA.
User: manager
Date: 2020/12/10
Time: 12:11
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
登陆成功
</body>
</html>
4,登陆失败
<%--
Created by IntelliJ IDEA.
User: manager
Date: 2020/12/10
Time: 12:12
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
登陆失败
</body>
</html>
5,运行结果
成功跳转