版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第三章servlet编程,第三章Servlet编程,3.1.1 Servlet基础 3.1.2Servlet工作原理 Servlet的生命期 3.1.3Servlet编程-ServletAPI,3.0 附:Web编程基础,HTTP协议简介 HTML 静态网页与动态网页,URL:统一资源定位符,Uniform Resource Locator:确定某信息的位置 格式: :/:端口号 例子 : 5/zsjy.aspx 5/ telnet: /:70 ftp: //pub/www/doc,
2、HTTP协议(HyperText Transfer Protocol),超文本传输协议 事务处理由4个步骤组成: (1)客户端与服务器建立连接; (2)客户端向服务器提出请求; (3)如果请求被接受,则服务器送回响应,在响应中包括状态码和所需的文件; (4)客户端和服务器断开连接。,IP地址,识别Internet中主机及网络设备的唯一标识 表示方法:网络地址+主机地址,长度为4个字节(32bit),由3个用“.”分隔的十进制数组成,每个数不大于255,如22 A类:用于规模很大主机数目很多的网络 B类:用于中型到大型的网络 C类:用于小型本地网络(LAN) 思考:IPv
3、4 IPv6?,域名,DNS:域名服务器,为主机分配字符名称,即域名,并实现域名与IP地址的转换 如: com 商业组织 edu教育机构 gov政府部门 mil军事部门 net网络中心 org非盈利性组织 int国际组织,端口port,一台拥有IP地址的主机可以提供许多服务,比如Web服务、FTP服务、SMTP服务 如何区分服务:端口 网络上的服务:IP(域名) + 端口 :8080/ FTP:21,web:80,这些端口也可自己指定 01023:常用端口,绑定特定服务,固定的102465535之间的端口是动态端口,不固定分配。每个网络程序通信都要通过端口的,如QQ、BT、迅雷等,思考:,要唯
4、一标识网络中某主机上的一个运行的程序(进程)需要几个元素?,网络中的一个进程的唯一标识为:主机地址+进程地址(端口号),3.0.2HTML简介,HTML:超文本标记语言(Hyper Text Markup Language) WWW上的专用语言:描述页面内容和结构 HTML文档:它能独立于各种操作系统平台 扩展名为.html 或 .htm HTML文档的编写方法: (1)手工编写: 如记事本 (2)用可视化所见即所得的HTML编辑工具设计 Frontpage,dreamwaver (3)格式转换工具: 现有的其它格式文档(如WORD文档)转换成HTML文档。 (4)由Web服务器实时动态地生成
5、HTML文档 Jsp、aspx、servlet,HTML语法,Html文档是带有标记的文本文件 1.成对出现的标记 这是我的第一个的HTML文档 2.只有开始标志,没有结束标志 现在我开始HTML学习,这是第一次学习 3.标志嵌套 这是我的第一次学习 4.带有属性的标志 这是我的第一个HTML文档,2) HTML文档的结构, 窗口标题 ,向浏览器说明HTML版本,放在文档开头, MyHtml.html - This is my HTML page. ,索引,用于搜索工具搜索,说明所使用的css样式表,浏览器窗口标题头,正文,浏览器窗口标题头,索引,用于搜索工具搜索,浏览器窗口标题头,说明所使用
6、的css样式表,索引,用于搜索工具搜索,浏览器窗口标题头,正文,说明所使用的css样式表,索引,用于搜索工具搜索,浏览器窗口标题头,例:登录界面 P30, 提交表单数据 欢迎登录系统 用户名 密码 ,标题1,黑体,居中,表单,提交到getpostData.class ,方法是post,表格居中,占整个窗口的30%,边宽2,用属性设置,tr是表格一行,td是一个单元格 ,占一行的57%,用div排版, 输入框,类型是文本输入,控件名为username,,按钮,类型是submit按钮,控件名为Submit,按钮上显示的文本是”提交“,创建一个HTML文档 设置文档标题和其它在网页中不显示的信息 设
7、置文档的标题 最大的标题 黑体字 斜体字 加重文本(通常是斜体加黑体) 设置字体大小从1到7,颜色使用名字或RGB十六进制值 创建一个段落 将段落按左、中、右对齐 换行插入一个回车换行符 用来排版大块HTML段落,也用于格式化表 创建超文本链接 创建自动发送电子邮件的链接 创建一个表格 表格中的每一行 表格中一行中的每一个格子 设置表格头:通常是黑体居中文字 设置表格格子的水平对齐方(left, center,right,justify) 设置表格格子的水平对齐方式(left, center,right,justify) 创建表单 action=.接收数据的服务器的URL method=“.”
8、HTTP的方法(get,post)。其中get是被反对使用的 单行文本输入区域,size设置以字符串宽度 创建提交(submit)按钮 创建重置(reset)按钮,3.0.3静态网页与动态网页,静态网页: 纯静态:只包括单纯的文本或图像无法交互 如大学简介 URL的后缀是.htm、.html、.shtml、.xml 浏览器端交互式:加入Javascript 或Vbscript脚本代码 仍然是静态网页,它不需要Web服务器做任何工作 缺点: 无法支持后台数据库。 无法有效地对站点信息进行及时的更新。 无法实现动态显示效果 动态网页 在传统的静态页面中加入各种程序和逻辑控制,实现浏览器客户端和We
9、b服务器的动态信息交互 aspx、.jsp、 .asp、.php、.perl、.cgi 为后缀 如用户注册、用户登录、在线调查、用户管理、订单管理,静态网页工作原理,浏览器端,服务器端,编写web页,发出请求,定位html文件,浏览器处理html,返回html文件到浏览器,每个静态网页都是保存在服务器上的一个独立的文件,动态网页工作原理,接受请求,找到动态网页,发送网页,服务器端,执行程序代码 生成网页,浏览器端,动态网页的优势,动态网页: (1) 以数据库技术为基础 可以大大降低网站维护的工作量; (2) 可以实现更多交互功能 如用户注册、用户登录、在线调查、用户管理、订单管理等 (3)动态
10、网页是由服务器动态生成的 它实际上并不是事先写好的、独立存在Web服务器上的网页文件,只有当用户请求时服务器才动态生成一个网页,并返回一个完整的网页到客户端浏览器。,3.1 Servlet基础,Servlet(java服务器小程序):用java编写的服务器端程序,由服务器调用和执行的java类(字节码) 可动态生成web页面 Servlet同协议、平台无关 Servlet不是由命令行启动的,由包含JVM的web 服务器加载的,与传统Java应用程序相比较,不是从命令行启动。 而是由包含JVM的Web服务器进行加载。,Servlet,Java Servlet API,就是,Servlet对Web
11、 Server而言,Applet对Client而言,就像,Java平台对Servlet的支持,3.1.2 Servlet工作原理,Web浏览器通过HTTP提出请求。 Web服务器接收请求并将其发给Servlet。如果这个Servlet尚未 被加载,Web服务器将把它加载到Java虚拟机并且执行它。 3. Web容器将请求信息发往Servlet,Servlet将接收HTTP请求并执行某种处理。 4. Servlet将向Web服务器返回应答。 Web服务器将从Servlet收到的应答发送给客户端 服务器关闭或Servlet空闲超过一定时间,调用destroy()退出,3.Web容器将请求信息发往S
12、ervlet, Servlet 的生命周期,Servlet的生命周期开始于被装载到Servlet容器中,结束于被终止或重新装入时。分为三个阶段: 1.初始化阶段: Servlet的装载、实例化和初始化 第一次请求Servlet的时候,服务器中的Servlet容器动态装入Servlet,创建一个Servlet实例,调用Servlet的init()方法对Servlet实例初始化: Servlet容器启动时,自动加载 Servlet Servlet容器启动后,客户首次向Servlet发出请求。 Servlet的类文件被修改后,重新加载 注意: init只在Servlet创建时被调用,常
13、用来做一次性的初始化的工作。 Servlet被发来的第一个请求激活,然后继续运行于后台,以线程形式处理请求,速度非常快,直到Servlet被修改时才再次加载。 2 服务阶段; 容器接收到对此Servlet的请求,则调用Servlet的service()方法。 service()方法中调用doGet()或doPost()。 3.终止阶段 实例被销毁,通过调用Servlet的destory()方法来销毁Servlet,多个请求的处理,一个Servlet在同一时刻只有一个实例,并且它在Servlet的使用期间将一直保留。 为每个请求创建一个新的线程来处理客户端的请求,客户A,客户B,线程B,线程A,
14、Web容器,Servlet实例,Web服务器,必须注意线程的同步问题!,3.1.3 Servlet编程 Servlet API,Servlet API由两个Java包组成 javax.servlet 定义了类都所有的Servlet必须实现或扩展的接口或类。 javax.servlet.http 定义了采用HTTP协议进行通信的Httpservlet类。,包:javax.servlet接口:RequestDispatcher;Servlet;ServletConfig;ServletContext;ServletRequest;ServletResponse;SingleThreadModel。
15、所包含的类:GenericServlet;ServletInputStream;ServletOutputStream;ServletException;UnavailableException。包:javax.servlet.http接口: HttpServletRequest ; HttpServletResponse ; HttpSession ;HttpSessionBindingListener;HttpSessionContext。类:Cookie;HttpServlet;HttpSessionBindingEvent;HttpUtils。,Servelt编程相关接口及其关系,Ht
16、tpServlet,ServletConfig,HttpServletRequest,ServletException,RequestDispatcher,HttpSession,HttpServletResponse,ServletContext,配置信息,请求,意外情况,协作,会话管理,响应,运行环境信息,3.2第一个Servlet,新建web项目,2. 创建Servlet文件,3.为该项目创建部署文件web.xml,4.部署Sevlet程序,5.启动Glashfish-3,6.用IE打开网页,例:servlet 显示静态页面,新建web项目 名为SimpleServlet 创建Servl
17、et文件: 包名:com.servlet Servlet名称:First URL映射/First 自动生成First.java文件 (P24 程序3_1) doGet()或doPost()方法,分别来响应客户端发出的GET、POST 请求。开发人员可以分别覆盖这两个方法即可 Web服务器如何将浏览器中输入的URL http:/localhost:8080/SimpleServlet/Fist 自动映射为名为First的Servlet?是怎么通过URL找到相对应的Servlet的.class文件呢? 每个web程序都对应一个web应用的配置文件Web.XML,位于该项目的SimpleServle
18、t-Web-WEB-INF目录下 为该项目创建部署文件web.xml 部署Servlet程序 将web应用被部署到web服务器 5. 启动Glassfish-3,1)新建web项目 名为simpleServlet,文件新建项目java webweb应用程序,2)创建Servlet文件名为First,点击netbeans左侧项目导航栏,右键新建Servlet Servlet名为First 包名:com.servlet 生成了名为First.java文件 URL映射 /First,选中,这些会自动写入web.xml部署文件,将来可以通过http:/localhost:8080/SimpleServ
19、let/First来访问该servlet,自动生成的First.java,package com.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class Fi
20、rst extends HttpServlet public void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException response.setContentType(text/html); PrintWriter out = response.getWriter(); out.println(); out.println(); out.println( Servlet First); out.println( ); out
21、.print(HelloWorld!); /将上句改为页面上helloworld out.println( ); out.println(); out.close(); ,获得PrintWriter对象,能够向浏览器端写html语言,向浏览器端输出html语言,动态生成页面 注意是字符串形式“ ”,Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException processRequest(request, r
22、esponse); Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException processRequest(request, response); Override public String getServletInfo() return Short description; ,问题:servlet的代码生成了,但是在服务器端,浏览器端怎么通过URL能访问的到呢?http:/localhost:808
23、0/SimpleServlet/First web配置文件web.xml,3)为该项目自动创建的部署文件web.xml,创建web项目时自动生成了web配置文件web.xml,对Servlet所对应的URL地址进行了映射/First,web.xml:在web应用加载的自动加载, First com.servlet.First First /First 30 ,http:/localhost:8080/SimpleServlet/First,4)生成和部署Servlet程序,生成web应用自动被打包 项目窗口,选中SimpleServlet,右键生成 则输出窗口提示生成SimpleServlet
24、.war包 部署 项目窗口,选中SimpleServlet,右键部署 Glassfish自动被启动 注:若重新修改源程序后,需要再次运行部署 重新发布到服务器上 5)启动Glassfish 上述步骤运行部署和运行时,Glassfish自动运行 或服务应用服务器Glassfish右键启动,6.在IE中运行,6.在IE中,输入 http:/localhost:8080/SimpleServlet/First 出现Servlet中的helloworld,附:【可能出现的汉字编码问题】,若netbeans某个版本出现了汉字乱码,则查看一下项目属性,编码改为gb2312,Servlet:处理请求并进行响
25、应,客户端向服务器端发送一个请求,服务器端获得该请求后,处理请求并把处理的结果返回到客户端,这个过程建立在HTTP协议“请求-响应”模式基础上。 在服务器端,Servlet程序的运行需要两个基本的Servlet对象: (1)Servlet的请求对象:包含客户端请求的细节,如请求的方法,请求的文件头等。 (2)Servlet的响应对象:包含服务器端响应时的细节,如响应的文件类型,响应的编码等。,HttpServletRequest接口 继承了ServletRequest接口 ServletRequest接口封装了客户请求信息,如客户请求方式、参数名和参数值、客户端正在使用的协议,以及发出客户请求
26、的远程主机信息等。它还为Servlet提供了直接以二进制数方式读取客户请求数据流的ServletInputStream HttpServletRequest可以为Servlet提供更多的与HTTP协议相关的数据,如提供了读取HTTP Head信息的方法,获取Session和Cookie的方法。,getAttributeNames()获取请求中所有属性名字的集合 getAttribute(String name)获取name指定的属性值 setAttribute(String name,Object value)设置属性name的值为value getCookies()获取客户端发送的Cooki
27、e getSession()获取和客户端相关的Session,如果没有给客户端分配Session,则返回null getSession(boolean create)获取和客户端相关的Session,如果没有给客户端分配Session,则创建一个Session并返回 getParameter(String name)获取请求中的参数,该参数是由name指定的 getParameterValues(String name)获取请求中的参数值数组,该参数值是由name指定的 getCharacterEncoding()获取请求的字符编码方式 getContentLength()获取请求体的有效长度
28、 getInputStream()获取请求的输入流 getMethod()获取发送请求的方式,如GET、POST getParameterNames()获取请求中所有参数名字的集合 getRemoteAddr()获取客户端的IP地址 getRemoteHost()获取客户端的名字 getServerName()获取接受请求的服务器的名字 getServletPath()获取请求的Servlet的URL(不包含查询字符串),HttpServletResponse接口 继承自ServletResponse接口 ServletResponse接口封装了响应客户请求的方法,如设置响应的内容类型,设置响
29、应的编码方式,获取输出流ServletOulputStream HttpServletResponse可以为Servlet提供更多的与HTTP协议相关的方法,如提供了设置响应头,添加Cookie等。,addCookie(Cookie cookie)将指定的Cookie加入到当前的响应中 addHeader(String name,String value)将指定的名字和值加入到响应的头信息中 containsHeader(String name)返回一个布尔值,判断响应的头部是否被设置 encodeURL(String url)对指定的URL进行编码 sendError(int sc)使用指定
30、状态码发送一个错误到客户端 sendRedirect(String location)重定向到其他页面 setHeader(String name,String value)用给出的名字和值设置响应的头部 setStatus(int sc)给当前响应设置状态码 setContentType(String ContentType)设置响应的MIME类型,3.3 处理客户端请求,静态页面:前面的例子是servlet显示静态页面 动态页面:servlet根据浏览器端请求进行响应 如 login 账号,密码 浏览器端以表单方式提交数据 GET:数据附加在URL后面 POST:数据由标准的输入设备读入
31、服务器端自动处理上述两种方法,只需调用HTTPServletRequest的getParameter(变量名) 变量名区分大小写,例:登录页面 效果,1.login.html :接受用户账号、密码输入 项目SimpleServlet : 右键 新建html名为login.html 2.负责处理用户输入的Servlet: 名称: GetPostData 对应的URL: /GetPostData, 用户名 密码 ,login.html,public class GetPostData extends HttpServlet public void processRequest(HttpServle
32、tRequest request, HttpServletResponse response) out.println( “username:”+request.getParameter(“username”)+“br”+ password:+request.getParameter(password)+“br+ public void doPost(HttpServletRequest request, HttpServletResponse response) processRequest(request,response); , GetPostData com.servlet.GetPo
33、stData GetPostData /GetPostData ,web.xml,GetPostData.java,requset对象携带 username,“zhang”, password,”123”,1)login.html :,接受用户账号、密码输入 项目SimpleServlet : 右键 新建html名为login.html, 提交表单数据 欢迎登录系统 用户名 密码 ,切记,否则汉字显示为乱码,2)servletGetPostData,Servlet的映射的/GetPostData一定要与前面login.htm的action的名字一致 否则web服务器找不到相应的servlet,
34、import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class GetPostData extends HttpServlet public void processRequest(H
35、ttpServletRequest request, HttpServletResponse response) throws ServletException, IOException PrintWriter out=response.getWriter(); out.println( n+ +getpostdata+ n+ “username:”+request.getParameter(“username”)+“br”+ /书上/n改为 password:+request.getParameter(password)+“br+ +n+ + ); out.close(); public v
36、oid doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException processRequest(request,response); public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException processRequest(request,response); ,重新部署SimpleSe
37、rvlet,在项目导航栏 点击SimpleServlet右键部署 或者直接点击login.htm右键运行文件 均会自动启动Glassfish-3,运行,输入:http:/localhost:8080/SimpleServlet/login.html,汉字显示为乱码的问题,怎么是乱码,不是中文用户名? 是request传递的时候需要中文编码 GetPostData显示生成页面时也需要中文编码,login.html中 ,request传递参数,request传递参数,2.request传递的时候需要中文编码 3.GetPostData显示生成页面时也需要中文编码,1.Login.html设置显示中
38、文,public class GetPostData extends HttpServlet public void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException request.setCharacterEncoding(GB2312); response.setContentType(text/html;charset=GB2312); PrintWriter out=response.getWriter(); out.
39、println( n+ “username:”+request.getParameter(“username”)+“br”+ /书上/n改为 password:+request.getParameter(password)+“br+ 。,GetPostData.java设置接受中文参数,并生成显示中文页面,Request 传递参数,显示正常!,3.4 会话管理,Http是无状态协议,客户端每打开一次web页面,就会与服务器建立一次新的连接 (每一次新的连接,都经历如下请求),服务器不记录任何关于客户的信息,带来的问题,会话跟踪技术,3.6.1 使用Cookie进行会话跟踪,Cookie是一小块
40、嵌到Http请求和响应中的数据。 Web服务器将cookie嵌入响应的头部,而浏览器的同一客户端则在以后的请求中都将在头部携带同样的cookie Cookie由浏览器存在客户端,常为一个文本文件 Cookie中添加与会话相关的内容,实现会话跟踪 Cookie包含可选的注释、版本号及最长生命周期(如商城,超过30分钟,cookie失效。) Cooke的争议:可能暴露隐私 如你的账号名、密码每次保存在客户端,自动登录,所以大部分浏览器都关闭cookie功能使用URL重用跟踪会话,Cookie的使用方法,(1)用Cookie类,和request.getCookies()获得当前请求中的所有Cooki
41、e (2)用Cookie.getValue.getName()等方法显示Cookie信息 找有无你想要的cookie (3)若没有,则创建Cookie Cookie(String CookieName,Sting CookieValue) Cookie的名字 Cookie的值 例1:创建cookie Cookie cookie=new Cookie(“visit Time”,”1”); /(例3-12)作为网页的计数器,每次网页打开的时候更改 如int value=Integer.parseInt(cookie.getValue()+1; 例2:用cookie保存用户名cq Cookie co
42、okie=new Cookie(“ServletStudy”,”cq”); /若没有对cookie的值的修改,则每次刷新页面,用户名不变,(1)用Cookie类,和request.getCookies()获得当前请求中的所有Cookie (2)用Cookie.getValue和 getName()等方法显示Cookie信息 找有无你想要的cookie (3)若没有,则创建Cookie Cookie(String CookieName,Sting CookieValue) Cookie的名字 Cookie的值 例1:创建cookie Cookie cookie=new Cookie(“visit
43、 Time”,”1”); /(例3-12)作为网页的计数器,每次网页打开的时候更改 如int value=Integer.parseInt(cookie.getValue()+1; 例2:用cookie保存用户名cq Cookie cookie=new Cookie(“ServletStudy”,”cq”); /若没有对cookie的值的修改,则每次刷新页面,用户名不变,(4)设置cookie cookie.setPath(request.getcontexPath); cookie.setMaxAge(maxAge)/设置cookie的生命周期 (5)添加cookie到响应报文头 respo
44、nse.addCookie(cookie); (6)向浏览器端输出HTML文本,用cookie.getValue()获得cookie的值,并写到浏览器上 java.io.PrintWrite out=response.getWriter(); out.println(“欢迎您第”+cookie.getValue()+”访问本页面”);,例3-12,package com.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import ja
45、vax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.Cookie; /加入Cookie所在的类 public class CookieServlet extends HttpServlet public CookieServlet() super(); public void destroy() super.destroy(); / Just puts
46、 destroy string in log public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException Cookie cookie=null; /获取请求相关的Cookie Cookie cookies=request.getCookies(); if(cookies!=null) /如果存在,其值加1 for(int i=0;icookies.length;i+) if(cookiesi.getName().equals(Vi
47、sitTimes) /获得名为visitTime的cookie所记录的值 /(即访问页面的次 数),并将值增加1 int value=Integer.parseInt(cookiesi.getValue()+1; /将更改过的cookie的值重新设置回cookie cookiesi.setValue(Integer.toString(value); response.addCookie(cookiesi); cookie=cookiesi; break; ,if(cookie=null) /该cookie不存在 int maxAge=-1; cookie=new Cookie(VisitTim
48、es,1 ); cookie.setPath(request.getContextPath(); cookie.setMaxAge(maxAge); response.addCookie(cookie); response.setContentType(text/html;charset=gb2312); /一定别忘了设编码gb2312,否则页面汉字地方显示乱码JSP是pageEncoding PrintWriter out = response.getWriter(); out.println(); out.println(); out.println( Cookie跟踪会话); out.p
49、rintln( ); out.print ( 你好 ); out.println(欢迎你第+cookie.getValue()+次访问本页面); out.println( ); out.println(); out.flush (); out.close(); ,不断手工刷新,访问次数变化,3.6.2会话跟踪技术2URL 重写,URL重写是在URL地址后面加?隔开,如果有多个参数,用 使用URL重写技术来传递会话信息时,可在跳转的目标页面用request.getParameter()来获取浏览器端的表单数据,就像直接获取表单的数据一样,3.6.3使用HttpSession对象跟踪会话,Http
50、Session接口实际上是建立在cookie和URL重写的基础上的 获取会话对象 request.getSession(true) 2.会话中获取属性 session.getAttribute(“会话属性信息”) 3.将属性信息存入会话 session.setAttribute(“会话属性信息”, “属性值”) 4.向浏览器输入html时,获得本session的ID seesion.getID(),例3-15 HitCounter,例如:使用HttpSesssion对象来存储当前会话开始的时间、上次的访问时间,以及当前会话中用户访问本站点的次数,import javax.servlet.Ser
51、vletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.sql.Date; import java.text.DateFormat; public class HitCounter extends HttpServlet static final String
52、 COUNTER_KEY=Counter; public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException /获取会话对象 HttpSession session=request.getSession(true); /从会话中获取属性 int count=0; Integer i=(Integer)session.getAttribute(COUNTER_KEY); /推荐使用Integer类,因为如果该计数器不存在,则返回null对象
53、,而int基本数据类型无法判别,会话数据使用servlet容器存储的,会话属性应具有唯一性, 所以每个会话属性应定义为static final类型,/如果计数器已经存在,则增加1 if(i!=null) count=Value()+1; /将这个整型对象转换成int /将属性信息存入会话 session.setAttribute(COUNTER_KEY, count); Date sessionCreate=new Date(session.getCreationTime(); Date sessionlastAccessed=new Date(session.getLastAcce
54、ssedTime(); DateFormat d= DateFormat.getDateInstance(); response.setContentType(text/html;charset=gb2312); PrintWriter out = response.getWriter(); out.println(); out.println(); out.println( 会话计数器); out.println( ); out.print( 你的会话ID+session.getId()+); out.println(会话创建的时间:+d.format(session.getCreation
55、Time()+); out.println(会话上次访问的时间:+d.format(session.getLastAccessedTime()+); out.println(会话间访问次数:+(Integer)session.getAttribute(COUNTER_KEY)+); out.println( ); out.println(); out.flush(); out.close(); ,会话属性名,属性值,用会话实现购物车(作业)P53,2个Servlet: 1)水果订购的订单catalog.java 退出应用前,可以多次订购,购物车(内的商品数量)保存在session中,可以累计商
56、品数量, 2)购物车结算cart.java,1.首次调用该页面时,购物车cart不存在, 创建购物车,并存入session 用hash表存储购物车cart cart=new HashMap(); 并置几种商品均为0 cart.put(“apple”,0); 在session对象新建cart属性,用于存储购物车 Session.setAttibute(“cart”,cart); 2.更新购物车 若cart存在,则从requset中获得订单页面录入 的商品的数量,并更新购物车,1.呈现订单页面 接受用户的输入,使用session控制,使之与购物车结算页面为一个session内 session.ge
57、tAttribute(“cart”),catalog.jsp, 简单购物车 欢迎来到开心水果店购物 种类单价数量 苹果5.5 香蕉4.5 葡萄3.6 ,package com.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.ht
58、tp.HttpServletResponse; import javax.servlet.http.*; import java.util.HashMap; public class CartServlet extends HttpServlet protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException response.setContentType(text/html;charset=gb2312); PrintWriter out = response.getWriter(); HttpSession session=request.getSession(); HashMap cart=(HashMap)session.getAttribute(cart); if(cart=null) cart=new HashMap(); cart.put(apple,0); cart.put(banan
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 通信基站电源安装合同
- 医院接送汽车包车合同
- 学校门窗更换合同
- 互联网农业公司网线安装服务协议
- 植物园消防给排水施工协议
- 庭院宠物聚会租赁合同
- 2024年软件开发与许可合同
- 重庆艺术工程职业学院《精细木工创作与实践》2023-2024学年第一学期期末试卷
- 二零二五年度企业内部IT系统升级改造合同
- 二零二五年度集体房屋买卖合同配套金融服务协议2篇
- 2024股权融资计划
- 2025北京昌平初二(上)期末数学真题试卷(含答案解析)
- 西式面点师试题与答案
- 广东省广州市海珠区2023-2024学年九年级上学期期末语文试题(答案)
- 小区智能化系统工程施工组织设计方案
- 单位内部治安保卫制度
- 【8物(科)期末】合肥市蜀山区2023-2024学年八年级上学期期末物理试题
- GB/T 44990-2024激光熔覆修复层界面结合强度试验方法
- ps经典课程-海报设计(第六讲)
- 钢结构连廊专项吊装方案(通过专家论证)
- 50MWp渔光互补光伏电站项目锤桩施工方案
评论
0/150
提交评论