版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Servlet,背景知识,常用的Web服务器 IIS Apache Tomcat 通常的动态网页技术 CGI (Common GateWay Interface) API常用的有(NSAPI,ISAPI) ASP(Active Server Page) PHP(Personal Home Page) JSP/Servlet (Java Server Page),LAMP,tomcat启动与停止,startup shutdown catalina start catalina stop catalina debug 调试错误的时候 run exit help 设置环境变量JAVA_HOME sh
2、utdown.bat小心使用,tomcat目录结构,bin: 存放各种平台下启动和关闭Tomcat的脚本文件。 startup.bat是windows下启动tomcat的文件, shutdown.bat是关闭tomcat的文件。 common: 在common目录下的lib目录,存放Tomcat服务器和所有web应用都能访问的JAR。 shared: 在shared目录下的lib目录,存放所有web应用能访问的,但Tomcat不能访问的JAR。 server: 在server/webapps目录中,存放Tomcat自带的两个APP-admin和manager应用,来管理Tomcat-web服务
3、用的。 work : Tomcat把各种由jsp生成的servlet文件放在这个目录下。 temp : 临时活页夹,Tomcat运行时候存放临时文件用的。 logs : 存放Tomcat的日志文件 webapps: web应用的发布目录,把 java开发的web站点或war文件放入这个目录下就可以通过tomcat服务器访问了。 conf : Tomcat的各种配置文件,最重要的是 server.xml.,Tomcat配置文件,conf/server.xml服务器的主配置文件 conf/web.xml定义所有Web应用的配置 (缺省的Servlet定义和MIME类型定义) conf/tomcat
4、-user.xml 定义了tomcat用户的信息(用于权限与安全),conf/server.xml,顶层类元素: 位于整个配置文件的顶层, ; 连接器类元素Connectors : 客户和服务(容器类元素)间的通讯接口。接受客户请求,返回响应结果; 容器类元素Containers: 处理客户请求并且生成响应结果,包含3个: 嵌套类元素Nested Components: 可以加入到容器中的元素,包括: 等 一个包含一个或多个,一个包含唯一一个和一个或多个,多个 共享一个;一个包含多个,每个 定义一个虚拟主机,包含一个或多个web应用; 元素是代表一个在虚拟主机上运行的Web应用。 Please
5、 note that for tomcat 5.x, unlike tomcat 4.x, it is NOT recommended to place elements directly in the server.xml file. Instead, put them in the META-INF/context.xml directory of your WAR file or the conf directory as described above.,什么是MIME,Multipurpos Internet Mail Extension 指明白传送内容的格式 最早用于邮件附件,se
6、rver.xml的层次结构, ,HTTP协议基础,HTTP(Hypertext TransferProtocol, 超文本传输协议) HTTP是以明文方式发送数据的 用于从WWW服务器传输超文本到本地浏览器的传输协议。 HTTP协议是以TCP/IP为基础的高层协议。 现在广泛使用的版本HTTP/1.1,HTTP协议基础,GET /latest.html HTTP/1.1Host: Content-Type: text/html空行 POST /servlet/serv HTTP/1.1Host: Content-Type: application/x-www-form-urlencodedCo
7、ntent-Length: 32username=billgates 重写必须得super.init(config) 不然不能使用this.getServletConfig 当然也就不能用getInitParameter(); 我们只需要重写init();,Servlet编程接口,GenericServlet是所有Servlet的鼻祖 用于HTTP的Servlet编程都通过继承 javax.servlet.http.HttpServlet 实现 请求处理方法:(分别对应http协议的7种请求)1、doGet响应Get请求,常用2、doPost响应Post请求,常用3、doPut用于http1.
8、1协议4、doDelete用于http1.1协议5、doHead 仅响应Get请求的头部。6、doOptions用于http1.1协议7、doTrace用于http1.1协议 实例的个数:在非分布的情况下,通常一个Servlet在服务器中有一个实例,示例:使用doGet和doPost方法处理请求,要求:编写一个带有doGet和doPost方法的Servlet 目的:掌握基本的Servlet请求处理技术 要点:public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IO
9、Exceptionpublic void doPost(HttpServletRequest req, HttpServletResponse res)throws ServletException,IOException 读取指定的参数:ThreeParams.html/ThreeParams.java 读取所有的参数:ShowParameters.java/ShowParametersForm.html 获取表单信息 通过HttpServletRequest的getParameter()方法来获得客户端传递过来的数据 getParameter()方法返回一个字符串类型的值 getParam
10、eterNames()返回Enumeration类型的值,getParameterValues()返回一个字符串数组,不要通过本地文件访问,ThreeParams.java,ShowParameters.java,HTTP的状态处理,HTTP是无状态 有状态:Server知道Client以前在我这儿做过什么事儿,处理Cookie,Http协议的无连接性要求出现一种保存C/S间状态的机制 Cookie:保存到客户端的一个文本文件,与特定客户相关 Cookie以“名-值”对的形式保存数据 创建Cookie:new Cookie(name,value) 可以使用Cookie 的setXXX方法来设定
11、一些相应的值 setName(String name)/getName() setValue(String value)/getValue() setMaxAge(int age)/getMaxAge() 利用HttpServletResponse的addCookie(Cookie)方法将它设置到客户端 利用HttpServletRequest的getCookies()方法来读取客户端的所有Cookie,返回一个Cookie数组 设置Cookie SetCookies.java 读取Cookie ShowCookies.java,Web上保持状态的手段:cookie session appli
12、cation persistence,1:服务器可以向客户端写内容 2:只能是文本内容 3:客户端可以阻止服务器写入 4:只能拿自己webapp写入的东西 5:Cookie分为两种 属于窗口/子窗口(放在内存中的) 属于文本(有生命周期的) 6:一个servlet/jsp设置的cookies能够被同一个路径下面或者子路径下面的servlet/jsp读到 (路径 = URL)(路径 != 真实文件路径),会话跟踪,Session 在某段时间一连串客户端与服务器端的“交易” 在Jsp/Servlet中,如果浏览器不支持Cookie,可以通过URL重写来实现,就是将一些 额外数据追加到表示会话的每个
13、URL末尾,服务器在该标示符与其存储的有关的该会话的数据之间建立关联。如hello.jsp?jsessionid=1234 可以通过程序来终止一个会话。如果客户端在一定时间内没有操作,服务器会自动终止会话。 通过HttpSession来读写Session 规则 如果浏览器支持Cookie, 创建Session的时候会把SessionID保存在Cookie里 如果不支持Cookie, 必须自己编程使用URL重写的方式实现Session response.encodeURL() 转码 URL后面加入SessionId Session不象Cookie拥有路径访问的问题 同一个application下
14、的servlet/jsp可以共享同一个session, 前提示同一个客户端窗口.,97923429349237293472,97923429349237293472,HttpServletRequest中的Session管理方法,getRequestedSessionId():返回随客户端请求到来的会话ID。可能与当前的会话ID相同,也可能不同。 getSession(boolean isNew):如果会话已经存在,则返回一个HttpSession,如果不存在并且isNew为true,则会新建一个HttpSession isRequestedSessionIdFromCookie():当前的S
15、ession ID如果是从Cookie获得,为true isRequestedSessionIdFromURL():当前Session ID如果是由URL获得,为true isRequestedSessionIdValid():如果客户端的会话ID代表的是有效会话,则返回true。否则(比如,会话过期或根本不存在),返回false HttpSession的常用方法 getAttributeNames()/getAttribute() getCreateTime() getId() getMaxInactiveInterval() invalidate() isNew() setAttribut
16、e() setMaxInactivateInterval(),SessionInfoServlet.java ShowSession.javaURLSession.java,Session总结,服务器的一块内存(存key-value) 和客户端窗口对应(子窗口)(独一无二) 客户端和服务器有对应的SessionID 客户端向服务器端发送SessionID的时候两种方式: cookie(内存cookie) rewriten URL 浏览器禁掉cookie,就不能使用session(使用cookie实现的session) 如果想安全的使用session(不论客户端是否禁止cookie),只能使用U
17、RL重写(大大增加编程负担),所以很多网站要求客户端打开cookie,Application,用于保存整个WebApplication的生命周期内都可以访问的数据 在API中表现为ServletContext 通过HttpServlet的getServletContext方法可以拿到 通过ServletContext的 get / setAttribute方法取得/设置相关属性 TestServletContext.java,Servlet中的请求转发,RequestDispatcher接口对象允许将请求转发到其他服务器资源 通过RequestDispatcher的forward(HttpSe
18、rvletRequest,HttpServletResponse)方法可以将请求转发 通过ServletContext的getRequestDispatcher(String url)方法来获得RequestDispatcher对象,并且指定转发的目标url资源 可以通过HttpServletRequest的setAttribute(String name,String value)来设置需要传递的参数,然后在代理servlet中就可以使用HttpServerRequest的getAttribute(String name)来获得对应的值,数据库处理以及在Servlet中使用Bean,广义ja
19、vabean = 普通java类 狭义javabean = 符合Sun JavaBean标准的类 在Servlet中使用Bean和在通常程序中使用Bean类似 属性名称第一个字母必须小写,一般private,比如:private productId 一般具有getters and setters 要具有一个参数为空的构造方法 但Bean不应具有GUI表现 一般是用来实现某一业务逻辑或取得特定结果 示例: 连接数据库 ShowRs.java ShowRsUseBean.java,如何掌握Servlet,创建Servlet 从HttpServlet继承 重写doGet / doPost方法 在we
20、b.xml中配置 servlet生命周期 Cookie / Session / Application的概念 请求转发 使用javabean,Filter and Listener,Servlet的多线程机制,Servlet体系结构是建立在Java多线程机制之上的,它的生命周期是由Web容器负责的。 当客户端第一次请求某个Servlet时,Servlet 容器将会根据web.xml配置文件实例化这个Servlet类。当有新的客户端请求该Servlet时,一般不会再实例化该Servlet类,也就是有 多个线程在使用这个实例。 Servlet容器会自动使用线程池等技术来支持系统的运行,JSP,JS
21、P简介,JSP-Java Server Pages 拥有servlet的特性与优点(本身就是一个servlet) 直接在HTML中内嵌JSP代码 JSP程序由JSP Engine先将它转换成Servlet代码,接着将它编译成类文件载入执行 只有当客户端第一次请求JSP时,才需要将其转换、编译 优点: 优良的性能优于CGI,PHP,ASP 平台无关性操作系统无关,Web服务器无关 可扩展性tag的扩展机制,简化页面开发,HelloWorld.jsp,http:/xxx/test/HW.jsp,HW.jsp,java class,JSP编程基本语法,JSP传统语法 Declaration Scri
22、ptlet Expression Comment Directives Action动作指令 内置对象 JSTL JSF,JSP编程-Declaration,基本语法: 说明:在此声明的变量、方法都会被保留成唯一的一份,直到JSP程序停止执行 例: ,AccessCounts.jsp,Scriptlet,基本语法: 可以放入任何的Java程序代码 例: ,注释格式: ,BGColor.jsp,表达式,基本语法: =后面必须是字符串变量或者可以被转换成字符串的表达式 不需要以;结束 只有一行 例: ,Expressions.jsp,Directive,Directive(编译指令)相当于在编译期
23、间的命令 格式: 常见的Directive: page include taglib,Directive-page,指明与JSP Container 的沟通方式 基本格式: ,TestDirective.jsp,TestErr.jsp / ErrPage.jsp 读视频,Directive-include,将指定的JSP程序或者HTML文件包含进来 格式: JSP Engine会在JSP程序的转换时期先把file属性设定的文件包含进来,然后开始执行转换及编译的工作。(原封不动的把文件的代码copy到该位置,然后进行转换和编译,只生成一个java和class) 限制: 不能向fileURL中传递
24、参数 不能abc.jsp?user=aaa,TestBar.jsp/TitleBar.jsp,Action,Action(动作指令)在运行期间的命令 常见的: jsp:useBean jsp:setProperty jsp:getProperty jsp:include jsp:forward jsp:param jsp:plugin 嵌入applet,jsp:include/jsp:param,用于动态包含JSP程序或HTML文件等 除非这个指令会被执行到,否则它是不会被Tomcat等JSP Engine编译。 格式: jsp:param用来设定include文件时的参数和对应的值 例如:
25、date.jsp/include.jsp Compute.html/Compute.jsp/divide.jsp/multiply.jsp 和编译指令include的区别 include编译指令是在JSP程序的转换时期就将file属性所指定的程序内容嵌入,然后再编译执行;而include指令在转换时期是不会被编译的,只有在客户端请求时期如果被执行到才会被动态的编译载入 Include不能带参数, 而可以 动态包含的文件和被包含文件用的是同一个request对象,jsp:forward / jsp:param,用于将一个jsp的内容传送到page所指定的JSP程序或者Servlet中处理(URL
26、) 格式: 用于指定参数和其对应的值 例如: test.jsp forward.jsp / forforward.jsp forward1.jsp / forforward1.jsp(with parameters) Forward的页面和forward到的页面用的是同一个request 与此相对应的是 response.sendRedirect,与response.sendRedirect的区别, 使用同一个request forward后的语句不会继续发送给客户端 速度快 服务器内部转换, 可以传参数 response.sendRedirect 是不同的request send后的语句会继
27、续执行,除非return 速度慢 需要到客户端的往返,可以转到任何页面 可以传参数,直接写在url后面,jsp:useBean,通过jsp:useBean,可以在JSP中使用定义好的Bean Bean的基本要素: 必须要有一个不带参数的构造器。在JSP元素创建Bean时会调用空构造器 Bean类应该没有任何公共实例变量,也就是说,不允许直接访问实例变量,变量名称首字母必需小写 通过getter/setter方法来读/写变量的值,并且将对应的变量首字母改成大写 基本用法: test.jsp/CounterBean.java 不要使用裸体类(规范要求),jsp:useBean(con.),jsp:
28、useBean各项参数含义: id:对象实例名称 scope:Bean作用的范围,默认为page,对整个jsp页面有效 class:Bean类名称(全名) type:Bean实例类型,可以是本类,或其父类,或实现的接口,默认为本类 Scope各项参数的意义: page:仅涵盖使用JavaBean的页面 (PageBean.jsp/CounterBean.java) request:有效范围仅限于使用JavaBean的请求 (RequestBean.jsp/RequestBean2.jsp/CounterBean.java) session:有效范围在用户整个连接过程中(整个会话阶段均有效) (
29、SessionBean.jsp/Session2.jsp/CounterBean.java) application:有效范围涵盖整个应用程序。也就是对整个网站均有效 (Application.jsp/Application2.jsp/CounterBean.java),jsp:useBean(con.),jsp:setProperty的格式: 相当于beanName.setPropertyName(value)方法调用(setXxx()方法) jsp:getProperty的格式: 相当于beanName.getPropertyName()方法调用(getXxx()方法),jsp:useBe
30、an(con.),建立表单参数和Bean属性之间的关联 通过param指定表单元素的名称,通过perperty指定对应的Bean属性名称,由此建立这两个变量的关联 (SaleEntry.jsp/SaleEntry.java,用url传递参数) 通过*来设置所有属性和输入参数之间的关联 (SayHelloBean.html/SayHelloBean.jsp/HelloBean.java) 在建立Bean属性和表单参数之间的对应关系时,服务器会将对应的参数自动转换成和属性类型匹配的数据 初步解释编码问题,JSP内置对象,JSP的内置对象 out request response pageConte
31、xt 用的很少 session application config 用的很少 exception Page用的很少,JSP编程-out,Out内置对象是一个缓冲的输出流,用来给客户端返回信息。它是javax.servlet.jsp.JspWriter的一个实例 典型应用:向客户端输出内容 例:向客户端输出一个字符串“Hello World” (HelloWorld.jsp),JSP-out,常用方法: println():向客户端输出各种类型数据 newLine():输出一个换行符 close():关闭输出流 flush():输出缓冲区里的数据 clearBuffer():清除缓冲区里的数据
32、,同时把数据输出到客户端 clear():清除缓冲区里的数据,但不把数据输出到客户端 getBufferSize():返回缓冲区的大小,JSP编程-request,request内置对象表示的是调用JSP页面的请求。通常,request对象是javax.servlet.http.HttpServletRequest接口的一个实例 典型应用:通过request.getParameter(“paramName”)可以获得Form提交过来的参数值,JSP-request,可以用此对象取得请求的Header、信息(如浏览器版本、语言和编码等)、请求的方式(get/post)、请求的参数名称、参数值、客
33、户端的主机名称等 常用方法: getMethod():返回客户端向服务器端传送数据的方法 getParameter(String paramName):返回客户端向服务器端传送的参数值,该参数由paramName指定 getParameterNames():获得客户端传送给服务器端的所有参数的名字,结果是一个枚举类型数据(Enumeration) getParameterValues(String name):获得指定参数的所有值,由name指定 getRequestURI():获得发出请求字符串的客户端地址 getRemoteAddr():获取客户端的IP地址 getRemoteHost():获取客户端机器名称 getServerName():获取服务器的名字 getServletName():客户端所请求的脚本文件路径 getServerPort():获取服务器端的端口 对应类: javax.servlet.http.HttpServletRequest,JSP-response,表示的是返回给客户端的响应 是javax.servlethttp.HttpServletResponse接口的一个实例 经常用于设置HTTP标题,添加cookie、设置响应内容的类型和状态、发送HTTP重定向和编码URL 常用方法: addCookie(Cookie cooki
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026网工面试题目及答案
- 2026物业基金面试题目及答案
- (2026年)合同档案管理及档案利用管理制度内容
- (2026版)月饼经销合同
- 汕尾市绿源新型建材迁建项目环境影响报告表
- 2025年中国量子计算产业市场现状及发展前景研究报告-智研咨询-2025
- 湖北信息工程学校选聘教师笔试真题2025
- 2025-2026学年江西省上饶市鄱阳县四年级数学下学期期末达标检测模拟试题含答案解析
- 2025-2026学年江苏省盐城市一小四年级数学下学期期末预测试题含答案解析
- 护理查房工作流程
- 2025年教师招聘考试(心理健康教育)(中小学)综合能力测试题及答案
- 2026新版生产安全事故应急预案+两个报告
- 2025年海南三沙市事业单位公开招聘笔试试卷(含完整答案解析)
- 江苏盐城东台市2026年专职网格员招聘考试试卷-含答案解析
- 2026年消化系统内镜报告规范解读手册
- 2026年南昌县医疗健康集团县120急救中心自主招聘16人考试备考题库及答案详解
- 2026年CCAA国家注册审核员考试(有机产品认证基础)复习题及答案
- 2026年1月浙江省选考物理试题(纯答案版)
- 2025年国家文物保护工程监理师考试试卷(附答案)
- 2026内蒙古工程建设行业供需现状调研及战略发展规划分析报告
- 2026年人教部编版新教材语文四年上册全册教案设计(含教学计划)
评论
0/150
提交评论