2. 配置 struts2 !--圣思园Struts 2.2笔记

最小依赖JAR包:

commons-fileupload-1.2.1.jar  :文件上传。
commons-io-1.3.2.jar  :文件上传commons-fileupload-1.2.1.jar包需要依赖该包。
commons-logging-1.0.4.jar :日志处理。
ognl-3.0.jar :ognl表达式。
struts2-core-2.2.1.1.jar  :struts2 依赖。 
xwork-core-2.2.1.1.jar :struts2 依赖。
freemarker-2.3.16.jar 
javassist-3.7.ga.jar :该jar被ognl依赖,在之前的版本中该jar直接被放到ognl的jar之中了,所以不需要引入该jar.
2.2开始javassist被从ognl之中分离出来,需单独引入。

Struts 2.2.1的内部变化主要有:

  • XWork已经迁移到了Apache软件基金会,现在成为了Struts 2的一部分。新版XWork 2.2.0也随着Struts 2.2.1一同发布。未来,XWork将会迁移到Struts 2中。
  • XWork Maven artifact现在已位于<groupId>org.apache.struts.xwork</groupId>下。
  • XWork使用了最新版的OGNL 3.0,OGNL源代码仓库则位于Github上。
  • Javassist依赖被OGNL排除,要记得将其包含进来,除非在JBoss服务器上加载应用。
  • 解决了XWork一些突出的缺陷,感兴趣的读者可以参考CVE-2010-1870: Struts2/XWork remote command execution来了解详情。
  • 所有的示例应用(除了jboss-blank)都包含了Javassist依赖。
  • 新的jboss-blank示例应用使用了JBoss服务器,它没有将jboss-blank库包含进来,因为JBoss服务器已经提供了。
  • 增加了新的Freemarker缓存选项,这会提升标签的渲染速度,感兴趣的读者可以参考WW-3467并了解关于FreeMarker的更多信息。

Struts 2.2.1修复了之前版本的众多bug,主要修复列举如下:

  • <s:reset type="image">标签上缺少src属性
  • Struts2 showcase无法在JBoss 5.1上部署
  • struts-sitemesh-plugin 2.1.8中FreeMarkerPageFilter的失效问题
  • XWork FileManager不会解码URL
  • ConventionUnknownHandler与rest插件的协作问题
  • StrutsSpringTestCase的内存泄漏问题
  • css_xhtml主题无法应用在IE8上,在其他浏览器上也无法正常使用
  • javassist在JBoss 5.1上的问题

Struts 2.2.1的主要改进列举如下:

  • 升级至OGNL 2.7
  • 文件上传:可以对allowedTypes参数设置不同的File Content Type值
  • 完全集成了SiteMesh 2、Freemarker 2.4.2及Velocity 1.3
  • 将xwork核心迁移至Struts 2
  • 将FreeMarker升级至2.3.16
  • 将Velocity引擎升级至1.6.3

测试:

建立JSP:/reborn/rebornWeb/webs2/login.jsp
注:对于没有后缀的请求如login,过滤器会自动给其添加后缀.action,即login.action
    <form action="login">
        USER:<input id="username" name="username" /><BR/>
        PASSWORD:<input type="password" id="password" name="password" /><BR/>
        <input type="submit" value="submit"/>
    </form>

部署描述符配置:集成struts2. 
<filter>
    <filter-name>struts2filter</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>struts2filter</filter-name>
    <!-- 所有请求都将被该过滤器过滤,则struts2被集成 -->
    <url-pattern>/*</url-pattern>
</filter-mapping>

在src目录下添加struts.xml文件/src/struts.xml.
myeclipse会将该文件COPY到\WEB-INF\classes目录下.
struts.xml需引入http://struts.apache.org/dtds/struts-2.0.dtd
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC 
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
DTD:
XML 文件的文件类型定义(Document Type Definition)可以看成一个或者多个 XML 文件的模板,在这里可以定义 XML 文件中的元素、元素的属性、元素的排列方式、元素包含的内容等等。
DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。
DTD(Document Type Definition)概念缘于 SGML,每一份 SGML 文件,均应有相对应的 DTD。对 XML 文件而言,DTD 并非特别必要,well-formed XML 就不需要有 DTD。DTD 有四个组成如下:
  • 元素(Elements)
  • 属性(Attribute)
  • 实体(Entities)
  • 注释(Comments)

由于 DTD 限制较多,使用时较不方便,近来已渐被 XML Schema 所取代。


新建类:
package discovery.struts2.login;
public class LoginAction {
    private String username;
    private String password;
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    
    public String execute(){
        return "success";
    }

}
struts.xml配置:struts-default不要写错。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC 
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
    <struts>
        <package name="mystruts2" extends="struts-default">
//struts-default也是一个package,它拥有的东西将被继承下来.

               //过滤器获得请求之后,便从struts.xml文件中寻找对于的配置,创建LoginAction的一个实例,
               //并调用该实例的setXX()方法.
               //并将数据(username password)放置到request作用域中.
               //所以结果页面中可以通过${requestScope.username }获取值.
               //调用完所有set方法之后,调用execute()方法.返回结果跟<result>的name属性匹配,
               //跳转到/webs2/loginSuccess.jsp页面
            <action name="login" class="discovery.struts2.login.LoginAction">
                <result name="success">/webs2/loginSuccess.jsp</result>
            </action>
        </package>
    </struts>
struts-default 对应:
完成类型转换,自动赋值等操作。

操作演示:
submit


认识过滤器:org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
struts2-core-2.2.1.1.jar  关联源代码 D:/struts-2.2.1.1/src/core/src/main/java
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) res;
        try {
            prepare.setEncodingAndLocale(request, response);
            prepare.createActionContext(request, response);
            prepare.assignDispatcherToThread();
            if ( excludedPatterns != null && prepare.isUrlExcluded(request, excludedPatterns)) {
                chain.doFilter(request, response);
            } else {
                // 对request再封装!
                request = prepare.wrapRequest(request);
                ActionMapping mapping = prepare.findActionMapping(request, response, true);
                if (mapping == null) {
                    boolean handled = execute.executeStaticResourceRequest(request, response);
                    if (!handled) {
                        chain.doFilter(request, response);
                    }
                } else {
                    execute.executeAction(request, response, mapping);
                }
            }
        } finally {
            prepare.cleanupRequest(request);
        }
    }

生成struts2 API:

新建项目:
找到源代码:
将其放入src,并添加struct2 的JAR.
添加servlet-api.jar、jsp-api.jar  !



转 chm
安装:htmlhelp.exe
将jd2chm.exe放置到struts2_doc目录下.







posted @ 2014-02-15 20:47  龍變  阅读(538)  评论(0编辑  收藏  举报