一、步骤
1、使用MyEclipse新建一个Web项目
本例中项目为StrutsLogin
2、将Struts开发包引入到Web项目中
将Struts下的lib文件夹中的所有jar包复制到项目中的WEB-INF下的lib文件夹中
3、新建JSP页面
本例中登陆页面叫做login.jsp
4、编写表单(ActionForm)和分控制器(Action)
(1)新建两个包com.kang.forms和com.kang.actions。
(2)表单类需要继承自ActionForm,用于填充数据。表单相当于JavaBean。表单类中需要定义属性和方法。属性最好与form中控件的name属性值相同(也可以不同),方法为属性的get和set方法。一定要确保方法和控件的name属性值存在关联,即当属性名与form中控件的name属性值不同时,get和set方法名一定要和name属性值相同(get属性值、set属性值)。
(3)分控制器需要继承自Action,我们需要重写其中的一个方法execute,execute方法会被自动调用类似于Servlet中的doGet和doPost。其中参数form表示与该Action相关联的表单对象,这里需要强制转换。参数mapping的findForward方法用来得到并返回执行结果。
5、编写struts-config.xml文件
(1)新建文件struts-config.xml,该文件用来配置Action、ActionForm以及他们的对应关系和跳转关系。该文件一般被放在WEB-INF目录下,打开方式为MyEclipse XML Editor。
(2)配置表单
使用<form-beans>配置表单,在<form-beans>下添加<form-bean>,name属性表示表单对象名;type属性表示表单类的全路径
<form-beans>
<!-- name是表单名 -->
<!-- type表示表单类的全路径 -->
<form-bean name="userForm" type="com.kang.forms.UserForm"></form-bean>
</form-beans>
(3)配置Action
使用<action-mappings>配置Action,在<action-mappings>下添加<action>,path属性表示form要提交的资源名,该值要与form的action属性值相同;name属性用于关联某个表单,该值要与<form-bean>的name属性值相同;type属性表示类的全路径。
在<action>内还要使用<forward>配置跳转关系,name属性表示返回值,path属性表示要跳转到哪个页面。
<action-mappings>
<!-- 配置具体的一个Action -->
<!-- path表示form要提交的资源名 -->
<!-- name用于关联某个表单,该值要与<form-bean>的name属性值相同 -->
<!-- type表示类的全路径 -->
<action path="/login" name="userForm" type="com.kang.actions.LoginAction">
<!-- 配置跳转关系 -->
<!-- name表示返回的结果名称,path表示要跳转到哪个页面 -->
<forward name="ok" path="/welcome.jsp"></forward>
<forward name="error" path="/error.jsp"></forward>
</action>
</action-mappings>
6、编写结果页面
成功跳转到welcome.jsp,失败跳转到error.jsp
7.、在web.xml中配置总控制器(ActionServlet)
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
8、开始使用Struts,测试程序
二、完整代码
登录页面login.jsp:
<form action="login.do" method="post">
username:<input type="text" name="username"><br>
password:<input type="password" name="password"><br>
<input type="submit" value="submit">
</form>
表单UserForm.java:
public class UserForm extends ActionForm {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
分控制器LoginAction.java:
public class LoginAction extends Action {
// 我们需要重写其中的execute方法,该方法会被自动调用。
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
UserForm userForm = (UserForm) form;
System.out.println(userForm.getUsername() + " "
+ userForm.getPassword());
//进行校验并跳转
if ("kang".equals(userForm.getUsername())
&& "123".equals(userForm.getPassword())) {
return mapping.findForward("ok");
} else {
return mapping.findForward("error");
}
}
}
编写struts-config.xml:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.3//EE" "http://struts.apache.org/dtds/struts-config_1_3.dtd">
<struts-config>
<!-- 配置表单 -->
<form-beans>
<!-- name是表单名 -->
<!-- type表示表单类的全路径 -->
<form-bean name="userForm" type="com.kang.forms.UserForm"></form-bean>
</form-beans>
<!-- 配置Action -->
<action-mappings>
<!-- 配置具体的一个Action -->
<!-- path表示form要提交的资源名 -->
<!-- name用于关联某个表单,该值要与<form-bean>的name属性值相同 -->
<!-- type表示类的全路径 -->
<action path="/login" name="userForm" type="com.kang.actions.LoginAction">
<!-- 配置跳转关系 -->
<!-- name表示返回值,path表示要跳转到哪个页面 -->
<forward name="ok" path="/welcome.jsp"></forward>
<forward name="error" path="/error.jsp"></forward>
</action>
</action-mappings>
</struts-config>
编写welcome.jsp和error.jsp:
两个页面简单的显示成功或失败
在web.xml中配置ActionServlet:
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<!-- 配置struts-config -->
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>