1struts.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="default" namespace="/" extends="struts-default">
<action name="login" class="com.iotek.action.LoginAction">
<result name="error">/WEB-INF/content/error.jsp</result>
<result name="success">/WEB-INF/content/welcome.jsp</result>
</action>
</package>
</struts>
基础配置如上所示。
2.package
name:给当前的的包起名,唯一标记
namespace:命名空间,默认为/
extends:默认继承struts-default
3action
相对应的请求与映射文件,result:action请求时,所要跳转的页面,若在路径前加“/”则是绝对路径,否则表示相对路径
接下来讲一下Result的全局配置和局部配置**
<?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="default" namespace="/action" extends="struts-default">
<action name="login" class="com.iotek.action.LoginAction">
<result name="error">/WEB-INF/content/error.jsp</result>
<result name="success">/WEB-INF/content/welcome.jsp</result>
</action>
<action name="user_login" class="com.iotek.action.UserAction">
<result name="error">/WEB-INF/content/error.jsp</result>
<result name="success">/WEB-INF/content/welcome.jsp</result>
</action>
<action name="mod_login" class="com.iotek.action.ModelAction" method="checkLogin">
<result name="error">/WEB-INF/content/error.jsp</result>
<result name="success">/WEB-INF/content/welcome.jsp</result>
</action>
</package>
</struts>
如上所示,在多个action中,出现多条相同的result,造成代码冗余,所以在这种情况下可以将相同的result设置成全局,当有action被请求时,会先查找内部的result,在查找全局的sult。代码如下所示(将多条result放到中):
<?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="default" namespace="/action" extends="struts-default">
<global-results>
<result name="error">/WEB-INF/content/error.jsp</result>
<result name="success">/WEB-INF/content/welcome.jsp</result>
</global-results>
<action name="login" class="com.iotek.action.LoginAction">
</action>
<action name="user_login" class="com.iotek.action.UserAction">
</action>
<action name="mod_login" class="com.iotek.action.ModelAction" method="checkLogin">
</action>
</package>
</struts>
创建struts.xml的子文件
为了防止struts.xml文件过于臃肿,我们经常会创建它的子文件,然后在struts.xml中引用子文件。
首先在src根目录下创建子文件:名字自己随便起,我起的名字是:login.xml
login.xml中代码同上。
下面是如何在struts.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>
<include file="login.xml"></include>
</struts>
最后说一下action如何获得页面数据
主要有属性驱动和模板驱动两种方法
属性驱动:
1.将页面中组件的name,写到action类中,并且在类中实现 getter,setter方法
2.可以将属性封装为对象,然后在页面组件的name中调用对象.属性
代码 示例:
public class LoginAction {
private String name;
private String password;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String execute(){
if(getName().equals("laogao")&&getPassword().equals("123456")){
System.out.println("登录成功");
return "success";
}else{
return "error";
}
}
}
或者如下所示(将属性封装为对象):
public class UserAction implements Action{
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String execute(){
System.out.println("这里是UserAction:"+user.getName());
if(user.getName().equals("laogao")){
return "success";
}else{
return "error";
}
}
}
模板驱动:
1.需要Action实现ModelDriven接口,重写getModel()方法
2.类似于:对象封装
代码如下:
public class ModelAction implements Action, ModelDriven<User> {
private User user=new User();
@Override
public String execute() throws Exception {
if(user.getName().equals("laogao")){
return "success";
}else{
return "error";
}
}
@Override
public User getModel() {
return user;
}
}