- 浏览: 315582 次
文章分类
最新评论
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(Java Server Pages)与Servlet...这个**[JSP&Servlet学习笔记(第2版)]**会涵盖这些主题,并可能包括示例代码、最佳实践和常见问题解答,帮助读者全面掌握JSP和Servlet的使用技巧,进一步提升Java Web开发能力。
第四章至第九章涵盖了JSP和Servlet的高级主题,包括JSP的自定义标签、Servlet的过滤器、JSP和Servlet的安全机制等。 本资源为JSP和Servlet学习提供了系统的指导和参考,适合初学者和中级开发者学习和参考。 知识点...
根据提供的文件信息,标题为“JSP&Servlet学习笔记(第2版)_打印版”,描述指出文档经过空白边裁剪处理以便于打印。虽然提供的部分内文无法直接转化为明确的知识点,但我们可以根据标题和描述推测该文档的主要内容,...
学习笔记"及提供的源码,开发者可以全面了解JSP和Servlet的工作原理,学会如何创建动态Web应用,同时提升解决问题和实际开发的能力。结合实际项目练习,能够更好地将理论知识转化为实践经验,从而在Java Web开发领域...
**《JSP&Servlet学习笔记 第二版 林信良》:** 这本书是学习JSP和Servlet的优秀资源,作者林信良以通俗易懂的方式讲解了这两个技术的核心概念、工作原理和实际应用。书中可能涵盖了JSP的指令、动作、表达式和脚本...
Servlet&JSP课后习题解答 Servlet是Java EE规范中的一部分,用于开发基于Web的应用程序。它可以处理HTTP请求,生成动态网页,并与数据库进行交互。JSP(Java Server Pages)是Servlet的扩展,允许开发者使用HTML和...
【描述】"day04-Tomcat&Servlet入门-讲义.zip"暗示这是一份教学材料,可能包含第四天课程的学习笔记或讲义,专注于初学者如何开始使用Tomcat和Servlet进行Web开发。学习者将通过这份资料了解到如何配置和管理Tomcat...
由于直接学习笔记的内容没有给出具体的实例代码和详细解释,所以这里只提供了理论层面的知识点。如果需要学习具体实现,可以寻找相关的教程和项目实践来加深理解。同时需要注意的是,由于JSP/Servlet技术相对老旧,...
《JSP动态网站开发实践教程(第2版)源代码》是学习JSP技术的宝贵资源,它提供了丰富的实例和实战经验,旨在帮助开发者深入理解JSP在构建动态网站中的应用。通过分析和实践这些源代码,我们可以掌握JSP的核心概念、...
### 良葛格JspServlet学习笔记 #### 一、引言 在现代Web开发领域,特别是Java EE平台中,JSP (JavaServer Pages) 和 Servlet 技术扮演着非常重要的角色。这两种技术共同构成了Java Web应用的基础,分别侧重于用户...
### Servlet学习笔记精炼知识点 #### 一、Servlet初始化与加载机制 1. **Servlet注册与实例化**:在Web应用中,一个Servlet的生命周期始于它的注册与实例化过程。通常,这一过程是在Web服务器启动时,根据`web.xml...
第四篇为“数据库访问技术”,主要讲述JDBC技术及JSP和Servlet如何通过JDBC访问数据库,以及如何改进数据库的访问和目前流行的Hibernate、iBATIS及Spring集成访问的支持;第五篇为“标签语言和表达式语言”,主要...
对于初学者,可以通过以下途径学习JSP-Servlet技术: 1. **官方文档**:Oracle提供了详细的Java Servlet和JSP规范文档。 2. **在线教程**:网站如W3School、教程网等提供了丰富的教程和示例代码。 3. **书籍**:如...
这篇学习笔记将深入探讨这两个概念,以及它们在实际开发中的应用。 Servlet是Java编程语言的一个接口,由Sun Microsystems(现为Oracle)定义,它允许Java代码与HTTP服务器交互。Servlet主要负责处理客户端的请求并...
**JSP(JavaServer Pages)和Servlet是Java Web开发中的两个核心技术,它们在构建动态Web应用程序方面发挥着关键作用。** ### JSP简介 JSP是Java平台上的一个服务器端技术,它允许开发者将HTML代码与Java代码混合...
### Servlet 学习笔记 #### 一、Servlet 创建与生命周期 **Servlet** 是 Java Web 开发中的一个核心组件,主要用于处理客户端发送到服务器的 HTTP 请求,并返回相应的响应。Servlet 的创建与生命周期是学习 Java ...
### jsp第七章学习笔记 #### 一、Servlet概述与生命周期 Servlet是一种运行在服务器端的Java程序,主要用于处理客户端的HTTP请求,并做出相应的响应。Servlet技术是Java Web开发的基础,它提供了一种通用、可扩展...
Java学习笔记是专门为Java初学者设计的一套详尽的学习资源,旨在帮助新手快速掌握这门广泛使用的编程语言。这份笔记涵盖了从基础概念到高级特性的全面内容,是学习和复习Java知识的理想工具。 1. **Java简介** ...
核心Java、JSP(JavaServer Pages)和Servlet是Java Web开发中的基础技术,这三者在Web应用程序的构建中扮演着重要角色。这份压缩包包含了关于这三个主题的详细笔记,对于学习和理解这些技术有着极大的帮助。 首先...