文章目录
- Servlet概述
- Servlet核心接口和类
- 三种自定义Servlet接口的方法
- 1.实现Servlet接口
- 2.继承GenericServlet抽象类
- 3.继承HttpServlet抽象类
- 生命周期
- 概述
- 配置方式
- Servlet3.0之后允许使用注解方式配置
- 任何一个版本都允许使用web.xml配置
- Servlet获取请求数据
- Servlet请求乱码问题
- GET请求使用
- POST请求使用
- Servlet响应乱码问题
- 针对乱码问题总结解决方案
- ServletRequest和ServletResponse
- 重定向
- 请求转发
- 请求资源路径
- 单Servlet实现多请求
- ServletContext Servlet上下文对象
- HttpServletRequest对象
- HttpServletResponse对象
Servlet概述
- 即Server Applet
- Servlet 是 JavaWEB 服务端的一个小程序,主要用户用户数据的交互,WEB 数据展示和数据传递,是一个动态的资源
- Servlet 程序可以应对搜友类型的请求和响应,Servlet 主要用于 HTTP 协议的 WEB 服务器程序实现
- Servlet 开发需要用到两个包javax.servletjavax.servlet.http
- 开发中可能会涉及到的接口和类javax.servlet.http.Servletjavax.servlet.http.GServlet --abstract修饰的类javax.servlet.http.HttpServletjavax.servlet.http.HttpServletRequestjavax.servlet.http.HttpServletResponsejavax.servlet.http.HttpSessionjavax.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类对象前提条件:
而且Constructor有且只执行一次
- 阶段二:init(ServletConfig config) 初始化方法,当Servlet程序创建之后一定要对当前Servlet程序进行初始化过程,需要使用ServletConfig对象完成初始化操作,ServletConfig对象中是从注解或者web.xml中获取对应的配置信息,完成初始化操作,而且只执行一次
- 阶段三:service方法提供服务 当前Servlet程序准备完毕,Servlet程序是在被请求时执行service方法,完成对应请求和响应的执行过程。到HttpServlet抽象类中对于service方法实现,并且按照HTTP请求方式完成划分工作。比如doGet doPost
- 阶段四:Tomcat服务器中Servlet容量对于Servlet进行销毁过程,有几种情况下会执行destroy方法
配置方式
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-1ServletRequest和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/dispatchTomcat收到Day42/dispatch,资源请求之后,首先找到Day42项目或者说路径,然后在web.xml或者注解中找到url-pattern 为 dispatch的内容。从而执行对应的Servleturl-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.RequestFacadeRequest对象中存在一大堆的方法方法名
功能
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()
输出字节流对象