Servlet基础
一、什么是Servlet
1、Servlet就是一个在服务器上运行的小程序,一个Servlet就是一个java类,并且可以通过请求—响应 编程模型来访问这个在服务器上的Servlet的程序。
二、Tomcat容器等级
1、四个等级
Tomcat->Container(容器)->Engine(容器)->HOST->Servlet(容器)->Context(容器)->Wrapper
Servlet的容器管理Context容器,一个Context对应一个Web工程
三、手工编写一个Servlet
1、继承HttpServlet类
2、重写doGet()或者doPost()方法
3、在Web.xml中注册Servlet
四、使用Idea 编写Servlet
项目结构
1、在src建立一个名为servlet的包并实例一个HelloServlet的类然后继承HttpServlet (在idea需要手动导入Servlet.jar)
idea无法继承HttpServlet解决方法
https://blog.youkuaiyun.com/qq_43665697/article/details/98168450
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{
// 重写doGet()或者doPost()方法
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("处理get请求");
PrintWriter out = response.getWriter();
out.println("hello servlet");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("处理post请求");
PrintWriter out = response.getWriter();
out.println("hello servlet");
}
}
2、在web包下面修改jsp文件
<%--
Created by IntelliJ IDEA.
User: LIU
Date: 2019/12/23
Time: 16:05
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>
<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>
3、修改WEB-INF下的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">
<display-name></display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>HelloServlrt</servlet-name>
<servlet-class>servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlrt</servlet-name>
<url-pattern>/servlet/HelloServlet</url-pattern>
</servlet-mapping>
</web-app>
五、Servlet的生命周期
1、初始化阶段,调用init()方法
2、响应客户端请求,调用service()方法。service()方法决定执行doGet还是doPost方法。
3、终止阶段,调用destroy()方法
六、Servlet获取九大内置对象
隐式对象 | 说明 |
---|---|
request | 对应HttpServletRequest/ServletRequest对象 |
response | 对应HttpServletRespons/ServletResponse对象 |
session | 对应HttpSession对象 |
application | 对应ServletContext对象 |
out | 对应JspWriter对象,其内部关联一个PringWriter对象 |
page | 对应this |
config | 对应ServletConfig对象 |
exception | 对应Throwable对象,代表由其他JSP页面抛出的异常对象,只会出现于JSP错误页面(isErrorPage设置为true的JSP页面) |
pageContext | 对应PageContext对象,它提供了JSP页面资源的封装,并可设置页面范围属性 |
总结:
在Java Web程序中,Servlet主要负责接收用户请求 HttpServletRequest,在doGet(),doPost()中做相应的处理,并将回应HttpServletResponse反馈给用户。Servlet 可以设置初始化参数,供Servlet内部使用。一个Servlet类只会有一个实例,在它初始化时调用init()方法,销毁时调用destroy()方法。Servlet需要在web.xml中配置(MyEclipse中创建Servlet会自动配置),一个Servlet可以设置多个URL访问。Servlet不是线程安全,因此要谨慎使用类变量。