JavaWeb学习:Servlet篇
Servlet基础
1.什么是Servlet
Servlet是在服务器上运行的小程序。一个Servlet就是一个Java类,并且可以通过“请求-响应”编程模型来访问这个驻留在服务器内存里的Servlet程序。
2.Tomcat容器等级
Tomcat的容器分为四个等级,Servlet的容器管理Context容器,一个Context对应一个Web工程。
3.手工编写第一个Servlet(一般不适用)
1.继承HttpServlet
2.重写doGet()或者doPost()方法
在src下新建servlet包,在包下新建HelloServlert类:
package servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
//继承于HttpServlet
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//super.doGet(request, response);
System.out.println("处理Get()请求...");
PrintWriter out = response.getWriter();
response.setContentType("text/html;charset=UTF-8");//设置页面类型,否者输出的只是字符
out.print("<strong>HelloServlet!</strong><br>");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//super.doPost(request, response);
System.out.println("处理Post()请求...");
PrintWriter out = response.getWriter();
response.setContentType("text/html;charset=UTF-8");//设置页面类型,否者输出的只是字符
out.print("<strong>HelloServlet!</strong><br>");
}
}
3.在web.xml中注册Servlet
在WEB-INF/web.xml中添加:
<servlet>
<!--servlet-name表示给servlet设置一个名字-->
<servlet-name>HelloServlet</servlet-name>
<!--servlet-class表示要访问的servlet所在的类-->
<servlet-class>servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<!--servlet-name要和上面的servlet-name一一对应-->
<servlet-name>HelloServlet</servlet-name>
<!--servlet-name要和页面中的访问链接一一对应,先写"/"表示项目根目录-->
<url-pattern>/servlet/HelloServlet</url-pattern>
</servlet-mapping>
最后编写index.jsp来访问
<%--
Created by IntelliJ IDEA.
User: LuHaojie
Date: 2019/10/17
Time: 15:15
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>index</title>
</head>
<body>
<h1>第一个Servlet小例子</h1>
<hr>
<a href="servlet/HelloServlet">Get方式请求HelloServlet</a>
<form action="servlet/HelloServlet" method="post">
<input type="submit" value="Post方式请求HelloServlet">
</form>
</body>
</html>
4.使用IDE编写Servlet
5.Servlet执行流程和生命周期
执行流程:
Get方式请求HelloServelt→<a href=“servlet/HelloServlet”>
对应的URL为:
<servlet-mapping>
<url-pattern>(中的内容)</url-pattern>
</servlet-mapping>
再通过name属性
<servlet-mapping>
<servlet-name>(name属性)</servlet-name>
</servlet-mapping>
去寻找与他对应的servlet类
<servlet>
<servlet-name>(name属性)</servlet-name>
<servlet-class>(servlet类)</servlet-class>
</servlet>
然后根据用户的请求方式,执行servlet类中相应名称的方法doGet()或者doGet()。
生命周期:
1.初始化阶段,调用init()方法。
2.相应客户端请求阶段,调用service()方法。由service()方法根据提交的方式选择执行doGet()或者doPost()方法。
3.终止阶段,调用destroy()方法。
Tomcat装载Servlet的三种情况
1.Servlet容器启动时自动装载默写Servlet。
实现它只需要在web.xml文件中的<servlet></servlet>之间添加如下代码:(数值越小表示优先级越高。)
<load-on-startup>1</load-on-startup>
2.在Servlet容器启动后,客户端首次向Servlet发送请求。
3.Servlet类文件被更新后,重新装载Servlet。
Servlet被装载后,Servlet容器创建一个Servlet实例并且调用Servlet的init()方法进行初始化。在Servlet的整个生命周期内,init()方法只被调用一次。
6.Servlet获取九大内置对象
Servlet与jsp内置对象的对应关系
JSP对象 | 怎样获得 |
---|---|
out | response.getWriter |
request | service方法中的request参数 |
response | service方法中的response参数 |
session | request.getSession()函数 |
application | getServletContext()函数 |
exception | Throwable |
page | this |
pageContext | PageContext |
Config | getServletConfig函数 |