什么是request
request是Servlet.service()方法的一个参数,类型为javax.servlet.http.HttpServletRequest
。在客户端发出每个请求时,服务器都会创建一个request对象,并且把请求数据封装到request中,然后在调用Servlet.service()方法时传递给service()方法,这说明在service()方法中可以通过request对象来获取请求数据。
request功能
- getMethod() 获取请求方式;
- getContextPath() 获取虚拟目录;
- getServletPath() 获取资源路径(servlet路径)
- getQueryString() 获取get方式的请求参数;
- getRequestURI() 获取请求URI;
- getRequestURL() 获取请求URL;
- getProtocol() 获取协议及版本;
- getRemoteAddr() 获取客户机的IP地址;
- getHeader(String name) 通过请求头的名称获取值;
- getReader() 返回类型BufferedReader,获取的当然是字符输入流;
- getInputStream() 返回类型ServletInputStream,获取字节输入流(可以操作所有类型的文件);
- String getParameter(String name)(常用,通常前端传值用用这个获取之后封装例如如下代码:)
前端:
<form action=" " method="post">
<input type="text" name="username">
<input type="text" name="password">
<input type="submit">
</form>
java:
String username = request.getParameter("username");
String password = request.getParameter("password");
- String[] getParameterValues(String name)
- Enumeration getParameterNames()
- Map<String,String[]> getParameterMap()
- 注意:用get可能会出现乱码,可以在Tom act里面的配置文件server.xml里面修改配置文件,更改get的默认提交编码
request注意
request 同一次请求有效;其他请求无效 (请求转发后有效;重定向后无效)
response概述
response是servlet.service方法的一个参数,在客户端发出每个请求时,服务器都会创建一个response对象,并传入servlet.service()方法,response对象用来对客户端进行响应的,这说明在service方法中使用response对象可以完成对客户响应的工作。
response功能
- 设置响应头信息
- 发送状态码
- 设置响应正文
- 重定向
关于重定向和转发
重定向的响应码是302,重定向是两次请求,重定向的url可以是其他应用,不局限当前应用。重定向重定向不带数据,转发是带数据的,转发是只有一次请求。
请求转发 | 重定向 | |
---|---|---|
地址栏是否改变 | 不变 | 改变 |
是否保留第一次请求时的数据 | 保留 | 不保留 |
请求的次数 | 1 | 2 |
跳转发生的位置 | 服务端 | 客户端发出的第二次跳转 |
sesseion
session是内置对象;
客户端第一次请求服务端时,(jsessionid-sessionid)服务端会产生一个session对象(用于保存该客户的信息);
并且每个session对象 都会有一个唯一的 sessionId( 用于区分其他session);
服务端由会 产生一个cookie,并且 该cookie的name=JSESSIONID ,value=服务端sessionId的值;
然后 服务端会在 响应客户端的同时 将该cookie发送给客户端,至此 客户端就有了 一个cookie(JSESSIONID);
因此,客户端的cookie就可以和服务端的session一一对应(JSESSIONID - sessionID)
客户端第二/n次请求服务端时:服务端会先用客户端cookie种的JSESSIONID 去服务端的session中匹配sessionid,如果匹配成功(cookie jsessionid和sesion sessionid),说明此用户 不是第一次访问,无需登录;
session存储在服务端
session是在 同一个用户(客户)请求时 共享
实现机制:第一次客户请求时 产生一个sessionid 并复制给 cookie的jsessionid 然后发给客户端。最终 通过session的sessionid-cookie的jsessionid
session方法
- String getId() :获取sessionId
- boolean isNew() :判断是否是 新用户(第一次访问)
- void invalidate():使session失效 (退出登录、注销)
- void setAttribute() Object getAttribute();
- void setMaxInactiveInterval(秒) :设置最大有效 非活动时间
- int getMaxInactiveInterval():获取最大有效 非活动时间
cookie
Cookie(客户端,不是内置对象):Cookie是由 服务端生成的 ,再发送给客户端保存。
相当于 本地缓存的作用: 客户端(hello.mp4,zs/abc)->服务端(hello.mp4;zs/abc)
作用:提高访问服务端的效率,但是安全性较差。
cookie的常用方法
- public Cookie(String name,String value)
- String getName():获取name
- String getValue():获取value
- void setMaxAge(int expiry);最大有效期 (秒)
- 服务端准备Cookie:
response.addCookie(Cookie cookie) - 页面跳转(转发,重定向)
客户端获取cookie: request.getCookies();
注意
- 服务端增加cookie :response对象;客户端获取对象:request对象
- 不能直接获取某一个单独对象,只能一次性将 全部的cookie拿到
- 建议 cookie只保存 英文数字,否则需要进行编码、解码
cookie和session的区别
session | cookie | |
---|---|---|
保存的位置 | 服务端 | 客户端 |
安全性 | 较安全 | 较不安全 |
保存的内容 | Object | String |
JSP九大内置对象
- pageContext JSP页面容器
- request 请求对象
- session 会话对象
- appliation 全局对象
- response 响应对象
- config 配置对象(服务器配置信息)
- out 输出对象
- page 当前JSP页面对象(相当于java中的this)
- exception 异常对象
四种范围对象(小->大)
pageContext JSP页面容器 (page对象); 当前页面有效
request 请求对象 同一次请求有效
session 会话对象 同一次会话有效
appliation 全局对象 全局有效(整个项目有效)
1.以上的4个范围对象,通过 setAttribute()复制,通过getAttribute()取值;
2.以上范围对象,尽量使用最小的范围。因为 对象的范围越大,造成的性能损耗越大。