马士兵SERVLETJSP

上传人:xx****x 文档编号:242917478 上传时间:2024-09-11 格式:PPT 页数:60 大小:185KB
返回 下载 相关 举报
马士兵SERVLETJSP_第1页
第1页 / 共60页
马士兵SERVLETJSP_第2页
第2页 / 共60页
马士兵SERVLETJSP_第3页
第3页 / 共60页
点击查看更多>>
资源描述
,Click to edit Master title style,Click to edit Master text stylesgood1,Second levelgood2,Third levelgood3,Fourth levelgood4,Fifth levelgood5,手把手教程,版权所有:尚学堂科技,Servlet,尚学堂,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,shutdown.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服务用的。,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-user.xml 定义了tomcat用户的信息(用于权限与安全),conf/server.xml,顶层类元素: 位于整个配置文件的顶层, ;,连接器类元素Connectors : 客户和服务(容器类元素)间的通讯接口。接受客户请求,返回响应结果;,容器类元素Containers: 处理客户请求并且生成响应结果,包含3个: ,嵌套类元素Nested Components: 可以加入到容器中的元素,包括: 等,一个包含一个或多个,一个包含唯一一个和一个或多个,多个 共享一个;一个包含多个,每个 定义一个虚拟主机,包含一个或多个web应用; 元素是代表一个在虚拟主机上运行的Web应用。,Please 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 the conf directory as described above.,什么是MIME,Multipurpos Internet Mail Extension,指明白传送内容的格式,最早用于邮件附件,server.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-Content-Length: 32username=billgates&password=hehe,HTTP/1.1 200 OKDate: Fri,31 Dec 2003 10:23:34 GMTContent-Type: text/htmlContent-length: 280,Web Application的概念,Web Application Name,WEB-INF,web.xml,该web app的配置文件,lib,该web app用到的库文件,classes,存放编译好的servlet,META-INF,存放该web app的上下文信息,符合J2EE标准,Web Application可以直接放在webapp下面,也可以通过配置文件指定到其他目录 里面,Tomcat的目录结构,bin/ 二进制可执行文件和脚本,catalina start stop,catalina debug run exit,common/ Catalina本身和web应用可加载的类目录,conf/ 配置文件目录,logs/ 日志目录,server/ 服务器所需的类库目录,shared/Web App共享的类库,webapps/ Web应用所存放的目录applications,work/ Tomcat的工作目录(存放jsp产生的class文件),temp/存放临时产生的文件,Servlet简介,Servlet是服务器小应用程序,用来完成B/S架构下,客户端请求的响应处理,平台独立,性能优良,能以线程方式运行,Servlet API为Servlet提供了统一的编程接口,Servlet一般在容器中运行,常见的Servlet容器,Tomcat (其下载、安装和运行请参考视频文件),Jetty / Resin,Servlet示例 HelloWorldServlet.java,需求:编写一个生成纯文本的简单的Servlet类。,目的:了解Servlet的基本概念,在web.xml的配置,HelloWorldServlet,HelloWorldServlet,HelloWorldServlet,/HelloWorldServlet,web app根路径(url),必须/开头,/aaa,web.xml,/aaa - hello -servlet class - web-inf/classes - doGetl,创建Servlet,XXX extends,HttpServlet,Override,doGet,doPost,copy to WEB-INF/classes,web.xml, /,restart server,Servlet的生命周期,生命全过程:加载 ClassLoader 实例化 new 初始化 init(ServletConfig)处理请求 service doGet doPost退出服务 destroy(),只有一个对象,API中的过程:init()/只执行一次, 第一次初始化的时候public void,init,(,ServletConfig,config) throws,ServletException,service()public void,service,(,ServletRequest,req,ServletResponse,res) throws,ServletException, java.io.IOException destroy()/webapp 退出的时候public void,destroy,(),TestLifeCycleServlet.java,init,init(servletconfig config),this.config = config,init();,重写必须得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.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, IOExceptionpublic void doPost(HttpServletRequest req, HttpServletResponse res)throws ServletException,IOException,读取指定的参数:ThreeParams.html/ThreeParams.java,读取所有的参数:ShowParameters.java/ShowParametersForm.html,获取表单信息,通过HttpServletRequest的getParameter()方法来获得客户端传递过来的数据,getParameter()方法返回一个字符串类型的值,getParameterNames()返回Enumeration类型的值,getParameterValues()返回一个字符串数组,不要通过本地文件访问,ThreeParams.java,ShowParameters.java,HTTP的状态处理,HTTP是无状态,有状态:Server知道Client以前在我这儿做过什么事儿,处理Cookie,Http协议的无连接性要求出现一种保存C/S间状态的机制,Cookie:保存到客户端的一个文本文件,与特定客户相关,Cookie以“名-值”对的形式保存数据,创建Cookie:new Cookie(name,value),可以使用Cookie 的setXXX方法来设定一些相应的值,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 application persistence,1:服务器可以向客户端写内容,2:只能是文本内容,3:客户端可以阻止服务器写入,4:只能拿自己webapp写入的东西,5:Cookie分为两种,属于窗口/子窗口(放在内存中的),属于文本(有生命周期的),IE中手动删除的cookie都是属于文本的,6:一个servlet/jsp设置的cookies能够被同一个路径下面或者子路径下面的servlet/jsp读到 (路径 = URL)(路径 != 真实文件路径),会话跟踪,Session,在某段时间一连串客户端与服务器端的“交易”,在Jsp/Servlet中,如果浏览器不支持Cookie,可以通过URL重写来实现,就是将一些 额外数据追加到表示会话的每个URL末尾,服务器在该标示符与其存储的有关的该会话的数据之间建立关联。如hello.jsp?jsessionid=1234,可以通过程序来终止一个会话。如果客户端在一定时间内没有操作,服务器会自动终止会话。,通过HttpSession来读写Session,规则,如果浏览器支持Cookie, 创建Session的时候会把SessionID保存在Cookie里,如果不支持Cookie, 必须自己编程使用URL重写的方式实现Session,response.encodeURL(),转码,URL后面加入SessionId,Session不象Cookie拥有路径访问的问题,同一个application下的servlet/jsp可以共享同一个session, 前提示同一个客户端窗口.,97923429349237293472,97923429349237293472,HttpServletRequest中的Session管理方法,getRequestedSessionId():返回随客户端请求到来的会话ID。可能与当前的会话ID相同,也可能不同。,getSession(boolean isNew):如果会话已经存在,则返回一个HttpSession,如果不存在并且isNew为true,则会新建一个HttpSession,isRequestedSessionIdFromCookie():当前的Session ID如果是从Cookie获得,为true,isRequestedSessionIdFromURL():当前Session ID如果是由URL获得,为true,isRequestedSessionIdValid():如果客户端的会话ID代表的是有效会话,则返回true。否则(比如,会话过期或根本不存在),返回false,HttpSession的常用方法,getAttributeNames()/getAttribute(),getCreateTime(),getId(),getMaxInactiveInterval(),invalidate(),isNew(),setAttribute(),setMaxInactivateInterval(),SessionInfoServlet.java,ShowSession.javaURLSession.java,Session总结,服务器的一块内存,(,存,key-value),和客户端窗口对应,(,子窗口,)(,独一无二,),客户端和服务器有对应的,SessionID,客户端向服务器端发送,SessionID,的时候两种方式,:,cookie(,内存,cookie),rewriten,URL,浏览器禁掉,cookie,就不能使用,session(,使用,cookie,实现的,session),如果想安全的使用,session(,不论客户端是否禁止,cookie),只能使用,URL,重写,(,大大增加编程负担,),所以很多网站要求客户端打开,cookie,Application,用于保存整个WebApplication的生命周期内都可以访问的数据,在API中表现为ServletContext,通过HttpServlet的getServletContext方法可以拿到,通过ServletContext的 get / setAttribute方法取得/设置相关属性,TestServletContext.java,Servlet中的请求转发,RequestDispatcher接口对象允许将请求转发到其他服务器资源,通过RequestDispatcher的forward(HttpServletRequest,HttpServletResponse)方法可以将请求转发,通过ServletContext的getRequestDispatcher(String url)方法来获得RequestDispatcher对象,并且指定转发的目标url资源,可以通过HttpServletRequest的setAttribute(String name,String value)来设置需要传递的参数,然后在代理servlet中就可以使用HttpServerRequest的getAttribute(String name)来获得对应的值,数据库处理以及在Servlet中使用Bean,广义javabean = 普通java类,狭义javabean = 符合Sun JavaBean标准的类,在Servlet中使用Bean和在通常程序中使用Bean类似,属性名称第一个字母必须小写,一般private,比如:private productId,一般具有getters and setters,要具有一个参数为空的构造方法,但Bean不应具有GUI表现,一般是用来实现某一业务逻辑或取得特定结果,示例:,连接数据库,ShowRs.java,ShowRsUseBean.java,如何掌握Servlet,创建Servlet,从HttpServlet继承,重写doGet / doPost方法,在web.xml中配置,servlet生命周期,Cookie / Session / Application的概念,请求转发,使用javabean,Filter and Listener,Servlet的多线程机制,Servlet体系结构是建立在Java多线程机制之上的,它的生命周期是由Web容器负责的。,当客户端第一次请求某个Servlet时,Servlet 容器将会根据web.xml配置文件实例化这个Servlet类。当有新的客户端请求该Servlet时,一般不会再实例化该Servlet类,也就是有 多个线程在使用这个实例。,Servlet容器会自动使用线程池等技术来支持系统的运行,JSP,JSP简介,JSP-Java Server Pages,拥有servlet的特性与优点(本身就是一个servlet),直接在HTML中内嵌JSP代码,JSP程序由JSP Engine先将它转换成Servlet代码,接着将它编译成类文件载入执行,只有当客户端第一次请求JSP时,才需要将其转换、编译,优点:,优良的性能优于CGI,PHP,ASP,平台无关性操作系统无关,Web服务器无关,可扩展性tag的扩展机制,简化页面开发,HelloWorld.jsp,HW.jsp,java, class,JSP编程基本语法,JSP传统语法,Declaration,Scriptlet,Expression,Comment,Directives,Action动作指令,内置对象,JSTL,JSF,JSP编程-Declaration,基本语法:,说明:在此声明的变量、方法都会被保留成唯一的一份,直到JSP程序停止执行,例:,AccessCounts.jsp,Scriptlet,基本语法:,可以放入任何的Java程序代码,例:,%,for (int i=0;i,注释格式:,BGColor.jsp,表达式,基本语法:,=后面必须是字符串变量或者可以被转换成字符串的表达式,不需要以;结束,只有一行,例:,Expressions.jsp,Directive,Directive(编译指令)相当于在编译期间的命令,格式:,常见的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),限制:,不能向中传递参数,不能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文件时的参数和对应的值,例如:,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),格式:,用于指定参数和其对应的值,例如:,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后的语句会继续执行,除非return,速度慢,需要到客户端的往返,可以转到任何页面,可以传参数,直接写在url后面,客户端,forward,sendRedirect,jsp:useBean,通过jsp:useBean,可以在JSP中使用定义好的Bean,Bean的基本要素:,必须要有一个不带参数的构造器。在JSP元素创建Bean时会调用空构造器,Bean类应该没有任何公共实例变量,也就是说,不允许直接访问实例变量,变量名称首字母必需小写,通过getter/setter方法来读/写变量的值,并且将对应的变量首字母改成大写,基本用法:,test.jsp/CounterBean.java 不要使用裸体类(规范要求),jsp:useBean(con.),jsp: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:有效范围在用户整个连接过程中(整个会话阶段均有效),(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:useBean(con.),建立表单参数和Bean属性之间的关联,通过param指定表单元素的名称,通过perperty指定对应的Bean属性名称,由此建立这两个变量的关联,(SaleEntry.jsp/SaleEntry.java,用url传递参数),通过*来设置所有属性和输入参数之间的关联,(SayHelloBean.html/SayHelloBean.jsp/HelloBean.java),在建立Bean属性和表单参数之间的对应关系时,服务器会将对应的参数自动转换成和属性类型匹配的数据,初步解释编码问题,JSP内置对象,JSP的内置对象,out,request,response,pageContext,用的很少,session,application,config,用的很少,exception,Page,用的很少,JSP编程-out,Out内置对象是一个缓冲的输出流,用来给客户端返回信息。它是javax.servlet.jsp.JspWriter的一个实例,典型应用:向客户端输出内容,例:向客户端输出一个字符串“Hello World”,(HelloWorld.jsp),JSP-out,常用方法:,println():向客户端输出各种类型数据,newLine():输出一个换行符,close():关闭输出流,flush():输出缓冲区里的数据,clearBuffer():清除缓冲区里的数据,同时把数据输出到客户端,clear():清除缓冲区里的数据,但不把数据输出到客户端,getBufferSize():返回缓冲区的大小,JSP编程-request,request内置对象表示的是调用JSP页面的请求。通常,request对象是javax.servlet.http.HttpServletRequest接口的一个实例,典型应用:通过request.getParameter(“paramName”)可以获得Form提交过来的参数值,JSP-request,可以用此对象取得请求的Header、信息(如浏览器版本、语言和编码等)、请求的方式(get/post)、请求的参数名称、参数值、客户端的主机名称等,常用方法:,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 cookie):添加一个Cookie对象,用于在客户端保存特定的信息,addHeader(String name,String value):添加HTTP头信息,该Header信息将发送到客户端,containsHeader(String name):判断指定名字的HTTP文件头是否存在,sendError(int):向客户端发送错误的信息,sendRedirect(String url):重定向JSP文件,和的区别,sendRedirect通过客户端发起二次申请,不同的request对象,Jsp:forward是同一个request,在服务器内部转发,setContentType(String contentType):设置MIME类型与编码方式,JSP-Cookie,Http协议的无连接性要求出现一种保存C/S间状态的机制,Cookie:保存到客户端的一个文本文件,与特定客户相关,Cookie以“名-值”对的形式保存数据,通过getName和getValue的方式得到相应的名字和值,JSPsession & application,(默认)-表示session功能已经在jsp页面中启动,session常用方法:,void setAttribute(String name,Object value),Object getAttribute(String name),boolean isNew(),application,ServletContext,Servlet和JSP的通信,从JSP调用Servlet可用请求信息自动传递到Servlet,或者通过sendRedirect,从Servlet调用JSP使用,RequestDispatcher接口的forward(req, res)方法,请求信息需要显式传递(在req、res参数中),或者通过sendRedirect,例如:,FromJspToServlet.jsp / ServletToJsp.java / ServletUseJsp.jsp,forward可以用 ”/” 路径, 是指web app的根路径, servlet forward jsp的时候一定要用 “/”开头,jsp sendRedirect到servlet应该用相对路径,因为这里”/”指网站的根路径,servlet sendRedirect jsp也是,request.getContextPath起作用了,Note :,IE缓存和不跳转的问题,html注释,注释不掉jsp,ECLIPSE,接口1,接口2,接口n,Plug In 1,Plug In 2,Plug In n,Eclipse插件结构,MyEclipse,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 大学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!