struts2

下载struts2需要的jar包
http://struts.apache.org/download.cgi
我们这里下载的是struts-2.5.16-min-lib.zip

需要用到的jar包

commons-fileupload-1.3.3.jar
commons-io-2.5.jar
commons-lang3-3.6.jar
freemarker-2.3.26-incubating.jar
javassist-3.20.0-GA.jar
log4j-api-2.10.0.jar
ognl-3.1.15.jar
struts2-core-2.5.16.jar

创建web项目myStruts

package com.yyq.action;
import com.opensymphony.xwork2.ActionSupport;
public class HelloWorld extends ActionSupport {

    private static final long serialVersionUID = -337280391072605040L;
    private String message;
    @Override
    public String execute() throws Exception {
        message = "Hello World,Struts2";
        return SUCCESS;
    }
    public String getMessage(){
        return message;
    }
}

index.jsp

<%@ page contentType="text/html;charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title><s:property value="message" /></title>
</head>
<body>
    <p>aaaaaaa</p>
    <s:property value="message" />
</body>
</html>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
          http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
           version="3.0">
<display-name>struts2_helloworld</display-name>
    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>  
    
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>

在src目录下创建structs.xml

<?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="action" namespace="/" extends="struts-default">
        <action name="HWAction" class="com.yyq.action.HelloWorld">
            <result>/index.jsp</result>
        </action>
    </package>
</struts>

配合tomcat启动,并访问http://localhost:8080/myStruts/HWAction.action

 参考:https://www.cnblogs.com/yangyquin/p/5434364.html

https://www.cnblogs.com/xujingyang/p/6734252.html

http://blog.csdn.net/qq_32166627/article/details/70050012

 

常见的Web层的框架
* Struts1
* Struts2
* Webwork
* SpringMVC
Struts2是一个基于MVC设计模式的Web层框架

 


默认的命名空间是空字符串””,也就是不设置namespace属性时候的命名空间。我们在匹配一个action的时候,先到它指定的命名空间中去找,如果没有再到这个默认的命名空间中去找。Struts2还支持根命名空间(“/”),当一个request直接请求context path下面的资源时,struts2会首先到跟命名空间下去寻找匹配的action,例如请求是http://server/myapp/bar.action,那么我们首先会去”/”命名空间下去寻找这个action,下面给给出了一个namespace的样本:
关于如何从URI映射到一个action中我做了一些测试,发现可以遵循如下的一条规则:
1.获得请求路径的URI,例如url是:http://server/myapp/path1/path2/path3/test.action
2.首先寻找namespace为/path1/path2/path3的package,如果存在这个package,则在 
这个package中寻找名字为test的action,若找到则执行,否则报错;如果不存在这
个package则转步骤3;
3.寻找namespace为/path1/path2的package,如果存在这个package,则在这个package 
中寻找名字为test的action,若找到则执行,否则报错;如果不存在这个package
则转步骤4;
4.寻找namespace为/path1的package,如果存在这个package,则在这个package中寻
找名字为test的action,若找到则执行,否则报错;如果仍然不存在这个package,
就去namaspace为空字符串的package下面去找名字为test的action,如果还是找不
到,页面提示找不到action。
这里有几点特殊的情况要说明一下,如下所示:
1.如果匹配到了多个package,比如上述流程中有多个namespace为/path1/path2/path3
的package,此时按照package出现的顺序从后向前的顺序查找action,直至找完为止。
2.如果在一个package中有多个name属性相同的action,那么执行追有一个action。比如上述流程中,有一个namespace为/path1/path2/path3的package,它里面含有多个名字为test的action,那么选择最后一个执行。
1.package中的name只是一个标识,你可以随意命名,对其它地方没有任何影响;
2.action中的name对应你页面中的一个action跳转,比如你页面有个表单提交: <form action="struts.xml中action里的name">
3.namespace是用于区分包中相同的类,如果没写,说明该包为默认空间。namespace实际上是在包的基础上对Action的进一步组织和划分,可以解决Action重名问题

posted @ 2018-02-01 16:39  牧 天  阅读(138)  评论(0)    收藏  举报