Servlet基础编程2分析_第1页
Servlet基础编程2分析_第2页
Servlet基础编程2分析_第3页
Servlet基础编程2分析_第4页
Servlet基础编程2分析_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

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

文档简介

第9章Servlet编程本课教学内容Servlet的工作原理Servlet生命周期Servlet的API如何接收请求并返回响应MVC模式的原理与应用回顾Servlet概念

应用在服务器端接收客户端请求并作出响应的JAVA类Servlet作用

Servlet技术主要完成大量逻辑处理,可以处理浏览器请求,也可处理一个客户端的应用程序请求,可以访问数据库,进行计算处理,将结果返回客户端Servlet创建

Servlet类继承自HttpServlet,覆盖doGet、doPost方法之一或全部Servlet的配置与部署

需要配置<servlet>和<servlet-mapping>两个节点,其中子节点包括<servlet-class>、<servlet-name>、<url-pattern>Servlet的测试

需在地址栏输入http://IP/Port/WebContextName/servletURL来请求该ServletServlet生命周期Servlet运行在Servlet容器中,其生命周期由容器来管理。Servlet的生命周期通过javax.servlet.Servlet接口中的init()、service()和destroy()方法来表示。Servlet的生命周期包含了下面4个阶段:Servlet生命周期1、实例化Servlet容器创建Servlet的实例2、初始化该容器调用init()方法3、服务如果请求Servlet,则容器调用service()方法销毁实例之前调用destroy()方法4、销毁完成初始化工作,如建立数据库连接、获取配置信息,每个实例只初始化一次获取请求参数,并根据请求方式GET或POST调用doGet()或doPost()方法当WEB容器被关闭时会调用destroy()方法销毁Servlet实例,以释放它所使用资源Servlet生命周期Servlet的生命周期由Servlet容器(如:Tomcat)控制servlet容器处理请求过程:HTTP请求容器请求响应12Servlet实例Servlet执行service(请求,响应)34doGet(请求,响应)5响应6通过URL找到生命周期相关方法public

classHelloServletextendsHttpServlet{

public

voidinit()throwsServletException{ System.out.println("初始化时第一次调用!");}

public

voiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{ PrintWriterout=response.getWriter(); out.println("<HTML>"); out.println("<HEAD><TITLE>HelloServlet</TITLE></HEAD>"); out.println("<BODY>"); out.println("你好"+newDate()); out.println("</BODY></HTML>"); }

public

voiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{ doGet(request,response);}

public

voiddestroy(){System.out.println(“释放资源!"); }}初始化方法doGet()方法doPost()方法销毁方法Servlet与JSP分工首先考虑以下问题,既然Serlvet比JSP代码复杂,什么情况下写成Servlet?以下情况适合写成Servlet处理请求,调用DAO某些纯编程的场合相反如果是一些与显示相关的内容,可以考虑写成JSP。Servlet与JSP分工思考:以下哪些工作适合写成JSP?哪些适合写成Servlet?显示登录表单。接受登录表单中的账号、密码并调用DAO进行验证。模糊查询学生界面获取查询关键字,调用DAO查询。显示查询的结果结论:1、3、5为显示界面适合写成JSP,2、4为处理请求适合写成Servlet!Servlet内实现跳转servlet可以跳转到另一个servlet或Jsp页,并且可以数据传递过去。跳转方式为两种:(1)重定向,这种方式属于客户端跳转,不能传递请求request,意味着跳转后页面取不到上一页面请求对象,容器重新创建新的request请求对象。也就是说,用户提交的表单参数在重定向之后的页面中将无法取到。如果用这种方式跳转,要在请求跳转和跳转目标页共享数据,需使用session对象。重定向后浏览器地址栏能看到地址发生变化,显示为跳转后地址。 serlvet内重定向语句与JSP相同,如下:

response.sendRedirect(“url”);Servlet内实现跳转关于重定向中URL路径的说明:url通常使用相对路径,如果以”/”开头是相对于WEB服务器的根路径(http://localhost:8080)。如重定向response.sendRedirect(“/stuSystem/index.jsp”);

表示请求的文件完整路径为

http://localhost:8080/stuSystem/index.jsp如果不以”/”开头的相对路径则相对于WEB应用程序根目录(http://localhost:8080/stuSystem/),如:response.sendRedirect(“index.jsp”);

则重定向的到达页面完整路径为http://localhost:8080/stuSystem/index.jspServlet内实现跳转(2)服务器内跳转,可以传递请求对象request,请求跳转和跳转目标页可以共享请求数据。跳转后浏览器地址栏能看不到地址发生变化,仍显示为跳转前地址。作用等价于JSP中的<jsp:forward>标签。Servlet内实现跳转Servlet中服务器内部跳转的实现:ServletContexapplication

=this.getServletContex();

RequestDispatcherrd

=application.getRequestDispatcher(“url”);

rd.forward(request,response);注:这里的url必须以”/”开头的路径,是相对于当前WEB应用程序根路径(http://localhost:8080/stuSystem)一个简单用户登录的例子publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{Stringuname=request.getParameter("username");Stringupass=request.getParameter(“password");Useruser=null;user.setUname(uname);user.setUpass(upass);UserDAOuserDAO=newUserDAO();user=userDAO.getUserByUname(uname);if(user!=null){HttpSessionsession=request.getSession();session.setAttribute("user",user);response.sendRedirect("index.jsp");}else{ response.sendRedirect("error.jsp");

}}request.setAttribute("user",user);ServletContexapplication=this.getServletContex();RequestDispatcherrd=application.getRequestDispatcher(“/index.jsp”);rd.forward(request,response);或者将查询到的JavaBean对象user存入request,并将request转发给下一JSP页面,这样user只在下一个页面中可见,使用forward方法跳转获取用户输入参数创建JavaBean数据库操作将查询到的JavaBean对象user存入session,以使得后面多个JSP页面可获取到user对象,使用sendRedict方法跳转MVC模式MVC是三个单词的缩写,分别是模型(Model),视图(view)和控制器(Controller)。Model层实现系统中的业务逻辑,通常可以用javabean或EJB实现。View层用于与用户的交互,通常用JSP来实现。Controller层是Model与View之间沟通的桥梁,通常可以由servlet来实现,它可以分派用户的请求,并选择恰当的视图以用于显示,同时它也可以解释用户的输入并将它们映射为模型层可执行的操作。MVC模式的优势各施其责,互不干涉在MVC模式中,三个层各司其责,所以如果一旦哪一层的需求发生了变化,就只需要修改相应层中的代码而不会影响到其他层中的代码。有利于开发中的分工在MVC模式中,由于按层把系统分开,那么就能更好的实现开发中的分工。网页设计人员可以开发视图层,而其他开发人员可以开发控制层、模型层。有利于组件的重用分层后更有利于组件的重用。如控制层可独立成一个能用的组件,视图层也可以做成通用的操作界面。MVC模式架构Web服务器浏览器HtmlJSP(视图)JavaBeans(模型)数据库请求响应Servlet(控制器)选择视图实例化请求图MVC模式架构示意图“用户登录”模块的MVC模式MVC结构设计Model层:由Manager.java、Teacher.java、Student.java、ManagerDao.java、TeacherDao.java、StudentDao.java作为Model层,其中Manager、Teacher、Student用来封装管理员、教师、学生对象信息(编号、名称、密码等),XXXDao用来实现连接数据库,实现对相应表的增加、查询、修改、删除等操作。

View层:用来显示登陆界面、登陆成功后用户角色的入口界面的JSP页面,如登陆界面index.jsp、管理员入口studentManage/stuAdminEntry.jsp、学生入口studentEntry/stuEntry.jsp、教师入口teaherEntry/teaEntryjsp。Controller层:控制层由Servlet来担任,本模块中loginServlet.java来担任登陆验证的控制层,它负责获取用户登陆信息,根据用户登陆身份选择调用相应DAO,连接数据库查询该用户是否存在,若存在则将该用户对象放入session并跳转到相应入口界面,若用户对象不存在则跳转回登陆界面lndex.jsp,给出“登陆失败”的提示信息,要求用户重新登陆。“用户登录”模块调用流程servlet.LoginServletindex.jsp数据库t_student表

t_teacher表t_manager表manEntry.jspdao.LoginDao判断用户角色vo.Managervo.Teachervo.StudentteaEntry.jspstuEntry.jspController控制层Model模型层JavaBeanView视图层实现程序:LoginServlet.java

登录处理控制器的创建

在src目录下选择【new】菜单创建【Servlet】,创建LoginServlet.java

类,package包为servlet,继承自javax.http.servlet.HttpServlet父类,创建过程如图:

Servlet的创建Servlet创建,指定Package包和Name类名Servlet配置创建,指定ServletName及访问Servlet的映射URL实现程序:LoginServlet.java作为登录请求处理控制器,需重写其中的doGet()和doPost()方法。

登录处理控制器的作用用来接收登录表单数据,并调用dao.LoginDao操作访问数据库,LoginDao会根据用户角色不同查询t_manager管理员表、t_teacher教师表或t_student学生表。查询到该用户则表明登录成功,并将用户名保存至session。这里模拟管理员登录过程,管理员输入用户名和密码合法后将跳转到studentManage/stuAdmin.jsp页面。LoginServlet.java关键源码(一)LoginServlet.java关键源码(二)doPost()方法与doGet()方法的处理相同,doPost()中调用doGet()实现程序:index.jsp登录页面将用户登录表单请求提交给LoginServlet控制器处理,LoginServlet控制器的访问URL为/login,将index.jsp的form的action属性做修改如下,请求LoginServlet的URL: <formaction=“/stuSystem/login”name=“loginform”method=“post”>

或<formaction=“login”name=“loginform”method=“post”>请求的servlet的URL相对路径表示有/stuSystem/login和login两种写法,前者相对web服务器根目录(http://localhost:8080),后者相对web应用程序根目录(http://localhost:8080/stuSystem/)程序说明:

LoginServlet配置文件web.xml在webRoot/WEB-INF目录下,web.xml对Servlet的名字,对应的类以及访问该类的URL进行了部署,具体内容为:<?xmlversion="1.0"encoding="UTF-8"?><web-appversion="2.5"

xmlns="http:///xml/ns/javaee"

xmlns:xsi="/2001/XMLSchema-instance"

xsi:schemaLocation="http:///xml/ns/javaee

/xml/ns/javaee/web-app_2_5.xsd"><servlet><servlet-name>LoginServlet</servlet-name><servlet-class>servlet.LoginServlet</servlet-class></servlet><servlet-mapping><servlet-name>LoginServlet</servlet-name><url-pattern>/login</url-pattern></servlet-mapping>

<welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list></web-app>程序说明:通过登录控制器处理,管理员登录成功后会跳转到管理员主界面studentManage/stuAdmin.jsp,并在studentManage/stuAdmin.jsp的左框架的studentManage/left.jsp页面获取登录者姓名并显示欢迎。studentManage/Left.jsp做如下修改:

<%Stringusername=(String)session.getAttribute("uname");%><%if(null!=username&&!"".equals(username)){%><p><%=username%>,欢迎你!<ahref="../logout.jsp">退出</a></p><divid="menu"><ul>学生信息管理

<li><ahref="lookStudent.jsp"

target="main">学生信息查询</a></li><li><ahref="addStudent.jsp"

target="main">学生信息添加</a></li><li><ahref="deleteStudent.jsp"

target="main">学生信息删除</a></li><li><ahref="updateStudent.jsp"

target="main">学生信息修改</a></li></ul> ……</div><%}else{%><scripttype="text/javascript">alert("请先登录!");window.parent.location.href="../index.jsp";</script><%}%>MVC模式应用举例二设计使用MVC开发模式实现电子商城中“新品上市”模块功能功能说明用户单击首页上“新品上市”超链接,可以在右下方div框架中显示出所有的新品的名称、价格、介绍、图片等信息。显示效果如图:如用户已登陆,则可以显示出“购买”按钮,否则只显示“查看”按钮,显示效果如下图:MVC结构设计Model层:由Goods.java和GoodsDao.java两个类作为Model层,其中Goods用来封装商品信息(商品编号、商品名称、商品价格等,与数据库商品表字段一致),GoodsDao用来连接数据库,并实现对新品、特价商品的增加、查询、修改、删除相应操作方法。

说明:在数据库中新品是指newgoods=1的所有商品,

特价商品是sale=1的所有商品。View层:JSP技术作为View表现层,采用Html标签与java代码混合的形式。该模块包括用来显示新品和特价商品的JSP页面,如显示新品的newGoods.jsp,显示特价商品的saleGoods.jspController层:控制层由Servlet来完成,作为模型层与试图层的中间层来实现请求处理与显示的控制任务。本模块中NewGoodsServlet.java来担任新品上市的控制层,它负责调用GoodsDao的getNewGoods()方法查询得到所有新品的集合,并将新品集合放入request中转发给newGoods.jsp,在newGoods.jsp中显示出所有新品的信息。“新品上市”模块的调用流程servlet.NewGoodsServlettop.jspdao.GoodsDaovo.Goods数据库newGoods.jspModel模型层JavaBeanController控制层View视图层NewGoodsServlet.java新品上市控制器packageservlet;importjava.io.IOException;importjava.io.PrintWriter;importjava.util.ArrayList;importjavax.servlet.RequestDispatcher;importjavax.servlet.ServletContext;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importdao.GoodsDao;importvo.Goods;publicclassNewGoodsServletextendsHttpServlet{@Override//重写doGet方法publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{ doPost(request,response);//调用doPost() }@Override//重写doPost方法publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{

//实例化商品集合对象al ArrayList<Goods>al=newArrayList<Goods>(); GoodsDaogdao=newGoodsDao();//实例化数据访问对象gdaotry{ al=gdao.getNewGoods();//getNewGoods方法获取新品集合}catch(Exceptione){ e.printStackTrace();}//将新品集合存入request对象request.setAttribute("newGoods",al);//获取Servlet上下文环境对象ServletContextsc=this.getServletContext();//跳转到newGoods.jsp页面,并将请求转发到该页面RequestDispatcherrd=sc.getRequestDispatcher("/newGoods.jsp");rd.forward(request,response);}}【top.jsp】请求NewGoodsServlet控制器 <td><ahref=“/shop/NewgoodsServlet”target=“main_frame”>新品上 市</a></td>【newGoods.jsp】显示新品上市

<%Goodsg=newGoods(); ArrayList<Goods>al=(ArrayList)request.getAttribute("newGoods");for(inti=0;i<al.size();i++){ g=al.get(i); intid=g.getId(); Stringpicture=g.getPicture(); Stringgoodsname=g.getGoodsname(); Doubleprice=g.getPrice(); Stringintroduce=g.getIntroduce();%>【web.xml】servlet配置

<servlet> <servlet-name>NewgoodsServlet</servlet-name> <servlet-class>servlet.NewgoodsServlet</servlet-class></servlet><servlet-mapping> <servlet-name>NewgoodsServlet</servlet-name> <url-pattern>/NewgoodsServlet</url-pattern></servlet-mapping>MVC模式应用举例三使用MVC开发模式设计实现电子商城中“购物车”模块功能需求分析用户单击首页上“购物车”超链接,可以对购物车中的商品信息进行查看。此操作只对登陆用户有效,所以在查看前需对session检查判断用户是否登陆,若未登陆则给出提示要求用户“需要先登陆再购物”。用户登陆后查看购物车,若购物车为空则跳转至购物车为空页面,并在该页面提供“购买商品”超链接,用户单击后跳转至首页继续购物,该页面显示效果如下:若购物车不为空则显示出购物车中的每一项商品信息(包括编号、商品编号、商品名称、商品价格、商品数量、单价、合计总金额)用户可以选中购物车中某商品,从购物车中删除可以清空购物车,跳转至购物车为空界面MVC结构设计Model层:vo.CartItem:封装购物车中的一项商品信息(商品编号id,商品名称goodsname、商品价格price、商品数量goodsnumber)vo.Goods:封装商品的全部信息dao.GoodsDao:增加getGoodById(intid)方法,根据id查出该商品全部信息。View层:cart_null.jsp:购物车为空界面cart_see.jsp:查看购物车界面cart_move.jsp:删除购物项并跳转回cart_see.jspcart_clear.jsp:清空购物车并跳转回cart_see.jspController层servlet.CartAddServlet:1)获取用户购买商品的id,调用GoodsDao查询到该商品全部信息,并将其中部分信息保存至CartItem中。2)判断购物车中是否已有该商品,如果已有则更新该购物项的商品数量,没有则将该商品加入购物车。3)将购物车放入session并将请求转发到cart_see.jsp“购物车”模块调用流程CartAddServletGoods.jspdao.GoodsDaovo.Goods数据库cart_see.jspModel模型层JavaBeanController控制层View视图层cart_move.jspGoods.java封装商品对象CartItem.java封装购物项对象GoodsDao.java(一)GoodsDao.java(二)web.xmlCartAddServlet.java购物车添加控制器packageservlet;publicclassCartAddServletextendsHttpServlet{

温馨提示

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

评论

0/150

提交评论