get 与 post 请求方式
get 与 post 请求方式的区别:
get : method="get" 、地址栏、超链接(<a href="xx")请求方式默认都属于 get 提交方式。
但是地址栏能够容纳的信息有限不能超过5KB,如果请求数据太大会报错。
get 方式会在地址栏显示请求信息,post 不会显示。文件上传操作必须是 post
5、统一请求的编码
get 方式请求如果出现乱码,把tomcat8(使用UTF-8的编码)的JSP代码复制到tomcat7(使用的是ios-8859-1编码)后出现了乱码的情况。
解决办法:
1)统一每一个变量的编码(每个变量都要转一次编码)使用new String(旧编码,新编码)
2)修改server.xml
一次性的更改 tomcat7 默认 get 提交方式的编码(utf-8)
在包含端口号的标签处添加 get 请求方式的编码URIEncoding="UTF-8"
post 请求方式下修改编码:
6、response
响应对象
void addCookie(Cookie cookie)
:服务端向客户端增加 Cookie 对象。
void sendRedirect(String location) throws IOException
:重定向,页面跳转的一种方式。
login.jsp
登陆页面代码,输入登入信息后会到check.jsp
页面中检查信息是否正确:
ckeck.jsp
:验证信息,信息正确会重定向到success.jsp
页面
success.jsp
返回登入成功的信息
结果跳转到了success.jsp
页面,但是没有返回传入的name
属性值,导致数据丢失。
将跳转方式改为请求转发
返回结果:返回了name
属性值,但是页面还是停留在check.jsp
的页面。
请求转发与重定向的区别:
请求转发 | 重定向 | |
---|---|---|
地址栏是否改变 | 不变(check.jsp) | 改变(success.jsp) |
是否保留第一次请求时的数据 | 保留 | 不保留 |
请求的次数 | 1 | 2 |
session 服务端
Cookie (客户端,不是内置对象):Cookie是有服务端产生的,再发送给客户端保存,相当于本地缓存的作用,可以提高访问服务端的效率,但是安全性较差。是以name=value
的形式存在。
存在于javax.servlet.http.Cookie
包下提供以下几个方法:
public Cookie(String name,String value)
:构造方法
String getName()
:获取name
String getValue()
:获取value
void setMaxAge(int expiry)
:最大有效期(秒)
1)服务端准备Cookie:response.addCookie(Cookie cookie)
服务器向客户端发送Cookie对象。(响应的时候发送)
2)页面跳转(转发,重定向):将服务端的 cookie 带入客户端。
3)客户端获取cookie:request.getCookies()
注意:
1)服务端增加cookie:response对象;客户端获取对象:request对象
2)不能直接获取某一个单独对象,只能一次性将全部的 cookie 拿到。
session :会话。(开始 -> 结束,如打开浏览器到关闭浏览器的整个过程),是保存在服务端的。
session机制:客户端第一次请求服务端时,服务端会产生一个 session 对象(用于保存该客户信息)并且每个session 对象都会有唯一一个sessionID(用于区分其他session) -> JSESSIONID(会存入cookie中);服务端产生一个cookie,该cookie的 name=JSESSIONID,value=服务端sessionID值,然后服务端响应客户端的同时将该cookie发送给客户端,因此实现客户端(cookie里的jessionid和session 里的sessionid)和服务端一一对应。
session 的性质:
- session 存储在服务端
- session 是在同一个用户(客户)请求时共享
- 实现机制:第一次客户请求时产生一个sessionID并复制给cookie的jessionID然后发给客户端。
session 的方法:
String getId()
:获取sessionID
boolean isNew()
:判断是否是新用户(第一次访问)
void invalidate()
:使session全部失效(用户退出登录、注销)session.invalidate();
session.removeAttribute("uname");
使某一个 session 失效。
注意:这里的session 对象是由HttpSession(java.servlet.http)
类产生的。
session.setAttribute("uname",name);
:登录成功后把从客户端获取的name
值给服务端的变量uname
。
String name=session.getAttribute("uname");
:获取服务端的session
中的uname
值。
void setMaxInactiveInterval()
:设置最大有效非活动时间(如人离开了长时间停留没有操作响应超时会让用户重新登录)
关于request
的作用域问题:
request
数据同一次请求有效。
场景:登录成功(login.jsp)时会返回欢迎某用户的页面(check.jsp),然后在地址栏敲回车(相当于在check.jsp页面发出第二次请求)会报空指针异常即从服务端返回的值为空;但是按F5刷新却能返回值。
分析:在地址栏敲回车相当于在 check.jsp 页面发出第二次请求,而request
数据只在同一次的请求下有效;刷新时会自动重新在 login.jsp 页面将数据发送给服务端,然后服务端返回数据,这时是在同一次请求下的操作。
session
同一次会话共享。
场景:在同一个浏览器登录淘宝成功一次后,打开新的淘宝页面时显示的也是登录状态,当换另一个不同的浏览器登录时则需要重新登录账号。
分析:同一个浏览器访问服务器算作一次会话,同一次会话的用户信息共享;不同浏览器相当于不同的对象访问服务器,属于不同的会话。
cookie 和 session 的区别:
session | cookie | |
---|---|---|
保存的位置 | 服务端 | 客户端 |
安全性 | 较安全 | 较不安全 |
保存的内容 | Object | String |