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重名问题

浙公网安备 33010602011771号