struts2入门简介一
Struts2的核心配置文件
1、struts.xml的名称和位置是固定的
2、在配置文件中主要有三个标签 package、action、result、标签里面的属性
package标签
1、类似于Java代码的包,用于区分不同的action,要配置action,必须首先写package标签,在package里面才能配置action。
2、package标签属性
(1)name属性:name属性值跟功能本身没有关系,在一个配置文件中可以写多个package标签,name属性值不能相同。
(2)extends属性:属性值是固定的:struts-default,写了这个属性之后,在package里面配置的类具有action功能。
(3)namespace属性:namespace属性值和action标签里面的name属性值构成访问路径,如果不写默认”/”
构成”/hello”
action标签
1、action标签配置action访问路径
2、action标签属性:
(1)name属性:namespace属性值和action标签里面的name属性值构成访问路径,在package标签里面可以写多个action标签,但是action的name属性值不能相同。
(2)class属性:action的全路径
(3)method属性:比如在action里面默认执行的方法execute方法,但是在action也可以写其他方法,让action里面的多个方法执行,使用method进行配置
result标签
1、根据action的方法返回值,配置到不同的路径中去
2、result标签属性
(1)name属性:和action中方法的返回值一样
(2)type属性:配置如何到路径中(转发或者重定向),默认值做的是转发操作
Struts2的常量配置
1、struts2框架,帮我们实现一部分功能,struts里面有常量,在常量里面封装一部分功能
2、struts默认的常量位置
3、修改struts默认常量值
(1)常用的方式:在struts.xml中进行配置
<constant name="struts.i18n.encoding" value="UTF"></constant>
(2)在src下面创建struts.properties,进行修改
(3)在web.xml进行配置
分模块开发
1、单独写配置文件,把配置文件引入到核心配置文件中
例如:新建hello.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="hellodemo" extends="struts-default" namespace="/">
<!-- name:访问名称 -->
<action name="hello" class="com.demo.action.HelloAction">
<!-- 配置方法的返回值,并转向指定页面 -->
<result name="ok">/hello.jsp</result>
</action>
</package>
</struts>
<include file="com/demo/action/hello.xml"></include>
Action编写方式
1、action编写有三种方式:
第一种 创建普通类,这个不继承任何类,不实现任何接口
public class HelloAction {
public String execute(){
return "ok";
}
}
第二种 创建类,实现接口 Action
public class UserAction implements Action{
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
return null;
}
}
第三种 创建类,继承类ActionSupport
public class PersonAction extends ActionSupport{
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
return super.execute();
}
}
访问action的方法
1、有三种方式实现:
第一种 使用action标签的method属性,在这个属性里面写需要执行的action中的方法
action中的方法:
public class BookAction extends ActionSupport{
//添加
public String add(){
System.out.println("add....................");
return NONE;
}
//修改
public String update(){
System.out.println("update....................");
return NONE;
}
}
struts.xml中的配置
<struts>
<package name="methoddemo" extends="struts-default" namespace="/">
<!-- 有method属性,写要执行的action里面的方法名称 -->
<action name="addAction" class="com.demo.method.BookAction" method="add">
</action>
<!-- 执行update方法 -->
<action name="updateAction" class="com.demo.method.BookAction" method="update">
</action>
</package>
</struts>
访问:
http://localhost:8080/strutsDemo/addAction.action
http://localhost:8080/strutsDemo/updateAction.action
这样方式适合于action 中方法比较少的情况,action中的每一个方法都需要配置,如果action中方法很多 struts的配置就会显得很臃肿。
第二种 使用通配符方式实现
action中的方法不变
struts.xml中的配置:
<action name="book_*" class="com.demo.method.BookAction" method="{1}"></action>
使用* 匹配任何内容
当访问 http://localhost:8080/strutsDemo/book_add.action 时
book_* 自动匹配为book_add ,* 此时的值就是add,
method值的写法是固定的,就是*现在的值。
第三种 动态访问实现
2、错误演示:
(1)如果result标签中的name值与action中方法的返回值不一致,或者配置文件中没有配置返回值,会出现如下错误:
(2)action里面的方法如果有返回值,返回类型必须是String
(3)action里面的方法可以没有返回值,没有返回值就不用配置result标签。有两种方式,一种直接返回字符串”none”,另一种返回类型写成void。