JavaWeb 学习笔记 day05
Servlet
简介:
- Servlet 是 JavaEE 规范之一。规范就是接口
- Servlet 就 JavaWeb 三大组件之一。三大组件分别是:Servlet 程序、Filter 过滤器、Listener 监听器。
- Servlet 是运行在服务器上的一个 java 小程序,它可以接收客户端发送过来的请求,并响应数据给客户端。
手动实现 Servlet 程序
- 创建 Servlet 类,并实现 service 抽象方法,处理请求并响应
public class HelloServlet implements Servlet {
@Override
//其他抽象方法也需事项,这里只演示 service
// service 方法是专门用来处理请求和响应的
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("HelloServlet被访问了");
}
}
- 到 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-name>HelloServlet</servlet-name>
<servlet-class>com.test.day06_servlet.HelloServlet</servlet-class>
</servlet>
<!--给指定别名的 servlet 程序绑定访问的地址-->
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<!--/ 斜杠表示为 http://ip:port/工程路径-->
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
- Servlet 的生命周期
① 执行 Servlet 构造器方法
② 执行 init 初始化方法( 第一、二步,是在第一次访问,的时候创建 Servlet 程序会调用。)
③ 执行 service 方法( 第三步,每次访问都会调用。 )
④执行 destroy 销毁方法 (第四步,在 web 工程停止的时候调用)
GET请求和POST请求的分发处理
- 实现 Servlet
public class HelloServlet implements Servlet {
@Override
//其他抽象方法也需事项,这里只演示 service
// service 方法是专门用来处理请求和响应的
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("HelloServlet被访问了");
HttpServletRequest h = (HttpServletRequest) servletRequest;
String method = h.getMethod();
if("GET".equals(method)){
System.out.println("GET请求");
}
else if("POST".equals(method)){
System.out.println("POST请求");
}
}
- 通过继承 HttpServlet 实现 Servlet 程序
简介:HttpServlet 是 Servlet 实现类 GenericServlet 的子类,已经实现了请求分发,无需再手动实现,实际开发中只需重写 doGet() 或 doPost() 等方法。
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("GET请求");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("POST请求");
}
}
ServletConfig 类
简介:Servlet 程序的配置信息类
作用
- 可以获取 Servlet 程序的别名 servlet-name 的值
- 获取初始化参数 init-param
- 获取 ServletContext 对象
注意:在重写 init() 方法时,一定要显式的调用父类的方法。因为 ServletConfig 对象就是在父类的 init() 方法中被初始化的。
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("POST请求");
ServletConfig servletConfig = getServletConfig();
System.out.println(servletConfig.getInitParameter("username"));
System.out.println(servletConfig.getInitParameter("password"));
ServletContext servletContext = servletConfig.getServletContext();
}
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>com.test.day06_servlet.HelloServlet</servlet-class>
<init-param>
<param-name>username</param-name>
<param-value>root</param-value>
</init-param>
<init-param>
<param-name>password</param-name>
<param-value>abc123</param-value>
</init-param>
</servlet>
ServletContext 类
简介
- ServletContext 是一个接口,它表示 Servlet 上下文对象
- 一个 web 工程,只有一个 ServletContext 对象实例。
- ServletContext 对象是一个域对象,可以像 map 一样添加查找键值对。
- ServletContext 是在 web 工程部署启动的时候创建。在 web 工程停止的时候销毁。
作用
- 获取 web.xml 中配置的上下文参数 context-param
- 获取当前的工程路径,格式: /工程路径
- 获取工程部署后在服务器硬盘上的绝对路径
- 像 Map 一样存取数据
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("POST请求");
ServletContext servletContext = getServletContext();
servletContext.setAttribute("sex","male");
System.out.println(servletContext.getInitParameter("name"));
System.out.println(servletContext.getInitParameter("age"));
System.out.println(servletContext.getAttribute("sex"));
System.out.println(servletContext.getRealPath("/"));
}
<context-param>
<param-name>name</param-name>
<param-value>Tom</param-value>
</context-param>
<context-param>
<param-name>age</param-name>
<param-value>18</param-value>
</context-param>
HTTP 协议
简介:就是客户端和服务器之间通信时所发送的数据需要遵守的规则,叫 HTTP 协议。 HTTP 协议中的数据又叫报文。
请求的 HTTP 协议格式
-
GET 请求
请求行
(1) 请求的方式 GET
(2) 请求的资源路径[+?+请求参数]
(3) 请求的协议的版本号 HTTP/1.1
请求头
key : value 组成 不同的键值对,表示不同的含义。 -
POST 请求
1、请求行
2、请求头
空行
3、请求体:就是发送给服务器的数据
常见的 GET 请求和 POST 请求
- GET 请求
① form 标签 method=get
② a 标签
③ link 标签引入 css
④ Script 标签引入 js 文件
⑤ img 标签引入图片
⑥ iframe 引入 html 页面
⑦ 在浏览器地址栏中输入地址后敲回车 - POST 请求
① form 标签 method=post
响应的 HTTP 协议格式
- 响应行
- 响应头
- 响应体: 就是回传给客户端的数据
常用的响应码说明
- 200 表示请求成功
- 302 表示请求重定向
- 404 表示请求服务器已经收到了,但是你要的数据不存在(请求地址错误)
- 500 表示服务器已经收到请求,但是服务器内部错误(代码错误)