资源预览内容
第1页 / 共40页
第2页 / 共40页
第3页 / 共40页
第4页 / 共40页
第5页 / 共40页
第6页 / 共40页
第7页 / 共40页
第8页 / 共40页
第9页 / 共40页
第10页 / 共40页
亲,该文档总共40页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第二讲 Servlet&JSP基础培训,博和利初级培训 开发技能,浏览器,浏览器与Web服务器的动态交互,提交按钮,点此Button将把FORM内的数据传送到服务器,各种输入控件,接受用户输入。,Method属性指定了数据传送方式,可以是GET或POST,GET方式将数据接在URL后面传送给服务器端程序,如:http:/url?name1=abc&name2=def POST方式将数据放在HTTP请求的请求头后面发送。,Servlet简介,Servlet是java语言的CGI实现,与传统的CGI和许多其他类似CGI的技术相比,Java Servlet具有更高的效率,更容易使用,功能更强大,具有更好的可移植性。 高效传统的CGI程序以进程方式运行,而Servlet以线程方式运行。 方便Servlet提供了大量的实用工具例程,例如自动地解析和解码HTML表 单数据、读取和设置HTTP头、处理Cookie、跟踪会话状态等。 功能强大 可以完成很多传统的CGI程序很难做到的事情。 可移植性好 Servlet API具有完善的标准。,Servlet基本结构,public class SomeServlet extends HttpServlet / 必须继承自HttpServlet public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException / 使用“request”读取和请求有关的信息(比如Cookies)和表单数据 / 使用“response”指定HTTP应答状态代码和应答头(比如指定内容类型,设置Cookie)PrintWriter out = response.getWriter(); / 使用 “out“把应答内容发送到浏览器public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException ,Servlet生命周期,服务器只创建每个Servlet的单一实例,每个用户请求都会引发新的线程。创建Servlet实例时,会调用init()方法,针对每个用户请求都会创建一个线程,该线程调用前面创建实例的service()方法,由service()方法依据接收到的HTTP请求的类型,调用相应的doXxx方法,比如doGet(),最后调用destroy()方法销毁。,Servlet工作原理,Web服务器,doGet()方法,doPost()方法,HTTP GET请求,HTTP POST请求,响应,响应,客户机,HttpServletRequest&HttpServletResponse,doGet 和 doPost 方法的参数都是 HttpServletRequest 和 HttpServletResponse 对象。其中HttpServletRequest 对象代表了客户端的请求,servlet 通过这个对象获得客户 端 的 请 求 数 据; HttpServletResponse对象代表了servlet对客户端请求的响应,sevlet用这个对象向客户端返回数据。,HttpServletRequest&HttpServletResponse, 通过HttpServletRequest对象获取客户请求数据:getParameter()方法 protected void doGet(HttpServletRequest request, HttpServletResponse response) String str = request.getParameter(“name“); / 参数为FORM内某输入控件的名字 通过HttpServletResponse对象向客户端返回数据 protected void doGet(HttpServletRequest request, HttpServletResponse response) PrintWriter out = response.getWriter(); / 获取输出流对象out.println(“); / 通过输出流对象向客户端返回HTML文本,Servlet处理用户请求简介,单个值的读取request.getParameter(“Param1”); 多个值的读取request.getParameterValues(); 参数名的查找request.getParameterNames();request.getParameterMap(); 原始表单数据的读取以及对上载文件的分析request.getReader();request.getInputStream(); 多字符集输入的读取request.setCharacterEncoding(“utf-8”);,Servlet设置响应报头,普通设置方法 setHeader(String headerName, String headerValue)HttpServletResponse提供的方法 setDateHeader(String header, long milliseconds) setIntHeader(Stirng header, int headerValue) setContentType(String mimeType) setContentLength(int length),会话跟踪,HTTP是无状态协议,它没有提供内置方法来对一系列由相同用户发起的请求进行识别。客户程序每次读取Web页面,都打开到Web服务器的单独的连接,并且服务器也不自动维护客户的上下文信息。因此如果Web应用程序如果想要为来自同一个用户的请求保留状态或数据的话(比如购物车程序,用户会在不同网页间切换来选购商品,因此要求Web应用程序必须要能记住一个用户选购的所有商品),这一般可以通过以下几个方法实现: Cookie URL重写 隐藏表单项目,解决HTTP无状态的方法,Cookiecookie是是一些由服务器发向浏览器并且还能由浏览器读回来的小段的文本信息。Web服务器将它发送到浏览器,之后在访问同一网站或域时,浏览器又将它原封不动的返回。一般用于记录用户名密码、根据用户的偏好定制站点、定向广告。cookie的内容主要包括:名字,值,过期时间,路径和域。 -域可以指定某一个域比如www.google.com。-路径就是跟在域名后面的URL路径 ,比如/news。,解决HTTP无状态的方法,Cookie代码样例Cookie userCookie = new Cookie(“uesr”, “uid1234”); userCookie.setMaxAge(60*60*24*265); /一年 response.addCookie(userCookie );,解决HTTP无状态的方法,URL重写 利用URL重写技术,每个可能被用户点击的URL都会被动态修改,为URL附加上一个标志本次会话的ID。采用这种方式时,客户程序在每个URL的尾部添加一些额外数据,用来表示当前的会话,服务器将这个标识符与它存储的用户相关数据关联起来。比如: http:/url/xxx?jsessionid=123,解决HTTP无状态的方法,隐藏的表单域 所谓隐藏表单项目指的是HTML表单上不在客户端上显示的项目,它们在提交表单时也被送到服务器端。我们可以利用这一机制来维护会话信息。在提交表单时,要将指定的名称和值自动包括在GET和POST数据中,隐藏域可以用来存储有关会话的信息。缺点:仅当每个页面都是由表单提交而动态生成时,才能使用这种方法。,Servlet的会话管理,HttpSession APIHttpSession API是一个基于Cookie和URL重写机制的高级会话状态跟踪接口:如果浏览器支持Cookie,则使用Cookie;如果浏览器不支持Cookie或者Cookie功能被关闭,则自动使用URL改写方法。Servlet开发者无需关心细节问题,也无需直接处理Cookie或附加到URL后面的信息,API自动为Servlet开发者提供一个可以方便地存储会话信息的地方。会话状态跟踪API在Servlet中使用会话信息是相当简单的,主要的操作包括:查看和当前请求关联的会话对象,必要的时候创建新的会话对象;查看与某个会话相关的信息;在会话对象中保存信息以及会话完成或中止时释放会话对象。,会话跟踪基础,常用api样例 HttpSession session = request.getSession(); session.setAttribute(“test”,”test”); String str = (String)session.getAttribute(“test”); session.removeAttribute(“test”);,JSP概述,JSP采用的是动态代码与静态HTML页面相结合的方式,JSP的语法内容放入在以“%”开始,以“%”结束的特殊标记之内。JSP页面文件通常以.jsp为扩展名。虽然从代码编写来看,JSP页面更象普通Web页面而不象Servlet,但实际上,JSP最终会被转换成正规的Servlet,静态HTML直接输出到和Servlet service方法关联的输出流。,JSP文件结构,.其他 HTML 语言其他 HTML 语言,JSP执行过程,*.jsp,*.java,*.class,执行,jsp parser,JSDK,servlet,servlet分析器,JSP执行过程,查找对应的JSP文件,是否存在,Y,N,是否是修改或创建,后第一次调用,Y,调用Jsp Parser将其,编译成Servlet程序,调用JSDK将对应的Servlet,程序编译成Servlet字节码,执行(若未载入则先载入),已有的对应的Java字节码,N,Client,Server,JSP语法概述,JSP原始代码中包含了JSP元素和Template data两类 Template data指的是JSP引擎不处理的部分,即标记以外的部分,例如代码中的HTML的内容等 ,这些数据会直接传送到客户端的浏览器。JSP元素则是指将由JSP引擎直接处理的部分,这一部分必须符合JSP语法,否则会导致编译错误。,JSP语法概述,脚本元素(Scripting Element)脚本元素用来在JSP中嵌入Java代码,它允许声明变量和方法,包含任意脚本代码和对表达式求值。这些Java代码将成为转换得到的Servlet的一部分。 指令(Directive)JSP指令是用作从JSP发送到JSP引擎上的一个信息。它们不向客户端产生任何输出,只是指示JSP引擎需要做什么,所有的指令都在整个JSP文件内有效。也就是说,一个指令影响整个JSP文件,并且只影响这个JSP文件。在标签中指令由标记。 动作(Action)动作用来引入现有的组件或者控制JSP引擎的行为。,JSP基础-注释,注释 或 这种注释发送到客户端,但不直接显示,在源代码中可以查到。这种注释不发送到客户端。,JSP基础-声明,声明语法:样例: berhely ,JSP基础-表达式,表达式语法:样例: berhely a=b=c=,JSP基础-脚本段,脚本段语法:样例: berhely,JSP基础- include指令,include 指令include指令的作用是向当前页中插入一个静态文件的内容。语法: 样例:The current date and time are 当JSP引擎把JSP文件转译成java文件时,会把当前JSP和被包含的JSP页面合并成一个新的JSP页面。当被包含的文件的内容发生变化时,则必须要重新将JSP页面转译成java文件才能看到更新后的内容。,
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号