一、请求对象
接口:
ServletRequest : 通用的请求接口,这个接口的实现类的对象由容器创建,并由容器以参数的方式传递给某个Servlet接口的实现对象的service方法。
HttpServletRequest :是ServletRequest接口的子接口,这个接口是专门针对HTTP请求的,这个接口的实现类的对象由容器创建,并由容器以参数的方式传递给某个Servlet接口的实现对象的service(doGet、doPost)方法。
ServletRequest和HttpServletRequest的常用API
String getMethod() : 获取请求方式
String getHeader(String key) : 获取指定key对应的头信息
String getParameter(String paramName) : 获取指定参数名称对应的参数值
GET方式请求和POST方式请求
GET参数走地址栏,不安全,受浏览器地址栏的传输数据限制(4KB)
POST方式参数不走地址栏,走的是请求正文,相对GET方式安全,理论上
对传输的数据量没有限制
对于POST请求,Tomcat解析请求正文中的中文数据,乱码问题
// Tomcat解析请求正文数据时,使用ISO8859-1字符集解码 // 设置POST请求方式解析正文数据时的字符集 request.setCharacterEncoding("UTF-8");
二、响应对象
ServletResponse接口
HttpServletResponse子接口
PrintWriter getWriter() : 获取打印字符输出流对象,可以将数据写入
响应正文
如果写入响应正文有中文数据,会有乱码问题,如何解决?
方式一: reponse.setCharacterEncoding("utf-8") 设置响应正文的字符集 方式二:推荐,不仅可以设置响应正文的字符集,还可以在响应消息头中携带Content-Type头信息 response.setContentType("text/html;charset=utf-8")
三、域对象
Servlet中提供了三个域对象(内部都维护了一个Map集合),用于存储
key-value数据
ServletContext web应用全局域对象
这个项目所有servlet都共享这个域对象中的数据(域对象唯一)
这个域对象 从项目启动开始,到项目停止结束
ServletContext request.getServletContext();
HttpSession 会话域对象
只在一个会话期间,所有Servlet可以共享的数据
这个域对象 从浏览器与服务器建立连接开始,到这个连接断开结束
HttpSession request.getSession();
HttpServletRequest 请求域对象
只在一个请求过程,在参数转发的servlet中共享数据
这个域对象从一个请求开始,到转发(不一定存在), 到请求结束
上面三个域对象都提供
setAttribute(String key, Object obj);
Object getAttribute(key);
转发:
服务器内部的资源跳转,浏览器不知道,所以地址栏不变
转发使用的是请求对象的方法
/ 相对的是当前web应用的根路径
request.getRequestDispatcher(url).forward(request, reponse);
重定向
浏览器跳转资源的行为,所以地址发生变化
重定向使用的响应对象的方法
/ 代表的是服务器的根路径 ,先找web项目的根路径,再去项目中找资源
response.sendRedirect(url);
后台 / 是服务器访问的根路径
前端 / 是浏览器访问的根路径
idea 每次部署项目,默认设置项目的根路径 / (可以改)
idea默认的访问路径 前端/ 和后台 / 是同一个