《Web高级程序设计第9章-Servlet.ppt》由会员分享,可在线阅读,更多相关《Web高级程序设计第9章-Servlet.ppt(45页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第8章 Servlet开发基础武昌工学院 信息工程学院 姚远版权所有一个jsp文件被生成一个.java文件test2.jsp源码:Insert title hereIm so good!为jsp文件生成一个servlet类:查看test2_jsp.java文件源码:其中org.apache.jasper.runtime.HttpJspBase继承自javax.servlet.http.HttpServlet第8章 JSP开发基础本章目录本章目录9.1Servlet概述9.2Servlet的生命周期9.3Servlet发送页面到客户端9.4Servlet处理表单数据9.5Servlet请求转发9
2、.6示例:使用Servlet完成工资计算9.1.1 Web服务器服务器Web服务器在这里不是指计算机硬件,而是一种服务器软件,是指能够接收HTTP协议请求、提供给用户网页、图片、多媒体等信息的服务软件。常见的Java EE平台的Web服务器软件有Tomcat,Jboss,resin,glassfish等。9.1.2 Servlet容器容器Servlet容器,是Web服务器的一部分,一个Servlet容器可管理所有运行在服务器端的Servlet程序,控制这些Servlet程序的整个生命周期。每个Servlet都代表一个能够处理某个Web请求的服务处理程序,Web服务器对这些处理程序进行执行、调度
3、、资源分配等 JSP页面页面JSP容器容器JSP实实现现类类解译解译页面指令标签行为代码片断静态模板客户端请求客户端请求JSP实实现现类类实例对象实例对象RequestResponse结果页面结果页面执行执行9.1.3 Servlet概念概念Servlet在Java EE平台中是指能够通过某种网络协议对客户端请求进行响应的服务程序。Servlet接受来自网络的http请求(客户端浏览器提交的表单、客户端浏览器提供的一个网络地址、或者一个文件),并对不同请求作出不同的响应。能够生成动态内容,如生成一个Web页面。将应用逻辑封装到一个个Servlet中,使得客户端页面能更好的隔离应用逻辑;使应用程
4、序的层次更为清晰。9.2 Servlet的生命周期的生命周期例如:例如:http:/localhost:8080/Servlet_Output/LifeCircle9.2.2生命周期示例新建一个servlet。public class LifeCircle extends HttpServlet public LifeCircle()super();System.out.println(Construct!);public void init(ServletConfig config)throws ServletException System.out.println(init!);publi
5、c void destroy()System.out.println(destroy!);protected void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException System.out.println(get!);protected void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException Sys
6、tem.out.println(post!);LifeCircle.java源码如下:LifeCircle的相关配置LifeCircleLifeCircletestServlet.LifeCircleLifeCircle/LifeCirclehttp:/localhost:8080/WageIS_Servlet/LifeCircle启动tomcat服务器后,在浏览器地址栏中输入:http:/localhost:8080/Servlet_Output/LifeCircle在Concole窗口中可以依次看到:Construct!init!get!当刷新该页面时,会发现控制台新增一行:get!9.2
7、.3 接口接口Servlet和类和类HttpServlet所有Servlet程序必须继承类HttpServlet或它的派生类;HttpServlet实现了Servlet接口,init方法和destroy方法即定义在该接口中。类HttpServlet中有2个方法,会根据来自客户端浏览器的Http请求的不同而被执行;protected void doGet(HttpServletRequestreq,HttpServletResponseresp);这个方法由Web服务器调用,使该Servlet可以处理Http的Get请求。protected void doPost(HttpServletRequ
8、estreq,HttpServletResponseresp)这个方法由Web服务器调用,使该Servlet可以处理Http的Post请求。Java EE的APIhttp:/ Platform,Enterprise Edition 6 API Specification9.2.4 Servlet的基本配置的基本配置在程序中书写的Servlet代码并不能直接被Web服务器用来进行网络服务,还需要使用Web配置文件(即web.xml文件)对Servlet进行配置。包含2部分信息:1.Servlet 说明该Servlet的名称、显示名称以及对应的JAVA实现类。2.Servlet-mapping 说
9、明该Servlet将映射到服务器上哪个网址进行处理。1.Servlet如在默认包中新建了一个servlet,取名OutputWelcome,则对应的配置为:OutputWelcomeOutputWelcomeOutputWelcome如在包ServletPack中新建了一个servlet,取名OutputWel,则对应的配置为:OutputWelOutputWelServletPack.OutputWel2.Servlet-mapping OutputWelcome/OutputWelcome9.3Servlet发送页面到客户端发送页面到客户端9.3.1 Servlet的调用过程的调用过程如:
10、http:/localhost:8080/Servlet_Output/Servlet_Name这个Servlet_Name即为存放于服务器上的Servlet程序对应的名字。为访问Servlet程序,服务器会根据URL请求中的Servlet_Name来定位到服务器中相应的Servlet的文件并执行,本例中Servlet程序中的get方法将加入用于发送给客户端页面功能的代码。9.3.2发送页面到客户端示例发送页面到客户端示例public class OutputWelcome extends HttpServlet protected void doGet(HttpServletRequest
11、request,HttpServletResponse response)throws ServletException,IOException request.setCharacterEncoding(GBK);response.setContentType(text/html;charset=GBK);PrintWriter out=response.getWriter();out.println();out.println(欢迎页面);out.println();out.println(我们欢迎你!);out.println();out.close();http:/localhost:8
12、080/Servlet_Output/Servlet_Name9.4.4 示例页面源码:SenderData.jsp可在下列文本框中输入数据:可在下列多选框中选择15项:num1num2num3num4num5在浏览器地址栏中输入:http:/localhost:8080/GetData_Servlet/SenderData.jsp显示页面如图:输入测试数据后点击“Enter”按钮:此时页面内容发生变化,浏览器中地址转变为:http:/localhost:8080/GetData_Servlet/HandleParam?inputbox=Hello&number=one&number=four
13、&number=fivepublic class HandleParam extends HttpServlet protected void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException String inputText=request.getParameter(inputbox);String multiValue=request.getParameterValues(number);response.setContentType(text/
14、html;charset=GBK);PrintWriter pw=response.getWriter();pw.println();pw.println(你输入的文字:);if(inputText!=null)pw.println(inputText);pw.println();pw.println(你选择的项:);if(multiValue!=null)for(int i=0;imultiValue.length;i+)pw.println(multiValuei+);pw.println();web.xml配置文件源码为:HandleParamHandleParamGetParam.Ha
15、ndleParamHandleParam/HandleParamhttp:/localhost:8080/GetData_Servlet/HandleParam?inputbox=Hello&number=one&number=four&number=five9.5 Servlet进行请求转发进行请求转发通过Servlet生成客户端请求的页面这一方式,控制不太方便,特别当页面内容较多,页面样式较为复杂的情况则不太适合,所以一般可以采用Servlet完成服务器端进行计算处理,将结果通过jsp页面发送给客户端的方式,也就是通常所说的Servlet+jsp方式。在Servlet计算处理后,可利用Re
16、questDispatcher对象,可以把请求转发给其他的Servlet或JSP页面。通常这出现在Servlet进行了验证处理得出结果,需要到另外一个结果页面显示的情形。forward()方法1.ServletContext context=getServletContext();2.RequestDispatcher rd=context.getRequestDispatcher(/Payroll/ShowCalResult.jsp?employeeName=+name+&wage=+wage);3.rd.forward(request,response);其中name、wage是当前ser
17、vlet计算出来的值。sendRedirect()方法response.sendRedirect(Payroll/ShowCalResult.jsp?employeeName=+name+&wage=+wage);9.6 示例示例:使用使用Servlet完成工资计完成工资计算算源文件一览如图:源码InputEmployee.jsp:form id=form1 method=post action=本院全职教师工资计算请输入:姓名:职称:副教授教授本月超额课时为:public class CalAssociateProWage extends HttpServlet public CalAsso
18、ciateProWage()super();protected void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOExceptiontryrequest.setCharacterEncoding(utf-8);response.setContentType(text/html;charset=utf-8);String name=request.getParameter(employeeName);String title=request.getParamet
19、er(employeeTitle);Float extraClasshour=Float.parseFloat(request.getParameter(employeeExtraClasshour);/FulltimeTeacher pt2=new FulltimeTeacher(name,title);pt2.setExtraclasshour(extraClasshour);pt2.calculateWage();/Float wage=pt2.getWage();ServletContext context=getServletContext();RequestDispatcher r
20、d=context.getRequestDispatcher(/Payroll/ShowCalResult.jsp?employeeName=+name+&wage=+wage);rd.forward(request,response);/response.sendRedirect(/Payroll/ShowCalResult.jsp?employeeName=+name+&wage=+wage);web.xml中关于此servlet的配置CalAssociateProWageCalAssociateProWageServletCalculateWage.CalAssociateProWage
21、CalAssociateProWage/CalAssociateProWageShowCalResult.jsp部分源码姓名:工资为:使用session对象public class CalAssociateProWage extends HttpServlet public CalAssociateProWage()super();protected void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOExceptiontryrequest.setCharact
22、erEncoding(utf-8);response.setContentType(text/html;charset=utf-8);String name=request.getParameter(employeeName);String title=request.getParameter(employeeTitle);Float extraClasshour=Float.parseFloat(request.getParameter(employeeExtraClasshour);/FulltimeTeacher pt2=new FulltimeTeacher(name,title);pt2.setExtraclasshour(extraClasshour);pt2.calculateWage();/Float wage=pt2.getWage();HttpSession hs=request.getSession();hs.setAttribute(employeeName,name);hs.setAttribute(wage,wage);response.sendRedirect(Payroll/ShowCalResult.jsp);改造ShowCalResult.jsp姓名:工资为:可看到此时地址栏中并没有请求参数