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(旧编码,新编码)

image-20200716174600768

2)修改server.xml一次性的更改 tomcat7 默认 get 提交方式的编码(utf-8)

在包含端口号的标签处添加 get 请求方式的编码URIEncoding="UTF-8"

post 请求方式下修改编码:

image-20200716175224450

6、response响应对象

void addCookie(Cookie cookie):服务端向客户端增加 Cookie 对象。

void sendRedirect(String location) throws IOException:重定向,页面跳转的一种方式。

login.jsp登陆页面代码,输入登入信息后会到check.jsp页面中检查信息是否正确:

image-20200716181648274

ckeck.jsp:验证信息,信息正确会重定向success.jsp页面

image-20200716181821424

success.jsp返回登入成功的信息

image-20200716181924975

结果跳转到了success.jsp页面,但是没有返回传入的name属性值,导致数据丢失。

将跳转方式改为请求转发

返回结果:返回了name属性值,但是页面还是停留在check.jsp的页面。

请求转发与重定向的区别:

image-20200716183246236
请求转发 重定向
地址栏是否改变 不变(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对象。(响应的时候发送)

image-20200717104945391

2)页面跳转(转发,重定向):将服务端的 cookie 带入客户端。

3)客户端获取cookie:request.getCookies()

image-20200717105233647

注意:

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同一次会话共享。

场景:在同一个浏览器登录淘宝成功一次后,打开新的淘宝页面时显示的也是登录状态,当换另一个不同的浏览器登录时则需要重新登录账号。

分析:同一个浏览器访问服务器算作一次会话,同一次会话的用户信息共享;不同浏览器相当于不同的对象访问服务器,属于不同的会话。

session cookie
保存的位置 服务端 客户端
安全性 较安全 较不安全
保存的内容 Object String
posted @ 2020-07-20 09:14  莫哈德  阅读(253)  评论(0编辑  收藏  举报
/*地址栏logo*/