文章目录
Servlet概述
-
即Server Applet
-
Servlet 是 JavaWEB 服务端的一个小程序,主要用户用户数据的交互,WEB 数据展示和数据传递,是一个动态的资源
-
Servlet 程序可以应对搜友类型的请求和响应,Servlet 主要用于 HTTP 协议的 WEB 服务器程序实现
-
Servlet 开发需要用到两个包
javax.servlet
javax.servlet.http
-
开发中可能会涉及到的接口和类
javax.servlet.http.Servlet
javax.servlet.http.GServlet --abstract修饰的类
javax.servlet.http.HttpServlet
javax.servlet.http.HttpServletRequest
javax.servlet.http.HttpServletResponse
javax.servlet.http.HttpSession
javax.servlet.http.Cookie
demo
以一个实例来说明 get 请求和 post 请求,前端有两个按钮分别是以 get 方式提交数据和以 post 方式提交数据
前端html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>test</title>
</head>
<body>
<form action="ServletDemo" method="get">
<input type="submit" value="GET请求"><br>
</form>
<form action="ServletDemo" method="post">
<input type="submit" value="POST请求"><br>
</form>
</body>
</html>
后端代码ServletDemo
package cn.ocean888.demo1;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* 1.继承HttpServlet interface
* 2.重写doget、dopost
* 3.使用注解方式告知tomcat服务器当前Servlet的路由
*/
@WebServlet("/test")
public class ServletDemo extends HttpServlet {
/**
* 处理GET请求
* @param req HttpServletRequest对象,对应当前浏览器请求数据内容对应的对象
* @param resp HttpServletResponse对象,对应是当前浏览器对于浏览器请求的响应
* @throws ServletException Servlet异常
* @throws IOException IO异常
*/
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doGet(req, resp);
}
/**
* 处理post请求
*/
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
/*
通常情况下,浏览器或者客户端发送数据的请求方式只有一种,对应GET请求和POST请求,在实现Servlet代码时,
针对GET和POST完成对应的方法,此处使用doget,实现所有的业务逻辑
*/
//super.doPost(req, resp);
System.out.println("post请求方式");
doGet(req, resp);
}
}
Servlet核心接口和类
interface.javax.servlet.Servlet【核心接口】
Defines methods that all servlets must implement.
当前接口中所有的Servlet程序必须实现
A servlet is a small Java program that runs within a Web server
Servlet是一个小的Java程序,需要运行在WEB服务器当中。
Servlet接口中定义了5个方法
public void init(ServletConfig config) throws ServletException;
初始化当前Servlet程序,这里需要的参数是ServletConfig,ServletConfig
是当前Servlet的配置,该配置可以从注解方式或者从当前项目中的web.xml加载
获取
public ServletConfig getServletConfig();
获取ServletConfig对象,当前对象中保护Servlet配置内容。
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException;
【核心方法】Servlet提供服务的方法,浏览器访问当前Servlet程序,service
方法是起作用,ServletRequest对应的是请求,ServletResponse对应的是响
应
public String getServletInfo();
获取当时Servlet程序信息对应字符串
public void destroy();
销毁当前Servlet程序,可以由Tomcat服务器执行,也可也通过servlet程序自己
调用
abstract javax.servlet.GenericServlet【Servlet中间商】
功能是完成了Servlet接口和ServletConfig接口的一部分方法,简化了之后代码的逻辑,主要需要了解的方法:
public String getInitParameter(String name);
根据初始化参数名字获取对应的值,而且参数值为String
public Enumeration<String> getInitParameterNames();
获取所有参数的名字。枚举类型的List
public ServletConfig getServletConfig();
获取ServletConfig对象
public ServletContext getServletContext();
获取ServletContext对象,一个Servlet Application有且只有一个
ServletContext对应,这是Servlet上下文对象
这里同时实现了Servlet接口中的 init 初始化方法
abstract javax.servlet.http.HttpServlet 【Servlet程序基类】
abstract javax.servlet.http.HttpServlet 这是一个Java中符合Http协议的Servlet程序,继承GenericServlet,同时是Servlet接口和ServletConfig间接实现类。
HttpServlet中首先实现service核心方法,并且将service核心方法的请求方式,响应方式强转为符合Http协议的请求和响应 所有和Servlet业务逻辑无关的初始化方法,设置方法,销毁方法,HttpServlet中全部不需要考虑,只考虑符合Http协议请求方式和响应方式
核心方法:
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
符合HTTP GET请求的处理方式
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
符合HTTP POST请求的处理方式
【注意】
以上方法不重写,或者执行还是对应的方法,例如super.doGet(req,resp), 响应方式会提示报错 SC_METHOD_NOT_ALLOWED
三种自定义Servlet接口的方法
1.实现Servlet接口
package com.qfedu.b_threeFunction;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
/**
* 遵从Servlet接口实现Servlet程序
* 代码中存在太多和业务逻辑无关的代码,增加了程序员的压力!!!
* 不可取!!!
*/
@WebServlet("/ServletImpl")
public class ServletImpl implements Servlet {
/**
* 构造方法
*/
public ServletImpl() {
System.out.println("ServletImpl Constructor called");
}
/**
* 初始化方法
*
* @param config 需要使用ServletConfig类对象,也就是Servlet配置来完成初始化操作
* @throws ServletException Servlet异常
*/
@Override
public void init(ServletConfig config) throws ServletException {
System.out.println("init method called");
}
/**
* 获取ServletConfig对象
*
* @return 获取ServletConfig对象
*/
@Override
public ServletConfig getServletConfig() {
return null;
}
/**
* 提供服务核心方法
*
* @param req ServletRequest对象
* @param res ServletResponse对象
* @throws ServletException Servlet异常
* @throws IOException IO异常
*/
@Override
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
System.out.println("service method called");
}
/**
* 获取Servlet信息
* @return
*/
@Override
public String getServletInfo() {
return null;
}
/**
* 销毁Servlet
*/
@Override
public void destroy() {
System.out.println("destroy method called");
}
}
2.继承GenericServlet抽象类
package com.qfedu.b_threeFunction;
import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
/**
* 继承GenericServlet 抽象类实现Servlet程序
* 对应Servlet接口,在继承GenericServlet情况下,我们需要完成的方法有且
* 只有service核心方法。
*
* 代码量明显减少,同时和业务逻辑无关的代码不需要考虑,但是没有针对性,
* 没有对应Http协议请求方式的对应处理方法
*
* @author MI 2020/3/30 11:30
*/
@WebServlet("/GenericServletExtends")
public class GenericServletExtends extends GenericServlet {
@Override
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
System.out.println("GenericServletExtends service method called");
}
}
3.继承HttpServlet抽象类
package com.qfedu.b_threeFunction;
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;
/**
* 继承HttpServlet实现符合HTTP协议的Servlet程序
* 并且可以自定义实现请求方式的对应处理方法
*
* @author MI 2020/3/30 11:34
*/
@WebServlet("/HttpServletExtends")
public class HttpServletExtends extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("HttpServletExtends doGet or doPost method called");
resp.getWriter().append("Hello Servlet");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
【注意】
继承HttpServlet重写HttpServlet对应HTTP协议的处理方法,一定要完成,如果未完成或者说依然执行调用的是HttpServlet中的方法,
会有错误出现 405 Method Not Allow
平时主要用的就是这种方式
生命周期
tomcat管理Servlet程序的声明周期,主要涉及4个方法
- Constructor方法
- init初始化方法
- service方法
- destory销毁方法
概述
-
阶段一
Constructor方法执行,实例化过程。Tomcat中的Servlet容器调用Servlet程序对应的构造方法创建Servlet类对象
前提条件:
- 当前Servlet程序需要被执行
- 当前Servlet程序配置了开机启动
而且Constructor有且只执行一次
-
阶段二:
init(ServletConfig config) 初始化方法,当Servlet程序创建之后一定要对当前Servlet程序进行初始化过程,需要使用ServletConfig对象完成初始化操作,ServletConfig对象中是从注解或者web.xml中获取对应的配置信息,完成初始化操作,而且只执行一次
-
阶段三:
service方法提供服务
当前Servlet程序准备完毕,Servlet程序是在被请求时执行service方法,完成对应请求和响应的执行过程。到HttpServlet抽象类中对于service方法实现,并且按照HTTP请求方式完成划分工作。比如doGet doPost -
阶段四:
Tomcat服务器中Servlet容量对于Servlet进行销毁过程,有几种情况下会执行destroy方法
- Tomcat服务器关闭,Servlet容器会执行每一个Servlet程序的destroy方法
- 当前Servlet程序执行过程中,存在特定条件选择关闭
- 通常情况下Servlet容器对于Servlet程序的管理是自动完成的,不需要人为干预
配置方式
Servlet3.0之后允许使用注解方式配置
属性名 | 概述 |
---|---|
name | Servlet名字,可以自定义 |
value | url资源匹配方式,和urlPatterns互斥 |
urlPatterns | 允许当前Servlet有多个匹配方式,和value互斥 |
loadOnStartup | 是否启动服务时加载当前Servlet,默认 -1,选择加载 1 |
initParams | WebInitParam 注解类型 name和value 当前Servlet配置初始化配置 |
@WebServlet(name = "AnnotationServlet",
urlPatterns = {"/AnnotationServlet", "/as", "/saolei"},//允许多个匹配规则
loadOnStartup = 1,
initParams = {@WebInitParam(name = "aa", value = "ocean"), @WebInitParam(name = "bb", value = "46号技师")})//初始化参数
public class AnnotationServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("Annotation Config Servlet");
String aa = this.getServletConfig().getInitParameter("aa");//获取初始化参数
String bb = this.getServletConfig().getInitParameter("bb");
System.out.println(aa);
System.out.println(bb);
resp.getWriter().append("Annotation Config Servlet");
}
}
任何一个版本都允许使用web.xml配置
<!-- 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_3_1.xsd"
version="3.1">
<!-- Servlet 程序声明,告知Servlet程序对应的名字和Servlet程序对应的class -->
<servlet>
<!-- ServletName -->
<servlet-name>WebXmlServlet</servlet-name>
<!-- Servlet对应的class,该名字必须是完整的包名.类名 -->
<servlet-class>cn.ocean.WebXmlServlet</servlet-class>
<!-- 当前Servlet程序初始化操作,需要放在servlet-class之后 -->
<init-param>
<param-name>param1</param-name>
<param-value>ocean</param-value>
</init-param>
<init-param>
<param-name>param2</param-name>
<param-value>ocean</param-value>
</init-param>
<!-- 当前Servlet随着Tomcat服务器启动加载 -->
<load-on-startup>1</load-on-startup>
</servlet>
<!-- Servlet映射关系 -->
<servlet-mapping>
<!-- 告知Tomcat服务器,当前url-pattern映射的是哪一个Servlet -->
<servlet-name>WebXmlServlet</servlet-name>
<!-- URL匹配原则 -->
<url-pattern>/WebXmlServlet</url-pattern>
</servlet-mapping>
<!-- Servlet映射关系 -->
<servlet-mapping>
<!-- 告知Tomcat服务器,当前url-pattern映射的是哪一个Servlet -->
<servlet-name>WebXmlServlet</servlet-name>
<!-- URL匹配原则 -->
<url-pattern>/wxs</url-pattern>
</servlet-mapping>
</web-app>
两种方式对比
注解
配置简单,直观,高效
url-pattern 冲突问题,并且是在Tomcat启动时发现,需要注意细节
web.xml
繁琐,麻烦,步骤繁多
url-pattern 一旦写错或者冲突,web.xml文件会提示错误!!!
Servlet获取请求数据
【注意】
1. 要求前端提交数据的name属性和后台获取getParameter参数一致
2. 在后台通过HttpServletRequest获取数据使用getParameter方法,返回值是String类型
前端代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>02-ParameterUpload</title>
</head>
<body>
<form action="GetParameterServlet" method="get">
<span>姓名:</span><input type="text" name="userName"> <br>
<span>密码:</span><input type="password" name="password"> <br>
<input type="submit" value="提交">
</form>
<hr>
<form action="GetParameterServlet" method="post">
<span>姓名:</span><input type="text" name="userName"> <br>
<span>密码:</span><input type="password" name="password"> <br>
<input type="submit" value="提交">
</form>
</body>
</html>
后端代码
/**
* 获取前端通过HTTP请求方式发送过来的数据
*
* @author MI 2020/3/30 16:02
*/
@WebServlet("/GetParameterServlet")
public class GetParameterServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 浏览器通过form表单提交的数据都在HttpServletRequest对象中
// 通过getParameter获取对应的参数名数据,参数名和form表单中的name属性一致
String userName = req.getParameter("userName");
String password = req.getParameter("password");
System.out.println(userName + ":" + password);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("POST请求方式");
doGet(req, resp);
}
}
Servlet请求乱码问题
GET请求使用
Tomcat7以及以下版本使用情况下,前端数据传输使用的HTTP协议,传递的方式是UTF-8编码,Tomcat服务器Request对象接收数据时,使用的编码是ISO-8859-1。
数据接收方式和发送方式使用的编码集不一致,导致中文乱码
Tomcat8以上GET请求中文乱码基本上不会出现
String userName = req.getParameter("userName");
// 这里需要转换对应你的编码集方式
userName = new String(userName.getBytes("ISO-8859-1"), "UTF-8");
String password = req.getParameter("password");
System.out.println(userName + ":" + password);
POST请求使用
客户端发送数据的方式是通过该UTF-8传输,客户端需要设置同样的方式接受,需要设置HttpServletRequest.setCharacterEncoding("utf-8");统一设置编码。
Servlet响应乱码问题
HttpServletResponse响应对象默认采用的编码集方式是根据当前系统编码集有关,这里使用的编码集是GB2312,浏览器默认解析方式是UTF-8
解决方案:
告知HttpServletResponse,当前响应编码集和方式为UTF-8
response.setContentType("text/html;charset=utf-8");
针对乱码问题总结解决方案
针对于Tomcat8及其以上版本的Tomcat服务器软件,需要在接受数据时和响应数据时设置对应的编码集
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
以上两行代码可以放在所有的Servlet程序之前
Tomcat7及其以下版本,需要注意GET请求方式使用的编码集为ISO-8859-1
ServletRequest和ServletResponse
重定向
浏览器发送HTTP请求 ==> 服务器
服务器接收到请求之后 发送302状态码 新的location ==> 浏览器
浏览器收到302状态码 + location 按照新的location发送新的请求 ==> 服务器
特征:
1. 该操作是浏览器行为
2. 重定向最少存在两次的浏览器请求
3. 重定向情况下,浏览器的地址栏会发生改变
4. 重定向操作存在两个或者两个以上的请求,每一次新的请求,都会丢失之前的请求数据,也就是request对象【requeset作用域范围】
5. 重定向可以访问任何资源,不管是当前WEB服务器资源,还是网络端的资源都是可以访问
@WebServlet("/RedirectServlet")
public class RedirectServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 请求和响应乱码问题解决
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
// 重定向操作,重定向当前WEB Application中的index.jsp
resp.sendRedirect("index.jsp");
}
}
请求转发
浏览器发送HTTP请求 ==> 服务器
服务器接收到请求之后内部资源处理跳转 ==> 服务器其他资源
服务器其他资源处理完毕之后,才通过原始的请求和响应返回数据 ==> 客户端
特征:
1. 转发是服务器行为
2. 转发情况下浏览器有且只发送了一次请求
3. 转发情况下浏览器的地址栏没有发生任何改变
4. 转发情况下,浏览器的请求数据时被保存的,是通过request进行传递的
5. 转发情况下有且只能转发WEB Application整个项目的内容资源
@WebServlet("/dispatch")
public class DispatchServlet1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 转发到WEB Application内部资源
// getRequestDispatcher("dispatch2") 指定的内部资源名字
// forward(req, resp) 转发到指定资源,并且带有当前对应用户请求的request对象和response对象
req.getRequestDispatcher("/dispatch2").forward(req, resp);
}
}
请求资源路径
浏览器输入:
http://localhost:8080/Day42/dispatch
HOST:
http://127.0.0.1:8080
资源名:
Day42/dispatch
Tomcat收到Day42/dispatch,资源请求之后,首先找到Day42项目或者说路径,然后在web.xml或者注解中找到url-pattern 为 dispatch的内容。从而执行对应的Servlet
url-pattern是存在匹配原则
精确匹配
/具体名字
后缀名匹配
*.do *.action
*.xxx 主要是按照规定结尾的url-pattern都可以触发对应的Servlet程序
通配符匹配
/* 匹配所有请求,服务器端所有资源都可以匹配
单Servlet实现多请求
WEB Application中Servlet是整个WEB项目的核心,Servlet用于接收用户的请求,并且处理用户响应,每一个业务逻辑都有一个对应的Servlet,Servlet非常非常多,对于Servlet容器是存在一定压力的。
采用Servlet做一个分发操作,分发用户去请求和对应的响应,让别人处理。Servlet程序做的事情就非常的Easy了
需要对于用户请求的URL进行解析操作,通过一写特定的参数完成分发操作,让一个Servlet程序能够满足多个条件处理
后缀名匹配:
*.do匹配
代码
/**
* 分发操作的Servlet,使用*.do匹配,并且解析操作,执行对应的方法
*/
@WebServlet("*.do")
public class TransferServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String requestURI = req.getRequestURI();
System.out.println(requestURI);
String method = requestURI.substring(requestURI.lastIndexOf("/") + 1, requestURI.lastIndexOf("."));
System.out.println(method);
Class<ExecuteMethod> executeMethodClass = ExecuteMethod.class;
Method method1 = null;
try {
method1 = executeMethodClass.getMethod(method);
method1.invoke(null);
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
e.printStackTrace();
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
/**
* 目标执行方法
*/
public class ExecuteMethod {
public static void add() {
System.out.println("Add Method");
}
public static void delete() {
System.out.println("Delete Method");
}
public static void update() {
System.out.println("Update Method");
}
public static void select() {
System.out.println("Select method");
}
}
ServletContext Servlet上下文对象
概述
Servlet上下文对象,当WEB Application启动时,Tomcat服务器会根据web.xml以及注解方式,创建一个唯一的ServletContext对象,包含整个项目中很多核心的资源数据,并且是一个整个WEB Application的【公共区域】,所有的Servlet程序和JSP程序都可以使用ServletContext中存储的数据。
当WEB Application项目关闭时,ServletContext对象被销毁
获取ServletContext对象
方式一:
GenericServlet可以通过getServletContext方法获取
方式二:
ServletConfig接口中提供了getServletContext方法获取
方式三:
HttpSession提供getServletContext方法获取
方式四:
HttpServletRequest提供getServletContext方法获取
ServletContext对象特征
1. 唯一性,不管通过哪一个方式获取,都是同一个对象
2. WEB Application启动时加载创建,退出时销毁
3. ServletContext中存储的数据时一个共享资源,使用小心
4. ServletContext是一个【域对象】
@WebServlet("/TestServletContext")
public class TestServletContext extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 1. 可以直接通过当前Servlet对象来获取对应的ServletContext数据 【墙裂推荐】
ServletContext servletContext1 = this.getServletContext();
// 2. 通过ServletConfig对象获取对应的ServletContext对象
ServletContext servletContext2 = this.getServletConfig().getServletContext();
// 3. 通过Request请求对象获取对应都是ServletContext对象
ServletContext servletContext3 = req.getServletContext();
// 4. 通过HtttpSession对象获取ServletContext对象
HttpSession session = req.getSession();
ServletContext servletContext4 = session.getServletContext();
System.out.println(servletContext1 == servletContext2);
System.out.println(servletContext2 == servletContext3);
System.out.println(servletContext3 == servletContext4);
/*
有效方法1:
获取当前项目的发布路径
*/
System.out.println(servletContext1.getRealPath("/"));
/*
有效方法2:
获取服务器版本号
可以资源的根目录
*/
System.out.println(servletContext1.getServerInfo());
System.out.println(servletContext1.getContextPath());
/*
有效方法3:
作为数据传递的容器
*/
servletContext1.setAttribute("Tag", "骚磊");
/*
有效方法4:
ServletContext 刚刚区域数据存储还是删除
*/
System.out.println(this.getServletContext().getAttribute("Tag"));
this.getServletContext().removeAttribute("Tag");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
HttpServletRequest对象
HttpServletRequest对象是有服务器根据用户的请求创建得到,一个请求对应一个Request对象。
继承关系
interface ServletRequest
--| interface HttpServletRequest
Tomcat完成的符合HttpServletRequeset接口的实现类对象,对应Requeset
----| org.apache.catalina.connector.RequestFacade
Request对象中存在一大堆的方法
方法名 | 功能 |
---|---|
getMethod() | 获取请求方式 GET or POST |
getRequestURL() | 获取用户访问浏览器的完整路径 |
getRequestURI() | 获取用户请求资源名 |
getContextPath() | 获取虚拟目录名 Application Context |
getQueryString() | GET请求的所有参数,POST请求通过请求实体无法获取 |
getProtocol() | 获取当前使用的网络传输协议 HTTP/1.1 |
getRemoteAddr() | 获取客户端IP地址 |
getRemoteHost() | 主机地址 |
getRemotePort() | 用户请求当前资源的端口号 |
getRemoteUser() | 用户名字 |
Enumeration getHeaderNames() | 获取所有请求头名字 |
getHeader(String) | 获取指定请求头名称对应的值 |
请求参数相关方法【重点】
方法 | 功能 |
---|---|
String getParameter(String) | 根据指定的参数名获取对应的值,返回值类型为String |
Enumeration getParameterNames() | 获取所有参数的名字 |
String[] getParameterValues(String) | 获取指定参数名对应的字符串数组参数值 例如: 多选 |
Map<String, String[]> getParameterMap() | 获取当前Request请求中所有参数和参数值的Map双边队列,而且可以存着数组形式【框架常用】 |
HttpServletResponse对象
用户发送请求到服务器,服务器会对应当前用户的请求针对性的提供的响应,对应的就是HttpServletResponse对象
服务器可以通过response对象发送响应告知浏览器,浏览器可以根据服务器响应数据进行解析操作。
方法 | 功能 |
---|---|
setContentType() | 设置当前响应返回数据类型 |
PrintWriter getWriter() | 字符流对象 |
setHeader(name, value) | 设置响应头信息 |
setStatus(int) | 设置当前页面的状态码 |
getOutputStream() | 输出字节流对象 |