`
lgh1992314
  • 浏览: 315579 次
文章分类
社区版块
存档分类
最新评论

JSP&Servlet学习笔记----第4章

 
阅读更多

HTTP是基于请求/响应的无状态的通信协议。

使服务器记得此次请求与之后请求关系的方式,叫做会话管理。


隐藏域:由浏览器在每次请求时主动告知服务器多次请求间必要的信息。仅适用于一些简单的状态 管理,如在线问卷。

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

/**
 * Created by N3verL4nd on 2017/2/21.
 */
@WebServlet("/questionnaire")
public class HiddenFieldServlet extends HttpServlet {
    private void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html; charset=UTF-8");
        //response.setHeader("Content-Type", "text/html; charset=UTF-8");
        //response.addHeader("Content-Type", "text/html; charset=UTF-8");
        PrintWriter out = response.getWriter();
        out.println(
                "<!DOCTYPE html>"
                + "<html>"
                +"<head>"
                +"<title>问卷调查</title>"
                +"</head>"
                +"<body>"
        );
        String page = request.getParameter("page");
        out.println("<form action='questionnaire' method='post'>");
        if (page == null){
            out.println("问题一:<input type='text' name='p1q1' /><br />");
            out.println("问题二:<input type='text' name='p1q2' /><br />");
            out.println("<input type='submit' name='page' value='下一页' />");
        }else if ("下一页".equals(page)){
            String p1q1 = request.getParameter("p1q1");
            String p1q2 = request.getParameter("p1q2");
            out.println("问题三:<input type='text' name='p2q1' />");
            out.println("<input type='hidden' name='p1q1' value='" + p1q1 + "' />");
            out.println("<input type='hidden' name='p1q2' value='" + p1q2 + "' />");
            out.println("<input type='submit' name='page' value='完成' />");
        }else if ("完成".equals(page)){
            out.println(request.getParameter("p1q1") + "<br />");
            out.println(request.getParameter("p1q2") + "<br />");
            out.println(request.getParameter("p2q1") + "<br />");
        }
        out.println("</form>");
        out.println("</body>");
        out.println("</html>");
        out.close();
    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        processRequest(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        processRequest(request, response);
    }
}

cookie:

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

/**
 * Created by N3verL4nd on 2017/2/23.
 */
@WebServlet(name = "SetServlet", urlPatterns = {"/setcookies.do"})
public class SetServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        for (int i = 0; i < 5; i++){
            Cookie cookie = new Cookie(String.valueOf(i), "xiya");
            response.addCookie(cookie);
        }

        response.setContentType("text/html; charset=UTF-8");
        PrintWriter out = response.getWriter();
        out.println("设置cookies" + "<br />");
        out.println("<a href='showcookies.do'>showcookies</a>");
        out.close();
    }
}
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

/**
 * Created by N3verL4nd on 2017/2/23.
 */
@WebServlet(name = "ShowServlet", urlPatterns = {"/showcookies.do"})
public class ShowServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html; charset=UTF-8");
        PrintWriter out = response.getWriter();
        out.println("<!DOCTYPE html>");
        out.println("<html>");
        out.println("<head>");
        out.println("<title>显示Cookies</title>");
        out.println("</head>");
        out.println("<body>");
        out.println("<body>");
        out.println("<table>");
        out.println("<tr>");
        out.println("<th>Cookie Name</th>");
        out.println("<th>Cookie Value</th>");
        out.println("</tr>");
        Cookie[] cookies = request.getCookies();
        if(cookies != null){
            for (Cookie cookie : cookies){
                String key = cookie.getName();
                String value = cookie.getValue();
                out.println("<tr>");
                out.println("<td>" + key + "</td>");
                out.println("<td>" + value + "</td>");
                out.println("</tr>");
            }
        }

        out.println("</table>");
        out.println("</body>");
        out.println("</html>");
    }
}

url重写:其实就是GET请求参数的应用,当服务器响应浏览器上一次请求时,将某些相关信息以超链接方式响应给浏览器,超链接中包含参数信息。
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

/**
 * Created by N3verL4nd on 2017/2/22.
 */
@WebServlet(name = "SearchServlet", urlPatterns = {"/search.do"})
public class SearchServlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html; charset=UTF-8");
        PrintWriter out = response.getWriter();
        out.println("<!DOCTYPE html>");
        out.println("<html>");
        out.println("<head>");
        out.println("<title>调查</title>");
        out.println("</head>");
        out.println("<body>");
        String start = request.getParameter("start");
        if (start == null){
            start = "1";
        }
        int count = Integer.parseInt(start);
        int begin = 10 * count - 9;
        int end = 10 * count;

        out.println("第 " + begin + " 到 " + end + " 搜索结果<br />");
        out.println("<ul>");
        for (int i = begin; i <= end; i++){
            out.println("<li>搜索结果" + i + "</li>");
        }
        out.println("</ul>");
        for (int i = 1; i < 10; i++){
            if (i == count){
                out.println(i);
                continue;
            }
            out.println("<a href='search.do?start=" + i + "'>" + i + "</a>");
        }
        out.println("</body>");
        out.println("</html>");
    }
}

在Servlet/JSP中可以使用HttpSession来进行会话管理。

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;

/**
 * Created by N3verL4nd on 2017/2/22.
 */
@WebServlet(name = "SessionServlet", urlPatterns = {"/session.do"})
public class SessionServlet extends HttpServlet {

    private void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html; charset=UTF-8");
        PrintWriter out = response.getWriter();
        out.println(
                "<!DOCTYPE html>"
                        + "<html>"
                        +"<head>"
                        +"<title>问卷调查</title>"
                        +"</head>"
                        +"<body>"
        );
        String page = request.getParameter("page");
        out.println("<form action='session.do' method='post'>");
        if (page == null){
            out.println("问题一:<input type='text' name='p1q1' /><br />");
            out.println("问题二:<input type='text' name='p1q2' /><br />");
            out.println("<input type='submit' name='page' value='下一页' />");
        }else if ("下一页".equals(page)){
            String p1q1 = request.getParameter("p1q1");
            String p1q2 = request.getParameter("p1q2");
            HttpSession session = request.getSession();
            System.out.println(session.getId());
            session.setAttribute("p1q1", p1q1);
            session.setAttribute("p1q2", p1q2);
            out.println("问题三:<input type='text' name='p2q1' /><br />");
            out.println("<input type='submit' name='page' value='完成' />");
        }else if ("完成".equals(page)){
            String p2q1 = request.getParameter("p2q1");
            HttpSession session = request.getSession();
            System.out.println(session.getId());
            session.setAttribute("p2q1", p2q1);

            out.println(session.getAttribute("p1q1") + "<br />");
            out.println(session.getAttribute("p1q2") + "<br />");
            out.println(session.getAttribute("p2q1") + "<br />");
        }
        out.println("</form>");
        out.println("</body>");
        out.println("</html>");
        out.close();
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        processRequest(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        processRequest(request, response);
    }
}

如上所示,HttpSession是通过HttpServletRequest获得的,但是该实例存在于Web容器内。

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;

/**
 * Created by N3verL4nd on 2017/2/23.
 */
@WebServlet(name = "SessionInfoServlet", urlPatterns = {"/SessionInfoServlet"})
public class SessionInfoServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html; charset=UTF-8");
        HttpSession session = request.getSession();
        //session.setMaxInactiveInterval(10);//多少秒失效
        PrintWriter out = response.getWriter();
        out.println("<!DOCTYPE html>");
        out.println("<html>");
        out.println("<head>");
        out.println("<title>SessionInfoServlet</title>");
        out.println("</head>");
        out.println("<body>");

        out.println("New Session:" + session.isNew() + "<br />");
        out.println("Session ID:" + session.getId() + "<br />");
        out.println("getCreationTime:" + new Date(session.getCreationTime()) + "<br />");
        out.println("getLastAccessedTime:" + new Date(session.getLastAccessedTime()) + "<br />");
        out.println("getRequestedSessionId:" + request.getRequestedSessionId() + "<br />");
        out.println("isRequestedSessionIdFromURL:" + request.isRequestedSessionIdFromURL() + "<br />");
        out.println("isRequestedSessionIdFromCookie:" + request.isRequestedSessionIdFromCookie() + "<br />");
        out.println("isRequestedSessionIdValid:" + request.isRequestedSessionIdValid() + "<br />");
        out.println("<br /><a href='" + response.encodeURL("SessionInfoServlet") + "'>刷新</a><br />");
    }
}

对于以上程序,我们使用Fiddler抓包观察下:




第一次调用该Servlet会返回Set-Cookie,第二次调用我们会向HTTP服务器发送该cookie来获取Web容器内对应的HttpSession。

分享到:
评论

相关推荐

    [JSP&Servlet;学习笔记(第2版)]

    **JSP(Java Server Pages)与Servlet...这个**[JSP&Servlet学习笔记(第2版)]**会涵盖这些主题,并可能包括示例代码、最佳实践和常见问题解答,帮助读者全面掌握JSP和Servlet的使用技巧,进一步提升Java Web开发能力。

    吉林大学珠海学院JSP&Servlet学习笔记(第二版)课后答案

    第四章至第九章涵盖了JSP和Servlet的高级主题,包括JSP的自定义标签、Servlet的过滤器、JSP和Servlet的安全机制等。 本资源为JSP和Servlet学习提供了系统的指导和参考,适合初学者和中级开发者学习和参考。 知识点...

    JSP&Servlet学习笔记(第2版)_打印版

    根据提供的文件信息,标题为“JSP&Servlet学习笔记(第2版)_打印版”,描述指出文档经过空白边裁剪处理以便于打印。虽然提供的部分内文无法直接转化为明确的知识点,但我们可以根据标题和描述推测该文档的主要内容,...

    jsp&servlet;学习笔记_第2版_光盘(看评论酌情下载)

    学习笔记"及提供的源码,开发者可以全面了解JSP和Servlet的工作原理,学会如何创建动态Web应用,同时提升解决问题和实际开发的能力。结合实际项目练习,能够更好地将理论知识转化为实践经验,从而在Java Web开发领域...

    JSP&Servlet;学习笔记 第二版 林信良

    **《JSP&Servlet学习笔记 第二版 林信良》:** 这本书是学习JSP和Servlet的优秀资源,作者林信良以通俗易懂的方式讲解了这两个技术的核心概念、工作原理和实际应用。书中可能涵盖了JSP的指令、动作、表达式和脚本...

    Servlet&JSP课后习题解答

    Servlet&JSP课后习题解答 Servlet是Java EE规范中的一部分,用于开发基于Web的应用程序。它可以处理HTTP请求,生成动态网页,并与数据库进行交互。JSP(Java Server Pages)是Servlet的扩展,允许开发者使用HTML和...

    day04-Tomcat&Servlet入门-讲义.zip

    【描述】"day04-Tomcat&Servlet入门-讲义.zip"暗示这是一份教学材料,可能包含第四天课程的学习笔记或讲义,专注于初学者如何开始使用Tomcat和Servlet进行Web开发。学习者将通过这份资料了解到如何配置和管理Tomcat...

    JSP-Servlet学习笔记第2版.pdf

    由于直接学习笔记的内容没有给出具体的实例代码和详细解释,所以这里只提供了理论层面的知识点。如果需要学习具体实现,可以寻找相关的教程和项目实践来加深理解。同时需要注意的是,由于JSP/Servlet技术相对老旧,...

    JSP动态网站开发实践教程(第2版)源代码

    《JSP动态网站开发实践教程(第2版)源代码》是学习JSP技术的宝贵资源,它提供了丰富的实例和实战经验,旨在帮助开发者深入理解JSP在构建动态网站中的应用。通过分析和实践这些源代码,我们可以掌握JSP的核心概念、...

    良葛格JspServlet学习笔记.pdf

    ### 良葛格JspServlet学习笔记 #### 一、引言 在现代Web开发领域,特别是Java EE平台中,JSP (JavaServer Pages) 和 Servlet 技术扮演着非常重要的角色。这两种技术共同构成了Java Web应用的基础,分别侧重于用户...

    Servlet学习笔记

    ### Servlet学习笔记精炼知识点 #### 一、Servlet初始化与加载机制 1. **Servlet注册与实例化**:在Web应用中,一个Servlet的生命周期始于它的注册与实例化过程。通常,这一过程是在Web服务器启动时,根据`web.xml...

    JSP网络编程学习笔记源代码 part2

    第四篇为“数据库访问技术”,主要讲述JDBC技术及JSP和Servlet如何通过JDBC访问数据库,以及如何改进数据库的访问和目前流行的Hibernate、iBATIS及Spring集成访问的支持;第五篇为“标签语言和表达式语言”,主要...

    jsp-servlet

    对于初学者,可以通过以下途径学习JSP-Servlet技术: 1. **官方文档**:Oracle提供了详细的Java Servlet和JSP规范文档。 2. **在线教程**:网站如W3School、教程网等提供了丰富的教程和示例代码。 3. **书籍**:如...

    servlet和jsp学习笔记

    这篇学习笔记将深入探讨这两个概念,以及它们在实际开发中的应用。 Servlet是Java编程语言的一个接口,由Sun Microsystems(现为Oracle)定义,它允许Java代码与HTTP服务器交互。Servlet主要负责处理客户端的请求并...

    JSP_Servlet

    **JSP(JavaServer Pages)和Servlet是Java Web开发中的两个核心技术,它们在构建动态Web应用程序方面发挥着关键作用。** ### JSP简介 JSP是Java平台上的一个服务器端技术,它允许开发者将HTML代码与Java代码混合...

    servlet学习笔记

    ### Servlet 学习笔记 #### 一、Servlet 创建与生命周期 **Servlet** 是 Java Web 开发中的一个核心组件,主要用于处理客户端发送到服务器的 HTTP 请求,并返回相应的响应。Servlet 的创建与生命周期是学习 Java ...

    jsp第七章学习笔记

    ### jsp第七章学习笔记 #### 一、Servlet概述与生命周期 Servlet是一种运行在服务器端的Java程序,主要用于处理客户端的HTTP请求,并做出相应的响应。Servlet技术是Java Web开发的基础,它提供了一种通用、可扩展...

    java学习笔记-----给java初学者

    Java学习笔记是专门为Java初学者设计的一套详尽的学习资源,旨在帮助新手快速掌握这门广泛使用的编程语言。这份笔记涵盖了从基础概念到高级特性的全面内容,是学习和复习Java知识的理想工具。 1. **Java简介** ...

    coreJava、jsp、servlet笔记

    核心Java、JSP(JavaServer Pages)和Servlet是Java Web开发中的基础技术,这三者在Web应用程序的构建中扮演着重要角色。这份压缩包包含了关于这三个主题的详细笔记,对于学习和理解这些技术有着极大的帮助。 首先...

Global site tag (gtag.js) - Google Analytics