Java路径问题和状态管理的概念

路径问题:
什么是路径:
.链接地址<a href="URL"></a>
.表单提交<from action="url">
.重定向    response.sendRedirect("url")
.转发    request.getRequestDispatcher("url")
url:路径
ps:以上四种情况中的url可以为绝对路径也可以为相对路径.

什么是相对路径:
.从当前文件出发到达目标文件所经过的路径叫做相对路径.
.书写格式不以"/"开头
.退至上一级目录"../"开头

什么叫绝对路径:
.以"/"开头的路径都是绝对路径,不以当前文件的位置作为起始,而是以一个固定位置作为起始
到达目标文件所经过的路径
.这个固定位置可能是应用名,也可能是应用名之后.不可以使用从盘符开始的路径

/appName/a/a2.jsp

经验总结:
关于重定向和转发的相对路径和绝对路径问题
转发和重定向的url前加有"/"则为绝对路径,反之则为相对路径
1.通过form表单的action属性向服务器发送请求
acition="LoginServlet"
则表单生成的请求地址
http://localhost:8080/appName/LoginServlet

2.重定向:
相对路径:reponse.sendRedirect("index.jsp");
http://localhost:8080/appName/index.jsp

绝对路径:response.sendRedirect("/Manager/index.jsp");
web容器本身地址+参数生成完整的url
http://localhost:8080/Manager/index.jsp

web应用地址
response.sendRedirect("http://www.baidu.com");

转发:
相对路径:
与重定向生成的url方法相同.
1.request.getRequestDispatcher("index.jsp")
http://localhost:8080/appName/index.jsp

2.绝对路径:
转发使用绝对路径和重定向不同:比如:
request.getRequestDispatcher("/Manager/index.jsp")
http://localhost:8080/Manager/index.jsp
但是转发用相对路径和绝对路径,最后产生的地址都一样

状态管理:
为什么需要状态管理:
web应用程序使用HTTP协议通信,而HTTP协议是"无状态协议",即服务器一旦响应完客户的请求
之后,就断开连接,而同一个客户的下一次请求将重新建立网络连接

.服务器应用程序有时需要判断是否为同一个客户发出的请求,比如客户的多次选购商品,
因此,有必须要跟踪同一个客户发出的一系列请求.

什么是状态管理
.将客户端(浏览器)与服务器之间的多次交互(一次请求,一次响应)当做一个整体来看待并且
将多次交互所涉及的数据即状态保存下来.
.状态指的是数据
.管理指的是多次交互时对数据的修改.

状态管理常见的两种常见模式:
.服务器状态管理技术:将状态(数据)保存在服务器端,代表性的是session技术.
.浏览器状态管理技术:将状态保存在客户端,代表性的技术Cookie

什么是Cookie
.浏览器向web服务器发送请求时,服务器会将少量的数据以set-Cookie消息头的方式发送给
浏览器,浏览器将这些数据保存下来.
.当浏览器再次访问服务器时,会将这些数据以Cookie消息头的方式发送给服务器

第一次访问服务器以如下形式返回给客户端:
Set-Cookie:uname=Kitty
Set-Cookie:city=beijing
当浏览器再次访问服务器的时候会在request header中发送如下数据,以便达到状态管理
Cookie:uname=Kitty;city=beijing

ps:cookie的生命周期:
随着浏览器的关闭,保存在浏览器端的Cookie也跟着被删除

Cookie原理:
客户端:<----访问---->服务器:
1.http/1.1 200 ok
set-cookie:uname=XXX
2.GET /find Http/1.1
Cookie :uname = XXX

如何创建Cookie
.Servlet API为使用Cookie提供javax.servlet.http.Cookie
.创建:
Cookie cookie1 = new Cookie(String name,String value);
response.addCookie(cookie1);

.name:用于区分不同Cookie的名字
.value:Cookie的值

如何查询Cookie
.获取客户端的所有Cookie对象
Cookie[] cookies = request.getCookies();
ps:该方法可能会返回null
.获取一个Cookie对象的名称和值
    String name = c.getName();
    String value = c.getValue();

response.setContentType("text/html;charset=utf-8");
//        接收浏览器发送的Cookie
        PrintWriter out = response.getWriter();
        Cookie[] cookies = request.getCookies();
        if(cookies != null) {
            for (Cookie c : cookies) {
                String name = c.getName();
                String value = c.getValue();
                out.println("Name:"+name+"   Value:"+value+"<br>");
            }
        }else {
            out.println("无cookie信息");
        }
        
        
如何修改Cookie
1.获取客户端发送的所有Cookie
2.根据name找到要修改的Cookie
3.调用Cookie的setValue(String newValue)方法修改该Cookie的值
4.将修改后的Cookie加入到response返回到客户端


 

猜你喜欢

转载自blog.csdn.net/CXY_ZPH/article/details/84993913
今日推荐