servlet redirect/forward/session/cookie 与 HTTP 协议的测试

 本文直接展示servlet的测试结果。

 

servlet的代码中使用sendRedirect:

  

public class SessionTest extends HttpServlet {
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
...
response.sendRedirect("http://localhost:8080/web/");
...}

 

 

查看浏览器交互过程,先是请求该servlet:

 

  1. Request URL:
    http://localhost:8080/web/SessionTest
  2. Request Method:
    GET
  3. Status Code:
    302 Found
  4. Request Headersview source
    1. Accept:
      text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    2. Accept-Encoding:
      gzip,deflate,sdch
    3. Accept-Language:
      en-US,en;q=0.8,zh;q=0.6,ko;q=0.4,ja;q=0.2
    4. Cache-Control:
      max-age=0
    5. Connection:
      keep-alive
    6. Host:
      localhost:8080
    7. User-Agent:
      Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36
  5. Response Headersview source
    1. Content-Length:
      0
    2. Content-Type:
      text/html;charset=UTF-8
    3. Date:
      Thu, 06 Jun 2013 07:16:55 GMT
    4. Location:
      http://localhost:8080/web/
    5. Server:
      Apache-Coyote/1.1
    6. Set-Cookie:
      JSESSIONID=8C8DCD7355CC62C75C9BD154B2ADEDD0; Path=/web/; HttpOnly

可以看到response返回了302,并带上了location, 指示浏览器做第二次跳转请求,浏览器得到提示后进行第二次请求。

 

同样的servlet,将代码改为forward,实现了在servlet容器内部的跳转,对浏览器实际上是不可见得。

 

request.getRequestDispatcher("/index.jsp").forward(request, response);

 

看一下tomcat服务器的响应,一个200  OK之后,直接返回了内容,很直接

  1. Request URL:
    http://localhost:8080/web/SessionTest
  2. Request Method:
    GET
  3. Status Code:
    200 OK
  4. Request Headersview source
    1. Accept:
      text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    2. Accept-Encoding:
      gzip,deflate,sdch
    3. Accept-Language:
      en-US,en;q=0.8,zh;q=0.6,ko;q=0.4,ja;q=0.2
    4. Connection:
      keep-alive
    5. Cookie:
      JSESSIONID=4D4C34D45462707E53A475C060E2D2A2; test=test
    6. DNT:
      1
    7. Host:
      localhost:8080
    8. User-Agent:
      Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36
  5. Response Headersview source
    1. Content-Length:
      218
    2. Content-Type:
      text/html;charset=UTF-8
    3. Date:
      Thu, 06 Jun 2013 09:12:04 GMT
    4. Server:
      Apache-Coyote/1.1
    5. Set-Cookie:
      JSESSIONID=0FE64A4D2D1777BD44F08F2F8186384B; Path=/web/; HttpOnly

 

再看cookie的保存,将以上代码改为将cookie加入response:

 

        Cookie cookie = new Cookie("test","test");
        response.addCookie(cookie);
        PrintWriter out = response.getWriter();

 

 

再看HTTP head:

 

 

  1. Request URL:
    http://localhost:8080/web/SessionTest
  2. Request Method:
    GET
  3. Status Code:
    200 OK
  4. Request Headersview source
    1. Accept:
      text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    2. Accept-Encoding:
      gzip,deflate,sdch
    3. Accept-Language:
      en-US,en;q=0.8,zh;q=0.6,ko;q=0.4,ja;q=0.2
    4. Cache-Control:
      max-age=0
    5. Connection:
      keep-alive
    6. Cookie:
      JSESSIONID=FB43328EF48C78B7122454F84B57F164
    7. DNT:
      1
    8. Host:
      localhost:8080
    9. User-Agent:
      Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36
  5. Response Headersview source
    1. Content-Length:
      186
    2. Content-Type:
      text/html;charset=UTF-8
    3. Date:
      Thu, 06 Jun 2013 07:47:13 GMT
    4. Server:
      Apache-Coyote/1.1
    5. Set-Cookie:
      JSESSIONID=BC3FDA2D942F2F4B50757D9C436D21A9; Path=/web/; HttpOnly
    6. Set-Cookie:
      test=test

Tomcat通过HTTP协议的Set-Cookie将servlet的cookie放入了响应头,查看浏览器的cookie,除了jsessionid,又加了一个test/test的cookie进来。



 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
让我们逐个比较这些概念: 1. 静态包含和动态包含: - 静态包含是指在JSP页面中使用`<%@ include file="filename.jsp" %>`语法将另一个JSP文件的内容嵌入到当前页面中。这是在编译时进行的,嵌入的内容会被当作当前页面的一部分。 - 动态包含是指使用`<jsp:include page="filename.jsp" />`标签在运行时包含另一个JSP文件的内容。这是在运行时进行的,嵌入的内容会被动态地加载和执行。 2. 转发与重定向: - 转发(forward)是指在服务器端将请求从一个资源发送到另一个资源,新资源接收到请求后可以共享同一个请求和响应对象。转发是在服务器内部完成的,客户端并不知道转发的过程。 - 重定向(redirect)是指在服务器端将请求响应给客户端,并在响应头中指示客户端重新发送请求到另一个URL。重定向会导致浏览器发起新的请求,对于客户端来说是完全透明的。 3. SessionCookie: - Session是在服务器端用于跟踪用户会话状态的机制,通过在服务器上存储会话数据,并将唯一的会话标识符发送给客户端的Cookie来实现。Session可以存储在服务器的内存中或持久化到数据库中。 - Cookie是一小段文本信息,由服务器发送给客户端并存储在客户端的浏览器中。浏览器在后续请求中会自动将Cookie发送给服务器。Cookie可以用于存储少量的用户数据,如登录状态、偏好设置等。 4. JSP与Servlet: - JSP(JavaServer Pages)是一种用于开发Web应用程序的Java技术,它允许在HTML中嵌入Java代码。JSP页面在服务器端被编译成Servlet,并在每次请求时动态生成HTML响应。 - Servlet是用Java编写的服务器端组件,它接收HTTP请求并生成HTTP响应。Servlet可以处理各种类型的请求,如GET、POST等,并与数据库、其他Web服务进行交互。 5. JPA与Hibernate: - JPA(Java Persistence API)是Java EE中定义的一套用于访问关系型数据库的API标准。它提供了一种面向对象的持久化模型,可以通过JPA进行对象关系映射(ORM)操作。 - Hibernate是一个开源的Java持久化框架,实现了JPA规范。它提供了强大的对象关系映射功能,使开发人员能够以面向对象的方式操作数据库。 6. JSF与Struts: - JSF(JavaServer Faces)是Java EE中的一个Web应用程序框架,用于构建用户界面。它采用组件化的方式,提供了丰富的用户界面组件和事件模型,简化了Web应用程序的开发。 - Struts是一个开源的Java Web应用程序框架,它基于模型-视图-控制器(MVC)设计模式。Struts提供了一种结构化的方式来组织和管理Web应用程序,包括请求处理、表单验证等功能。 这些概念都是在Java Web开发中经常使用的重要概念,根据具体的需求和场景选择合适的技术和机制可以提高开发效率和应用性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值