1.新建一个web项目.用Myeclipse添加Myeclipse自带的spring和hibernate框架,然后添加struts2.0的包,将三个框架的外部包都添加到/WEB-INF/lib下.
2.配置web.xml文件.
加入下面代码:
<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-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
则还要加入如下映射
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
--------------------------------------------------------------
即所有业务请求都将被FilterDispatcher拦截,传统的struts1.x则是定义一个servlet.
由于要用到spring的依赖注入,(下面会提到).
所以继续添加如下代码
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
如果你的appllication.xml文件没有放在src目录下,则还需加入如下代码
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
红色部分则为文件的相对路径.
3.写一个简单的登录页面.有两个文本框.
<form action="Login.action" method="post">
员工号:
<input type="text" name="empNumber" style="width: 12em;"><br>
密码:
<input name="password" type="password" style="width: 12em;"><br>
<input type="submit" value="提交">
</form>
4.定义一个简单的pojo类,我并没有让它继承 com.opensymphony.xwork2.ActionSupport类,
也没有实现com.opensymphony.xwork2.Action接口.在struts2.0中,一个简单的pojo类也能起到业务逻辑控制器的作用,等价于struts1.x中的Action类。
当然Struts2通常做法是继承com.opensymphony.xwork2.ActionSupport类进行扩展
5.在pojo类中定义要从客户端获取到的数据的属性,并加上其getter和setter方法.
private String empNumber; //与html中input的name对应即可
private String password; //与html中input的name对应即可
public String getEmpNumber()
{
return this.empNumber;
}
public void setEmpNumber(String empNumber)
{
this.empNumber = empNumber;
}
public String getPassword()
{
return this.password;
}
public void setPassword(String password)
{
this.password = password;
}
然后添加一个public String execute() throws Exception{}方法,
拦截器默认或调用此方法来执行你的业务逻辑控制(如果你在struts.xml中action标记中定义了method属性,则可以将execute换成你定义的方法名).
struts1.x中则是
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws Exception{}
由此可看出struts2.0中,自定义的业务逻辑控制器(Action)已经完全与ServletAPI解耦了.更有利于代码重用与维护.
6.写struts.xml文件
在src目录下新建一个struts.xml文件,内容如下(没有使用spring):
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="login" extends="struts-default" namespace="">
<!-- 登陆配置 method与action中方法名称对应-->
<action name="Login"
class="com.work.action.LoginAction" method="execute">
<result name="success">/authority/index.jsp</result>
<result name="error">/Login.jsp</result>
</action>
</package>
</struts>
这里的name指的是客户端请求的前缀,如Login.action去掉.action
如果你不用sping来管理你的对象工厂,则class的值为你自己写的Action的完整包路径.如class="com.work.action.LoginAction",如果你需要spring来管理你的对象工厂,也就是说利用spring的依赖注入来创建并注入你需要的业务对象,则class的值为application.xml里定义的<bean>节点的name属性所指定的值,
如application.xml中定义如下bean节点.
.............
<!-- 登录 -->
<bean name="LoginAction" class="com.work.action.LoginAction">
<property name="daoFactory" ref="myFactory"></property><!--这里注入 业务逻辑,非必须-->
</bean>
............
在struts.xml中定义(使用了spring):
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="login" extends="struts-default" namespace="">
<!-- 登陆配置 -->
<action name="Login"
class="LoginAction" method="execute">
<result name="success">/authority/index.jsp</result>
<result name="error">/Login.jsp</result>
</action>
</package>
</struts>
就这样,整个框架就算搭好了,那些业务逻辑则自己去添加.