后台逻辑:
在整个项目的配置文件web.xml中,配置filter拦截器
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
异或
<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>
动用这个配置可以使运行时不报一下提示,具体有待考究
***********************************************************************
* WARNING!!! *
* *
* >>> FilterDispatcher <<< is deprecated! Please use the new filters! *
* *
* This can be a source of unpredictable problems! *
* *
* Please refer to the docs for more details! *
* http://struts.apache.org/2.x/docs/webxml.html *
* *
***********************************************************************
以上Filter对每个jsp页面进行过滤拦截,会自动找项目根目录下的struts.xml配置文件
<struts>
<include file="com/user/struts/user-struts.xml"></include>
</struts>
通过include的地址,引到对应功能模块路径下的xml子文件中
<struts>
<package name="user" namespace="/user" extends="struts-default">
<action name="userQuery" class="com.user.action.UserAction" method="query">
<result name="success" >/pages/user/userList.jsp</result>
<result name="error" >/pages/user/error.jsp</result>
</action>
</package>
</struts>
package:功能性包,对相同对象(user)进行增删改查操作的一个包
namespace:包空间名
action:行动标签
class:对应类
method:对应方法名
下面我们进入对应类中看看
public class UserAction extends ActionSupport {
// 封装javabean
private User user;
private List<User> userList;
public List<User> getUserList() {
return userList;
}
public void setUserList(List<User> userList) {
this.userList = userList;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
// 实例化接口服务
UserService userService = new UserServiceImpl();
// 查询
public String query() {
userList = userService.queryList();
if (userList == null) {
return "error";
} else {
return "success";
}
}
}
struts配置文件自动将action中对应类中的属性封装成JavaBean,使前台页面可以直接调用该属性
前台逻辑:
下面捋顺一下页面访问的顺序:
通过访问页面
主机地址:端口号/项目名/包空间名/action的请求名
通过请求名找到对应类中的方法如下:
public class UserAction extends ActionSupport {
// 查询
public String query() {
userList = userService.queryList();
if (userList == null) {
return "error";
} else {
return "success";
}
}
}
调用该方法返回给struts.xml一个结果result,
通过与result中的name进行比对,跳转到对应的页面(强烈怀疑是转发)
(再括号:后来发现的确是转发,result中type 的默认值就是dispatcher,也可添加redirect等参数,可参阅:
1.属性一目了然:http://blog.knowsky.com/188302.htm
2.带生动例子:http://blog.youkuaiyun.com/totally123/article/details/42417879)
由于struts已经封装好对应action的JavaBean,
因此在前台页面中即可直接用EL表达式调用JavaBean中的属性