前面讲了jsp servlet javabean 的mvc式架构。SSH的目的是为了强化mvc。首先是jsp和servlet之间。每一个jsp都需要一个servlet 。这个加深了程序员不必要的工作。struts的工作就是为了减少jsp和servlet之间的工作。
1.首先配置web.xml文件,struts2和struts1启动有很大的不同,它是通过过滤器来启动的,而struts1是通过加载servlet来启动的,故应向web.xml中加入如下内容:
<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>
<url-pattern> 里填写要被struts拦截的URL类型。
2.写struts.xml 配置文件。他的目录是 WebContent/WEB_INF/classes/struts.xml (目录classes 不存在就自己创建)。这里因该是默认会找到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>
<constant name="struts.i18n.encoding" value="utf-8"></constant>
<package name="default" extends="struts-default">
<action name="login" class="example.structtest" method="execute">
<result name="success">/index.html</result>
<result name="error">/error.jsp</result>
</action>
</package>
</struts>
3.创建jsp提交文件login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<head>
<title>用户登录</title>
</head>
<body>
<form action="login">
<input type="text" name="name"><br/>
<input type="text" name="age"><br/>
<input type="submit" name="submit" value="登录"><br/>
</form>
</body>
</html>
这里注意,提交的action 和struts.xml的action 要一致。
4.创建structtest.java 所属包是example
package example;
import com.opensymphony.xwork2.ActionSupport;
public class structtest extends ActionSupport {
private String name;
private String age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
if (getName().equals("1")&&getAge().equals("1")) {
return "success";
}
else return "error";
}
}
5.创建/index.xml /error.jsp。(这个自己写,不再贴代码)
好了,然我们看一下流程。
1.首先用户打开login.jsp页面。这时候是经过struts2的,因为我在web.xml表示struts的范围是所有文件。
2.用户填写好表单,点击提交。这时候被struts获取到。不仅如此,还在struts.xml里struts 根据表单的action name找的了struts.xml的action。数据被提交该action所属的struttest.java 类中。
3.数据被处理了。还得到了一个String返回值。这时候又回到了struts.xml 。该文件根据返回值对应的result标签值返回对应的页面。
具体流程(图是网上摘录下来的)
补充:由于struts2版本的之间可能会出现错误。并且,即使你把所有的有关struts2的jar包放入项目中,也会出现错误。本例使用的如下(一共8个,版本2.3.31):