1、 、ControllerServlet.java:请求分发控制器,解析请求中的动作名字,调用动作工厂对象生成的动作对象处理请求,处理后返回的结果为目的URL,控制器再将请求和应答对象转向目标URL、ActionFactory.java:该工厂类将请求中的动作名转换成servlet可以用来完成其工作的动作类、Action.java:接口类,该接口定义所有动作的公共接口、具体Action的实现:指实现了Action接口的类,会被ActionFactory工厂根据请求中的名字创建,从而调用其具体实现的方法处理RequesResponse对象后,返回一个URL,由主控servlet转发给用户。可以理解
2、为一个具体的Action实现类用于处理页面上每一种用户点击(请求)、系统视图View层实现:*.JSP、*.HTML2) 实现源码:控制器Servlet实现Java代码1.packagewxy.MVCDemo.Servlet;2.3.importjava.io.IOException;4.importjavax.servlet.ServletException;5.importjavax.servlet.http.HttpServlet;6.importjavax.servlet.http.HttpServletRequest;7.importjavax.servlet.http.HttpSe
3、rvletResponse;8.9.importwxy.MVCDemo.action.Action;10.importwxy.MVCDemo.action.ActionFactory;11.12./*13.*系统控制器实现14.功能:15.1、解析请求中的命令名16.2、根据请求的命令调用工厂对象创建命令处理对象17.3、调用命令对象处理请求和应答对象,返回目标路径名18.4、本控制器将请求和应答转发至目标路径名19.ServletimplementationclassControllerServlet20.*/21.publicextendsHttpServlet22.privatestat
4、icfinallongserialVersionUID=1L;23.24.publicControllerServlet()25.super();26.27./*28.主控servlet分发用户请求的入口29.30.voidservice(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException31.try32./得到请求的命令名字:解析出*.do请求中*所指代的字符串,即动作名字33.StringActionName=getActionName(request);34.Sy
5、stem.out.println(requestActionis:+ActionName);35./根据请求的动作名,得到控制器servlet中配置的Action实现类名字36.ActionClassName=this.getInitParameter(ActionName);37.ActionClassName+ActionClassName);38./通过工厂类创建命令对象39.action=ActionFactory.getIns().getAction(ActionClassName);40./使用动作对象处理动作,返回结果为处理后要输出的目标页面41.URL=action.execu
6、te(request,response);42.if(URL!=null)43./输出目标页面44.destURLis:+URL);45.getServletContext().getRequestDispatcher(URL).forward(request,response);46.47.catch(Exceptione)48.e.printStackTrace();49.getServletContext().getRequestDispatcher(/error.jsp).forward(request,50.51.52.53.解析到请求中的“命令”字54.param55.return
7、56.57.protectedgetActionName(HttpServletRequestrequest)58.path=request.getServletPath();59.returnpath.substring(1,path.lastIndexOf(.);60.61.2Action对象工厂类实现wxy.MVCDemo.action;2./*3.命令对象工厂类实现4.根据命令名字,创建命令对象5.ActionFactory是一个单实例类(整个系统只需要使用其一个对象)6.authorwxy7.9.publicActionFactory10.单实例访问方法12.单实例对象getIns(
8、)if(null=ac)ac=newActionFactory();ac;21.根据具体的action类名字创建Action对象actionClass具体的Action类全名Action类型对象getAction(StringactionClass)actionInstance=null;Classc=Class.forName(actionClass);actionInstance=(Action)c.newInstance();actionInstance;/不需要创建对象ActionFactory()ac=null;38.3Action接口类定义6./*系统中的命令处理器接口9.11.p
9、ublicinterface所有的具体Action实现这个接口请求对象reponse应答对象结果页面execute(HttpServletRequestreponse);19.web.xml配置1.2.description/descriptiondisplay-name控制器ControllerServletservlet-nameControllerServletservlet-classwxy.MVCDemo.Servlet.ControllerServletinit-param!-将具体Action名字和全类配置到servlet参数中-param-nameloginActionpara
10、m-valuejava.action.LoginAction/init-param/servletMVCWebwelcome-/welcome-将所有以.do路径结尾的请求发送到主控servlet处理servlet-mappingurl-pattern*.do/servlet-mapping23.4具体的Action实现类由login.jsp输出账户密码,如果账号正确,则在Session中放入用户对象,转向主页;如果错误,转向登录页面LoginActionimplementsActionrequest,HttpServletResponsereponse)UserName=request.ge
11、tParameter(UserName);pwd=request.getParameter(pwd/数据库操作/.if(UserName.equals(wxy)&pwd.equals()/将用户对象放入sessionrequest.getSession().setAttribute(,UserName);/mainPage.jsp;ERROR_MSG账号或者密码输入有误!/login.jsp28.RegUserAction.do DisplayMainPageAction.do 。 (记着在web.xml中配置)5系统view层实现 login.jsp%pagelanguage=javacontentType=text/html;charset=utf-8pageEncoding=utf-8%3.DOCTYPEhtmlPUBLIC-/W3C/DTDHTML4.01Transitional/EN4.5.6.metahttp-equiv=Content-Typecontent=7.用户登录8.9.10.密码:passworduserPwdsubmitvalue=登录/14.15.16.mainPage.jspInserttitlehereh1style=color:red%=request.getAttribute()登录成功11.12.
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1