WEB服务器端编程(第12章、13章).ppt_第1页
WEB服务器端编程(第12章、13章).ppt_第2页
WEB服务器端编程(第12章、13章).ppt_第3页
WEB服务器端编程(第12章、13章).ppt_第4页
WEB服务器端编程(第12章、13章).ppt_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第16章 Web服务器端编程,16.1 Java Web服务器介绍 16.2 Servlet介绍 16.3 JSP介绍 16.4 Struts介绍,16.1 Java Web服务器介绍,在进行实际大型Java Web项目实施的时候,我们可以采用商业型的应用服务器,应用服务器可以处理复杂的商业逻辑,常应用于WEB多层结构的开发。例如IBM的 WebSphere服务器,BEA 的WebLogic服务器。这两种服务器功能齐全而强大,支持所有的Java 服务容器标准,适用于大型的商业Java Web应用的发布。但是这两种服务器都是商业服务器,价格昂贵,对系统资源要求极高。特别是Websphere 配置更复杂。JBoss公司的开源免费软件Jboss应用服务器同样功能齐全而强大,也支持所有的Java 服务容器标准。而且JBoss具有良好的性价比,具有良好的运行效率和可靠性,因此已经得到越来越多的J2EE应用开发者和中小型企业的青睐。但同样对系统资源要求高,配置复杂。,16.1 Java Web服务器介绍,在开发或学习过程中,有许多免费轻型的Java Web服务器可以供我们选用,如Tomcat、Resin、Orion等等。他们使用都很方便,占用资源也很少,适合开发过程中的调试阶段;而且这些服务器还可以和Jbuilder、Eclipse等开发工具集成使用。根据实际开发中的情况来看,Jakata Tomcat 和Sun Java结合的最好,和其他应用服务器配合使用可支持完整的J2EE标准,因此其应用很广泛。,第16章 Web服务器端编程,16.1 Java Web服务器介绍 16.2 Servlet介绍 16.3 JSP介绍 16.4 Struts介绍,16.2 Servlet介绍,16.2.1 Servlet的概念 16.2.2 Servlet应用范围和运行环境 16.2.3 Servlet简单例子 16.2.4 Servlet常用类、接口和生命周期 16.2.5 Servlet应用举例,16.2.1 Servlet的概念,Servlet就是用 Java 编写的服务器端程序,是由服务器端调用和执行的 Java 类,这种类使用 Java Servlet 应用程序设计接口(API)及相关类和方法。除了 Java Servlet API , Servlet 还可以使用用以扩展和添加到 API 的 Java 类软件包。 Servlet是一种采用 Java 来实现 CGI(Common Gate Interface) 功能的技术。Servlet本身与协议无关,与平台也无关。也就是说Servlet所适用的网络协议可以是多种多样的,比如HTTP,FTP,SMTP,TELNET等,但是就目前而言,只有HTTP服务已经形成了标准的Java组件。对应的软件包有两个javax.servlet.http和javax.servlet.jsp,分别对应我们要讲解的Servlet和JSP编程。我们通常所说的Servlet编程主要就是指针对HTTP的Servlet编程,用到的就是javax.servlet.http包中的类(典型的就是HttpServlet类),实际上Java Servlet编程的概念要更广一些,在这里我们约定俗成的使用Servlet来指代HTTP Servlet的编程,这点读者是需要了解的。由于JSP最终都是要经过JSP引擎转换成Servlet代码的,而且Servlet编程和一般的Java编程是没有大的区别的,只需要了解一定的规范即可。,16.2.2 Servlet应用范围和运行环境,Servlet运行于Servlet引擎管理的Java虚拟机中,被来自客户机的请求所唤醒,与CGI不同的是,在虚拟机中只要装载一个Servlet就能够处理新的请求,每个新请求使用内存中那个Servlet的相同副本,所以效率比CGI来得高。如果采用服务器端脚本,如ASP,PHP,语言解释程序是内置程序,虽然可以加快服务器的运行,但是效率还是比不上准编译的Servlet。实际的使用也已经证明,Servlet是效率很高的服务器端程序,很适合用来开发Web服务器应用程序。Java Servlet有着十分广泛的应用。不光能简单的处理客户端的请求,借助Java的强大的功能,使用Servlet还可以实现大量的服务器端的管理维护功能,以及各种特殊的任务,比如,并发处理多个请求,转送请求,代理等。 为了运行Servlet,首先需要一个JVM来提供对Java的基本支持,一般需要安装JRE(Java Runtime Environment)或JDK(Java Develop Kit,JRE是其中的一个子集)。其次我们需要Servlet API的支持,一般的Servlet引擎都自带Servlet API,只要我们安装Servlet引擎或安装直接支持Servlet的Web服务器,便会自动安装上Servlet相关的程序包。,16.2.3 Servlet简单例子,【例16-1】使用Servlet在客户端输出简单的问候语句 /HelloWorld.java package test; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWorld extends HttpServlet private String greeting; public void init() throws ServletException greeting = getInitParameter(“greeting“); ,16.2.3 Servlet简单例子,【例16-1】使用Servlet在客户端输出简单的问候语句 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException /doGet()是这个Servlet的核心,真正处理请求的地方 PrintWriter out = response.getWriter(); /从HttpServletResponse得到输出流 out.println(“); out.println(“); out.println(“ + greeting + “); out.println(“); out.println(“); out.println(“ + greeting + “); out.println(“); out.println(“);/上面的语句都是向客户端打印HTML文本 out.close(); /关闭HttpServletResponse public void destroy() / nothing to do ,16.2.3 Servlet简单例子,这是最简单的一个Servlet程序,整个类从HttpServlet派生,就跟Applet一样,这个派生关系是必须的。这个Servlet必须实现doGet()方法(因为它是作为静态页面通过地址访问的,这种方式在HTTP中称为GET请求,在后面还会有更具体的讲解),这是这个Servlet真正处理请求的地方,是整个Servlet的主体。doGet()有两个参数HttpServletRequest req和 HttpServletResponse res。HttpServletRequest包含了客户请求的各种信息,HttpServletResponse则包装了服务器响应,主要处理对客户机的输出。 通过javac对以上程序进行编译,我们可以得到HelloServlet.class,下面我们就通过配置Resin来运行这个Servlet。 在webapps下建立自己的发布目录mytest, mytest目录下的WEB_INF/classes是Resin默认的classpath环境变量的值, 把HelloWorld.java拷贝到WEB_INF/classes /test目录下。当然也可以将其拷贝到有效的系统或用户的classpath下,Resin都是能够找到的,如Resin默认的发布目录doc。 接下来就需要修改conf目录下的resin.conf文件,来配置我们的Servlet。读者可以使用任何一种自己所熟悉的文本编辑器来打开该配置文件,16.2.3 Servlet简单例子,在中加上下面的配置语句 这样当客户端产生/Hello请求的时候,Resin就能把这个请求定向到test.HelloWorld上,同时给出greeting参数的值。该Servlet就能正常运行了。 下面我们启动Resin服务器(通过双击bin下的httpd.exe)。这样我们就可以通过浏览器访问这个Servlet了。打开浏览器,比如IE,在地址栏键入http:/localhost:8080/mytest/Hello,就可以看到运行结果网页,如图,16.2.3 Servlet简单例子,16.2.4 Servlet常用类、接口和生命周期,16.2.4 Servlet常用类、接口和生命周期,1、Servlet的生命周期 Servlet容器负责处理客户请求、把请求传送给Servlet并把结果返回给客户。不同的Web容器实际的实现可能有所不同,但容器与Servlet之间的接口是由Servlet API定义好的,这个接口定义了Servlett容器在Servlet上要调用的方法及传递给Servlet的对象类。 Servlet的生命周期可以被归纳为下面的步骤: (1) 装载Servlet,这一项操作一般是动态执行的。 (2) Server创建一个Servlet实例; (3) Server调用Servlet的init方法; (4) 一个客户端请求到达Server; (5) Server创建一个请求对象; (6) Server创建一个响应对象; (7) Server激活Servlet的service方法,传递请求和响应对象作为参数; (8) service方法获得关于请求对象的信息,处理请求,访问其他资源,获得需要的信息;,16.2.4 Servlet常用类、接口和生命周期,(9) service方法使用响应对象的方法。将响应传回Server,最终到达客户端。service方法可能激活其他方法以处理请求。如doGet,doPost或其他程序员自己开发的方法 (10) 对于更多的客户端请求,Server创建新的请求和响应对象,仍然激活此Servlet的service方法,将这两个对象作为参数传递给它,如此重复以上的循环,但无需再次调用init方法,Servlet一般只初始化一次 (11) 当Server不再需要Servlet时(比如当Server要关闭时),Server调用Servlet的destroy方法。 一旦请求了一个Servlet,就没有办法阻止容器执行一个完整的生命周期。容器在Servlet首次被调用时创建它的一个实例,并保持该实例在内存中,让它对所有的请求进行处理。容器可以决定在任何时候把这个实例从内存中移走。在典型的模型中,容器为每个Servlet创建一个单独的实例,容器并不会每接到一个请求就创建一个新线程,而是使用一个线程池来动态的将线程分配给到来的请求,但是这从Servlet的观点来看,效果和为每个请求创建一个新线程的效果相同。,16.2.4 Servlet常用类、接口和生命周期,2、 Servlet接口 当你在写servlet的时候必须直接或间接的实现这个接口。一般趋向于间接实现:通过从GenericServlet或HttpServlet派生。 在实现servlet接口时必须实现它的五个方法: (1) init(): public void init(ServletConfig config) throws ServletException (2) service(): public void service(ServletRequest req,ServletResponse res) throws ServletException,IOException (3) destroy(): public void destroy() (4) getServletConfig() public ServletConfig getServletConfig() (5) getServletInfo(): public String getServletInfo(),16.2.4 Servlet常用类、接口和生命周期,下面的类和接口详细情况见servert帮助文档。 HttpServlet类 HttpServletRequest接口 HttpServletResponse接口 HttpSession接口 ServletConfig和ServletContext,16.2.5 Servlet应用举例,【例17-2】Servlet与表单交互的方法 表单是HTML中使用最广泛的传递信息的手段。 1)静态HTML文本:information.html Input Information 请输入信息 姓名: 性别: 男 女 ,16.2.5 Servlet应用举例,2)下面是处理表单的Servlet程序FormDeal: / FormDeal.java import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class FormDeal extends HttpServlet public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException /处理GET请求的方法 response.setContentType(“text/html; charset=gb2312“); request.setCharacterEncoding(“GB2312“); /先设置Header,在这里只设置ContentType一项 PrintWriter out = response.getWriter(); /得到文本输出Writer String name = request.getParameter(“Name“); /得到表单值Name String sex = request.getParameter(“Sex“);,16.2.5 Servlet应用举例,/打印得到的表单值 out.println(“); out.println(“); out.println(“); out.println(“Your Infomation“); out.println(“); out.println(“); out.println(“Data You Posted“); out.println(“); out.println(“); out.println(“你的姓名:“); out.println(“+name+“); out.println(“); out.println(“); out.println(“你的性别:“); out.print(“);,16.2.5 Servlet应用举例,/打印得到的表单值 if(sex.equals(“1“) out.println(“男“); else out.println(“女“); out.println(“); out.println(“); out.println(“); out.println(“); out.close(); /关闭Writer ,16.2.5 Servlet应用举例,第16章 Web服务器端编程,16.1 Java Web服务器介绍 16.2 Servlet介绍 16.3 JSP介绍 16.4 Struts介绍,16.3 JSP介绍,16.3.1 JSP的概念 16.3.2 JSP的运行方式 16.3.3 JSP指令介绍 16.3.4 JSP中的隐藏对象 16.3.5 JSP应用举例举例 16.3.6 JSP和Servlet在实际工程中的应用,16.3.1 JSP的概念,JSP(Java Server Pages)是一种动态网页技术标准。它在HTML代码中,插入JSP标记(tag)及Java程序片段 (Scriptlet), 构成JSP页面,其扩展名为 .jsp。 当客户端请求JSP文件时,Web服务器执行该JSP文件,然后以HTML的格式返回给客户。 JSP的概念可说跟Servlet是完全一样的,只不过在实现方法上稍有不同。 JSP技术具有以下的优点: (1)将内容的生成和显示进行分离 (2)强调可重用的组件 (3)采用标记简化页面开发 (4)JSP的适应平台更广,16.3.2 JSP的运行方式,在服务器启动后,当Web浏览器端发送过来一个页面请求时,Web服务器先判断是否是JSP页面请求。如果该页面只是一般的HTML/XML页面请求,则直接将HTML/XML页面代码传给Web浏览器端。如果请求的页面是JSP页面,则由JSP引擎检查该JSP页面,如果该页面是第一次被请求、或不是第一次被请求但已被修改,则JSP引擎将此JSP页面代码转换成Servlet代码,然后JSP引擎调用服务器端的Java编译器javac.exe对Servlet代码进行编译,把它变成字节码(.class)文件,然后再调用Java虚拟机执行该字节码文件,将执行结果传给Web浏览器端。如果该JSP页面不是第一次被请求,且没有被修改过,则直接由JSP引擎调用Java虚拟机执行已编译过的字节码.class文件,然后将结果传送Web浏览器端。,16.3.3 JSP指令介绍,1HTML注释 该注释在客户端可通过查看网页源文件的方法看到。JSP语法: 2JSP注释 JSP注释作为JSP页面的文档资料,但是该注释在客户端通过查看源文件的方法是看不到的。即该注释不发送到客户端。 JSP语法: 3. 声明 在JSP页面脚本语言中声明变量或方法,JSP语法: ,16.3.3 JSP指令介绍,4. 表达式 在JSP脚本语言中,可以使用任何有效的表达式。JSP语法: 5. 脚本段 在JSP页面脚本语言中,包含一段有效的代码片段。JSP语法: 6Include指令 该指令用于包含一个文本或代码的文件。JSP语法: ,16.3.3 JSP指令介绍,例如: random.jsp文件中内容为: 另外include.jsp文件内容为: Include指令测试 随机显示的数为: 在页面中显示为: 随机显示的数为: 2148.093521070482,16.3.3 JSP指令介绍,7. Page 指令 定义整个JSP页面的全局属性。JSP语法: ,16.3.3 JSP指令介绍,8元素 将客户端的请求转交给一个HTML文件、JSP文件或脚本段处理。JSP语法: “ / 9 在JSP文件中,包含一个静态或动态文件。 JSP语法: “ flush=“true“ /,16.3.3 JSP指令介绍,10. 下载一个plugin插件到客户端以便执行applet或Bean。 11 调用或创建一个指定名字和使用范围的Bean。JSP语法: “ type=“package.class“ / | other tags ,例如: 标签首先调用一个指定的名字和使用范围的Bean,如果这个Bean不存在,则创建该 Bean。,16.3.3 JSP指令介绍,12 设置Bean的一个或多个属性值。 JSP语法: “ / 例如: ,16.3.3 JSP指令介绍,13 取得Bean属性的值,以便在结果页面中显示。JSP语法: 例如: Bean的程序代码为: package AccessDatabase; public class Readdate private String username=“John“; public String void getUsername() return username; JSP文件的内容为: 从Bean中取得属性名为username的值为: 执行后显示结果为: 从Bean中取得属性名为user的值为:John,16.3.4 JSP中的隐藏对象,所谓隐含的对象,就是大家约定好使用一个名字来指代某个特定的对象,在编写JSP的时候不用显式的声明就能使用,由JSP引擎负责在解释的时候把隐含对象加入到解释完的.java文件中。常用的隐含对象有application、session、request 、response、out、page、exception、pageContext。 1session对象 前面在Servlet部分已经提到,过当客户第一次访问Web服务器发布目录(一个Web服务器有一个或多个“发布目录“)下的网页文件时,Web服务器会自动创建一个session对象,并为其分配唯一的ID号,客户可以将其需要的一些信息保存到该session对象,以便需要时使用。session对象就是指通过getSession法办法得到的对象,在JSP中是隐含对象,关于session对象的使用读者可以参见Servlet API,2application对象 当Web服务器启动时,Web服务器会自动创建application对象。Application对象一旦创建,它将一直存在,直到Web服务器关闭。因此,application对象可以实现多客户间的数据共享 3、request对象 request对象主要用于取得客户在表单中提交的数据信息及多个网页之间数据信息传递等。同时通过它也可以取得Web服务器的参数。跟Servlet参数中的Request对象是相对应的。 4 respose对象 respose对象主要用于向客户端输出信息,响应客户端的请求。跟Servlet参数中的Response对象是相对应的。,16.3.4 JSP中的隐藏对象,5out对象 out对象用于向客户端输出数据。 6page对象 page对象是当前JSP页面本身的一个实例。它的类型是:java.lang.Object。其方法就是Object类中的方法。 7Exception对象 当JSP页面在执行过程中发生例外或错误时,会自动产生Exception对象。 8pageContext对象 pageContext对象相当于当前页面的容器,可以访问当前页面的所有对象。,16.3.5 JSP应用举例举例,【例17-3】本例中将演示Jsp与表单交互的方法。 information2.html是静态网页文件,其中的表单搜集数据,并提交给JSPDeal.jsp来处理。 1静态HTML文件information2.html Input Information 请输入信息 姓名: 性别: 男 女 ,16.3.5 JSP应用举例举例,【例17-3】本例中将演示Jsp与表单交互的方法。 2JSP文件:JSPDeal.jsp Your Info Data You Posted 你的姓名: 你的性别: ,16.3.5 JSP应用举例举例,16.3.5 JSP应用举例举例,这个例子的执行结果和前面是一摸一样的。在以前Servlet分析的基础上,读者看懂这个例子应该没什么问题,这里就不对语法做过多分析了。下面我们来分析一下这个例子的几个特点。 首先最明显的一点就是,使用JSP之后文件变得更短,格式更清晰了,这也是要使用JSP的一个最主要的原因,使用Servlet来打印大量的HTML语句是很费事的,而JSP的主体是HTML,嵌入的Java语句只负责动态效果,所以使用比Servlet方便的多。当然Servlet和JSP可以互相配合,取长补短,获得更好的应用效果。 另外一个就是JSP使用的时候不需要单独配置每一个文件,只要是扩展名为jsp,JSP引擎会自动识别。而Servlet是必须进行配置后才能投入使用的,这也是处于安全性的考虑,直接访问.class文件是不允许的,因为不能保证它是一个合法的Servlet。而JSP是没有经过编译的文本,即使是编译成了Servlet,也肯定是符合Servlet规范的,尽管可能不符合HTML语法,所以它是安全的。,16.3.6 JSP和Servlet在实际工程中的应用,Servlet非常适合服务器端的处理和编程。但是如果用Servlet处理大量的HTML文本,那么将是一件及其繁琐的事情。 Servlet更适合处理后端

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论