您的位置:首页 > 编程语言 > Java开发

Struts2学习笔记(2)

2016-09-19 19:24 369 查看
1执行过程:

浏览器端的url地址----》通过http协议发送到Tomcat服务器-----》Tomcat服务器根据url地址找到对应的webapplication------》读对应webapplication对应的web.xml------->

找到相应filter(过滤所有地址)该filter处理所有的请求。具体请求如下:找到struts.xml的namespace,并找请求对应的action,找到对应的class对象(若没有指定class,则用的是默认的class:ActionSupport(Xwork里的,要看到它要加载Xwork)),new一个其action对象,执行其execute方法,并根据其return的值,将对应的result结果对应的页面发送给浏览器。

2好处:请求和展现(视图)分开,使得二者的改变和扩展更加灵活(》??????????)

3 拷贝项目之后记得更改web context root。具体是:properties--->web project settings--->右边设置。

4  Eclipse引入项目:File-----》import-------》existing projects into workspace  ------》browse选择项目根路径------》最好选择上Copy project into workspace 将项目引入到workspace中。需要注意的是,原项目引入的JRE环境,可能与自己的路径不一样。需要删除原来的RRE重新引入。

5  为了方便引入和删除,在建立项目的时候,可以建立一个User library,将所需引入的jar包都放在这里,并有固定的名字。比如struts2需要的jar包都放入名为struts2lib的lib库中,一次引入。具体方式是:Windows---》preferences----》Java---》build path---》user library 建立自己的user库并将其导入。

5:myeclipse下的web工程导入eclipse后需要设置才可以运行。具体方法:
http://www.cnblogs.com/zhouyalei/archive/2013/01/30/2882651.html
把项目变成Web项目,在项目上右键-->Properties-->选择Project Facets-->点击Convert to faceted form...

选中红线框住的两项(java和Dynamic Web Module)
点OK,然后到项目根目录去找到.settings文件夹下的org.eclipse.wst.common.project.facet.core.xml文件,用记事本打开

把jst.web 的version换成2.5然后保存
在eclipse中按F5刷新项目
在项目上右键-->Properties-->选择Deployment Assembly-->选中WebContent 点右边的Remove按钮
然后,点Add按钮,选择Folder-->Next

选中WebRoot后,点Finish-->然后点OK
删掉WebContent文件夹

把项目添加到Tomcat中,就能运行啦

6 查看ActionSupport源码:ActionSupport 与xwork相关。xwork源码在 struts2中有。加载上之后可以看到。

7 struts.xml知识点:

  <!--开发模式。struts.devMode的值改为ture可以将更改的值实时反馈。若不改,在struts.xml里做出更改不能立刻显示结果.需要重启服务器或者重新加载  -->

    <!-- package用以区分重名的情况 -->

    <!-- namespace决定了action的访问路径。写上什么,就需要在访问对应action的时候带上什么路径。比如,

    namespace="/aaa 则访问其中的bbb 的action则需要用 /aaa/bbb " -->

    <!-- namespace 为空的话,可以接受所有路径的action。比如:namespace=""下有一个index的action 则,不管路径是/abc/index或者

    /ad/sdf/sfsd/sdfs/index都可以访问到对应的index所对应的jsp。囊括了其余package值处理不了的action

    寻找过程是:先精确匹配,即寻找namespace对应的action,若没有找到,则找namespace=""的action。若还没有就会报错。 -->

    <!-- action 里面的class 指的是,访问该action的时候,找到对应的class,执行里面的execute方法,返回的string类型的值被struts2当做一个action -->

举例:

<package name="my" extends="struts-default" namespace="/manage">

    <!-- 定义处理请求URL为login.action的Action
-->

        <action name="backLogin" class="org.qiujy.web.struts2.action.LoginAction">

        <!-- 定义处理结果字符串和资源之间的映射关系 -->

            <result name="success">/success.jsp</result>

            <result name="error">/error.jsp</result>

        </action>

    </package></struts>
中:

对于包my:指定了命名空间/manage,则该包下所有的Action处理的URL应该是“命名空间/Action名”。如上名为backLogin的Action,它处理的URL为:
http://localhost:8080/userlogin_struts2/manage/backLogin.action
8关于 build path 导入的jar包 和lib里面的jar包:通过Eclipse的 User Libranry 将jar导入 Eclipse里面,编译没有问题,运行的时候就报class文件没有定义原因:
用Java Build Path导入包和把包复制到lib下是有区别的,它俩其实不会冲突,也没有什么关系的,Java Build Path是我们编译需要的包,在比如在import ***.***.***时如果没用Java Build Path导入包的话类里面就有红叉,说不识别这个类;导入到lib下是程序运行时需要的包,即便用Java Build
Path导入过的包,没放到lib下,运行项目时会出现ClassNotFoundException的异常.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  struts2.0