学了mvc模式的设计,现在再来看struts,它其实也是mvc模式的,只是用了struts,能减少我们用mvc的时间。
对于应用struts来说,主要用到struts里的org.apache.struts.action.ActionServlet,org.apache.struts.action.Action、org.apache.struts.action.ActionForm,通过xml的配置文件,实现jsp和servlet的响应请求和转发。
以用户登录为例,解说struts请求转发的流程
1.配置servlet
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<!--struts的配置路径 -->
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
</servlet>
<!--控制器的映射路径 ,以.do发起的请求交给ActionServlet处理-->
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
2.jsp登陆界面
<form name="loginForm" method="post" action="LoginAction.do">
用户名:<input type="text" name="username" id="username" ></input>
<p></p>
密 码:<input type="text" name="psw" id="psw" ></input>
<p></p>
<input type="submit" name="apply" id="apply" value="提交"></input>
<input type="submit" name="cancel" id="cancel" value="取消"></input>
</form>
3.编写javabean文件
public class LoginBean extends org.apache.struts.action.ActionForm{
private String username;
private String psw;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPsw() {
return psw;
}
public void setPsw(String psw) {
this.psw = psw;
}
4.编写action类
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) throws Exception{
LoginBean lb=(LoginBean)form;
//获得请求的参数名和密码
String username=lb.getUsername();
String psw=lb.getPsw();
if(username.equals("plh")&&psw.equals("123456")){
return mapping.findForward("LoginOK");
}else{
return mapping.findForward("LoginFail");
}
}
5.编写struts-config.xml配置文件,使struts的action,formBean,以及jsp界面联系起来
<struts-config>
<form-beans>
<!--配置LoginBean的名字loginForm -->
<form-bean name="LoginForm" type="test.Bean.LoginBean"></form-bean>
</form-beans >
<action-mappings>
<action attribute="LoginForm" name="LoginForm" path="/LoginAction" scope="request" type="test.Action.LoginAction">
<forward name="LoginOK" path="/LoginOK.jsp" contextRelative="true"></forward>
<forward name="LoginFail" path="/LoginFail.jsp" contextRelative="true"></forward>
</action>
</action-mappings>
</struts-config>
在struts-config.xm中,Actionservlet根据WEB-INF/struts-config.xml中的配置处理请求,首先根据action中的name属性,找到相应的formbean
<form-bean name="LoginForm" type="test.Bean.LoginBean"></form-bean>
并生成test.Bean.LoginBean对象,自动解析请求中的参数和赋值给LoginBean对象,然后根据path属性匹配请求路径,获得test.Action.LoginAction对象,调用其中重写的execute方法,传入LoginBean对象和请求,应答等对象
同时,LoginBean对象以attribute="LoginForm"为属性配置的名字放在scope=“request”里
在跳转界面里可以通过${requestScope.LoginForm.username}获得属性值
好了,就这样了。