您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 销售管理 > Web框架技术开发初级实验指导书10级
-1-Web框架技术开发初级实现指导书2012.09-2-WEB框架开发技术实验指导书实验一:建立一个Struts2工程1在MyEclipse中新建web工程2在struts-2.2.1.1-all\struts-2.2.1.1解压struts2-blank.war(最基础的示例程序)3进入struts-2.2.1.1\apps\struts2-blank\WEB-INF\classes下把struts.xml拷到web工程的src下面,因为工程编译完它默认就把src下的文件放到class文件下面。、4.拷类库,在这个项目的lib文件下面拷把jar放入lib后看不见jar文件,是因为MyEclipse默认视图是packageExplorer,如果要看硬盘上对应的视图,应该打开windows-ShowView-other-navigatior4.配置web.xml,参考struts自带的web.xml,把filter的配置拷过来filterfilter-namestruts2/filter-namefilter-classorg.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter/filter-class/filterfilter-mappingfilter-namestruts2/filter-nameurl-pattern/*/url-pattern-3-/filter-mapping第一个示例程序HelloStrutsstrutsconstantname=struts.devModevalue=true/packagename=defaultnamespace=/extends=struts-defaultactionname=helloresult/hello.jsp/result/action/package/struts://localhost:8080/strust2_0100_Introduction/hello或者跳转到hello.jsp,第一个示例程序成功!Struts2读源码配置文件中的filter-classorg.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter/filter-class一看就应该知道它是对应一个类,在jar文件中找到对应的源码编译完的class文件,查看源码:jar文件点右键---properties--JavaSourceAttachmentExternalFolder(外部文件)struts-2.2.1.1-all/struts-2.2.1.1/src/core/src/main/java-4-点击class文件可以查看源码了,假如想看它的doc文档,同样的方法jar文件点右键---properties--JavadocLocation-导入doc就可以在源码中右键或者F1观察对应的文档了。敲尖括号不提示的问题Struts.xml文件头定义了!DOCTYPEstrutsPUBLIC-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN配置:windows---preferences---catalog---。。。xml—xmlCatalog—AddAdd入本地定义当前xml的dtd文件:找到struts2-core-2.2.1.1.jar解压开找到struts-2.1.7.dtd完成,验证代码提示成功!-5-Struts2的运行机制当你在客户端敲首先找到:strust2_0100_Introduction这个webapplication,找到后去执行这个webapplication下的web.xmlTomcat接收到请求之后,会发现这个web.xml下面,配了一个filter,而这个filter过滤所有的url地址,所以当我们在地址栏敲后,会被StrutsPrepareAndExecuteFilter接收到filterfilter-namestruts2/filter-namefilter-classorg.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter/filter-class/filterfilter-mappingfilter-namestruts2/filter-nameurl-pattern/*/url-pattern/filter-mappingStrutsPrepareAndExecuteFilter接收到后url情求后,它首先看namespaceStruts.xmlpackagename=defaultnamespace=/extends=struts-defaultactionname=helloresult/hello.jsp/result/action/package查到“/”后面的hello,它就会去package下面查是否有name属性叫“hello”的action,有的话,找里面对应的result是谁--hello.jspStruts的好处就是:我可以把“请求”和“视图展现”分开,而不是写死。分开的好处就是:如果要换成其他视图,配一下就好了,所以更加灵活。Struts核心的本质就是解决了:把你的请求和最后的结果分开。-6-Struts的namespace示例工程Struts2_0200_NamespaceStruts.xmlstrutsconstantname=struts.devModevalue=true/packagename=frontextends=struts-defaultnamespace=/frontactionname=indexresult/Namespace.jsp/result/action/packagepackagename=mainextends=struts-defaultnamespace=actionname=indexresult/Namespace.jsp/result/action/package/struts所以namespace为空意味着:只要找到一个index.action,没有找到精确的对应的namespace,全部都交给namespace为空的这个package去处理,所以这个package囊括了其他所有package处理不了的action。Struts自定义具体视图的返回示例工程Struts2_0300_Action修改jsp模板字符编码:windows-preferences-JSP修改编码为UTF-8即可IndexAction1.javapublicclassIndexAction1{publicStringexecute(){returnsuccess;}}-7-IndexAction2.javapublicclassIndexAction2implementsAction{publicStringexecute(){returnsuccess;}}真正企业开发只用这第三种!另外两种忘记!IndexAction3.javapublicclassIndexAction3extendsActionSupport{publicStringexecute(){returnsuccess;}}strutsconstantname=struts.devModevalue=true/packagename=frontextends=struts-defaultnamespace=/actionname=indexclass=com.bjsxt.struts2.front.action.IndexAction1resultname=success/ActionIntroduction.jsp/result/action/package/struts具体视图的返回可以由用户自己定义的Action来决定具体的手段是根据返回的字符串找到对应的配置项,来决定视图的内容具体Action的实现可以是一个普通的java类,里面有publicStringexecute方法即可或者实现Action接口不过最常用的是从ActionSupport继承,好处在于可以直接使用Struts2封装好的方法如果不配置class属性,默认执行xwork框架的ActionSupport这个action,这个action就有execute这个方法,returnsuccess。-8-Struts路径问题示例工程:Struts2_0400_Pathstruts2中的路径问题是根据action的路径而不是jsp路径来确定,所以尽量不要使用相对路径。虽然可以用redirect方式解决,但redirect方式并非必要。解决办法非常简单,统一使用绝对路径。(在jsp中用request.getContextRoot方式来拿到webapp的路径)或者使用myeclipse经常用的,指定basePath先点击链接跳转到path.jsp页面在path.jsp页面上有链接ahref=index.jspindex.jsp/a虽然在webRoot上面index.jsp和path.jsp同级,但是点击index.jsp却跳到如果改成ahref=/index.jspindex.jsp/a跳到因为JSP中“/”代表整个站点的根路径而不是应用的根路径。解决方案是:永远使用绝对路径。%Stringpath=request.getContextPath();StringbasePath=request.getScheme()+://+request.getServerName()+:+request.getServerPort()+path+/;%basehref=%=basePath%/request.getContextPath()会拿到webapplication的名称:Struts2_0400_Pathrequest.getScheme()拿到“http”字符串request.getServerName()拿到“localhost”request.getServerPort()拿到“8080”-9-动态方法调用bodyAction执行的时候并不一定要执行execute方法可以在配置文件中配置Action的时候用method=来指定执行哪个方法也可以在url地址中动态指定(动态方法调用DMI)(推荐)ahref=%=context%/user/us
本文标题:Web框架技术开发初级实验指导书10级
链接地址:https://www.777doc.com/doc-4470300 .html