struts开发步骤:
1、导入8个JAR包
struts2-core-2.3.4.1.jar | Struts 2框架的核心类库 |
Xwork-core-2.3.4.1.jar | XWork类库,Struts 2的构建基础 |
Ognl-3.0.5.jar | Struts 2使用的一种表达式语言类库 |
freemarker-2.3.19.jar | Struts 2的标签模板使用类库 |
commons-fileupload-1.2.2.jar | Struts 2文件上传依赖包 |
javassist-3.11.0.GA.jar | 代码生成工具包 |
commons-lang3-3.1.jar | Apache语言包,是java.lang包的扩展 |
commons-io-2.0.1.jar | Apache IO包 |
2、配置web.xml文件,添加struts2的过滤器
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3、创建JSP视图页面
<h1>Hello World</h1>
<div>
<h1>
<!-- 显示Struts Action中message属性内容 -->
${message}
</h1>
</div>
<hr />
<div>
<form action=“hello">
请输入您的姓名:
<input name="name" type="text" />
<input type="submit" value="提交" />
</form>
</div>
4、创建action的java类
public class HelloWorldAction {
private String name = ""; // 用户输入的姓名
private String message = ""; // 向用户显示的信息
/**
* 当Struts 2处理用户请求时,在默认配置下调用的方法
*/
public String execute() {
// 根据用户输入的姓名,进行“Hello,XXXX!”的封装
this.setMessage("Hello,"+this.getName()+"!");
// 处理完毕,返回“ok”字符串
return “ok";
}
… //省略setter、getter方法
}
5、配置struts.xml文件,设置视图关联
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="demo" namespace="" extends="struts-default">
<action name="hello" method="excute" class="action.HelloAction">
<result name="ok">/index.jsp</result>
</action>
</package>
</struts>
Struts.xml文件详解1
package节点类似JAVA中的包,STRUTS2引用包的概念;
name属性就是包名,可以根据业务或功能分类定义不同的包,避免命名冲突;
namespace类似于命名空间,决定内部所有的ACTION访问URL的父级地址,
如(namespace=“/demo/page”,以下访问的路径就需要加上“http://localhost:8080/项目名/demo/page/”);
extends 属性必须写上,而且值必须是“ struts-default” ,这样才能够实现 struts2 的功能
<package name="base" extends="struts-default">
</package>
action节点可以有多个,表示同个包中多个动作指向URL;
action节点中的name属性是指定访问时的URL文件名,如上所示的的完整URL是:http://localhost:8080/项目名/demo/page/hello;
class属性是指定当前URL所指向的action的完整类名,如果不指定值,则默认是XWORK包中的ActionSupport类;
method属性是指向action类中的执行方法,该方法可以自定义,但返回值必须是字符串,如果不指定值,默认是:excute方法。
result节点中的name属性值是指定action类中的method所指定的方法返回的字符串值,节点中的文本是指向当接收到name的值时转发的URL路径。
Action名称的搜索顺序
1.获得请求路径的URI,例如url是:http://localhost:8080/struts2/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。
Action配置中的各项默认值
<packagename=“demo" namespace="/test"extends="struts-default">
<action name="helloworld" class="action.HelloAction" method="execute">
<result name="success">/hello.jsp</result>
</action>
</package>
1>如果没有为action指定class,默认是ActionSupport。
2>如果没有为action指定method,默认执行action中的execute() 方法。
3>如果没有指定result的name属性,默认值为success。
配置 result映射
在result映射的配置中,在指定实际资源的位置时,可以使用绝对路径,也可以使用相对路径。
绝对路径以斜杠(/)开头,相对于当前的Web应用程序的上下文路径;
相对路径不以斜杠(/)开头,相对于当前执行的action的路径。
一般都建议使用绝对路径
例如:
<package name="default" extends="struts-default"namespace="/admin">
<action name="login"class="com.ibm.LoginAction">
<result>success.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package>
如果当前Web应用程序的上下文路径是/Shop,那么请求/Shop/admin/login.action,执行成功后,转向的页面路径为:/Shop/admin/success.jsp;执行失败后,转向的页面路径为/Shop/error.jsp.