一、Struts1.x介绍
众所周知,Struts是JavaWeb开发中的常用框架,但是框架有什么用?Struts又充当什么角色呢?
框架被设计出来,提高了代码的重用性,很多重复性的的底层操作都在框架中被封装好了,所以开发者只需要关注他的业务逻辑,开发效率就大大地提高了。
JavaWeb开发中经常用到MVC模式,M是指Model(模型),专注于业务逻辑、数据的存储和处理等,V是View(视图),顾名思义就是在客户端能看到的页面,而C是指Control(控制),在模型层和视图层之间搭建一条桥梁。MVC模式结构清晰、层次分明、高内聚低耦合、重用性好等特性是它成为JavaWeb开发中的主流模式。
Struts1.x在MVC中主要充当Control的角色,它既能调用模型层的操作,又能控制页面跳转,将数据传给前端页面。接下来,我们将要开始第一个Struts1.x程序。
二、Struts1.x程序的基本组成结构
1、ActionServlet:它是整个Struts框架的中央控制器,包括请求的接收、分发、处理和页面跳转及渲染。它是Struts自带的Servlet类,需要在web.xml中配置,并初始化config参数,这个参数指定struts配置文件的位置。
2、struts配置文件:是一个xml格式的文件,不配置的话默认是/WEB-INF/struts-config.xml。
3、ActionForm:封装、验证客户提交过来的表单数据,并传入Action中。
4、Action:用户自定义的Control类,需要继承Action类并重写execute方法,在execute方法里面进行逻辑代码的调用和处理,并返回ActionForward控制页面跳转。
5、ActionForward:根据配置文件的标签配置的数据,控制页面跳转。
三、一个简单的登录程序
1、web.xml配置文件
<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>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
解析:
在这个文件中配置一个初始化的servlet,它是整个Struts1.x的中央控制器。它有一个config初始化参数,指定了struts配置文件的位置。它的映射是/。这里简析一下/和/的区别,/既可以控制页面跳转到CGI程序,即Action类,也可以控制页面跳转到.jsp等带有后缀的页面。但是/*只能控制页面跳转到Action,不能跳到前端页面。
2、struts配置文件
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
"http://struts.apache.org/dtds/struts-config_1_2.dtd">
<struts-config>
<form-beans>
<form-bean name="myForm" type="com.struts.form.LoginForm"></form-bean>
</form-beans>
<action-mappings>
<action path="/login" type="com.struts.action.LoginAction" name="myForm" input="/error.jsp">
<forward name="success" path="/success.jsp"></forward>
<forward name="fail" path="/login.jsp"></forward>
</action>
</action-mappings>
</struts-config>
解析:
“form-bean”标签是用来配置ActionForm的,用于接收客户端提交过来的数据,“action”标签是用来配置控制类的,即Action。这个标签中path属性配置用户请求Action所需要的路径;name属性是指这个Action用哪个ActionForm接收数据,在“form-bean”标签中有配置,填写“form-bean”标签中的name属性的值即可。“action”标签的子标签“forward”则控制页面跳转,与Action中excute的返回值ActionForward相呼应,“name”属性与ActionForward中的“forwardName”相呼应,“path”属性则是要跳转到的页面。
3、ActionForm
package com.struts.form;
import com.struts.bean.Person;
import org.apache.struts.action.*;
import javax.servlet.http.HttpServletRequest;
/**
* Created by 程序猿 on 2017/5/15 0015.
*/
public class LoginForm extends ActionForm {
private String account;
private String password;
public String getAccount() {
return account;
}
public String getPassword() {
return password;
}
public void setAccount(String account) {
this.account = account;
}
public void setPassword(String password) {
this.password = password;
}
}
解析:
定义了全局属性和getter以及setter方法,用于封装用户提交过来的参数。用户提交过来的参数名要和属性名字一样。此外它还有validate方法,用于对用户提交的数据进行校验。这个放到以后再讲。
4、Action
package com.struts.action;
import com.struts.form.LoginForm;
import org.apache.struts.action.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Created by 程序猿 on 2017/5/15 0015.
*/
public class LoginAction extends Action {
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
LoginForm loginForm = (LoginForm) form;
if("1".equals(loginForm.getAccount()) && "2".equals(loginForm.getPassword())){
return mapping.findForward("success");
}
return mapping.findForward("fail");
}
}
解析:
这个类主要处理业务逻辑,并进行页面跳转,通过mapping.findForward(“xxx”)跳转到struts配置中“forward”标签中指定的页面。
四、总结
一个简单的Struts登录程序就到此为止,透过这个程序中我们可以看到Struts开发中最基础的部分,也是必不可缺的部分,最后我们在捋一下思路。
- ActionServlet:Struts框架自带Servlet,在web.xml中配置,初始化参数指定struts配置文件的位置。它是整个Struts程序中的核心程序。
- struts配置文件(默认是/WEB-INF/struts-config.xml):根结点是“struts-config”标签,下一级结点中比不可缺的是actionform有关配置和action有关配置。
ActionForm:封装客户端请求数据,全局属性名与客户端提交的参数名一样。
Action:主要是execute方法,在里面处理业务逻辑,并返回ActionForward控制页面跳转。