最近刚刚结束了SSH的学习,其实我觉得那不叫结束,是java学习的一个真正的入门,其中包含很多非常精华的思想,让我想到一句话:“为人民服务”,不管是用户,还是开发人员,特点是都是人,老师说过:你设计的软件,xx都会用了,那你就是精英,其实更近一步说,如果一个框架能够让一般的开发人员很容易上手,那这个框架也是一个非常优秀的框架,在学习SSH的这段时间,我学习的每一步都能够体会到当初设计这个框架的人的智慧,真的很棒,首先从struts1说起。
虽然strut2被我们熟知,并且常用,但是没有strut1的起步,也很难有strut2的进步,下面我们首先用一张图描述一下struts1的工作原理:
1.初始化(struts-config.xml-->ActionServlet):struts框架的总控制器ActionServlet是一个Servlet,它在web.xml中配置成自动启动的Servlet,在启动时总控制器会读取配置文件(struts-config.xml)的配置信息,为struts中不同的模块初始化相应的对象。(面向对象思想)
2.发送请求(Web客户端-->ActionServlet):用户提交表单或通过URL向WEB服务器提交请求,请求的数据用HTTP协议传给web服务器。
3.form填充:struts的总控制器ActionServlet在用户提交请求时将数据放到对应的form对象中的成员变量中。
4.派发请求:控制器根据配置信息对象ActionConfig将请求派发到具体的Action,对应的formBean一并传给这个Action中的excute()方法。
5.处理业务:Action一般只包含一个excute()方法,它负责执行相应的业务逻辑(调用其它的业务模块)完毕后返回一个ActionForward对象。服务器通过ActionForward对象进行转发工作。
6.返回响应:Action将业务处理的不同结果返回一个目标响应对象给总控制器。
7.查找响应:总控制器根据Action处理业务返回的目标响应对象,找到对应的资源对象,一般情况下为jsp页面。
8.响应用户:目标响应对象将结果传递给资源对象,将结果展现给用户。
下面举个例子说一下:
在web.xml 文件中配置ActionServlet 应增加如下片段:
<servlet> <!-- ActionServlet 的名 --> <servlet-name>actionSevlet</servlet-name> <!-- 配置Servlet 的实现类 --> <servlet-class> org.apache.struts.action.ActionServlet </servlet-class> <!-- 指定Struts 的第一个配置文件 --> <init-param> <!-- 指定配置文件的映射 --> <param-name>config</param-name> <param-value>/WEB-INF/struts-configl.xml</param-value> </init-param> <!-- 指定Struts 的第二个配置文件 --> <init-param> <!-- 指定配置文件的映射 --> <param-name>config/wawa</param-name> <param-value>/WEB-INF/struts-config2.xml</param-value> </init-param> <!-- 将ActionServlet配置成自启动Servlet --> <load-on-startup>2</load-on-startup> </servlet>
第二步,配置actionForm
ActionForm 用于封装用户的请求参数,而请求参数是通过JSP 页面的表单域传递过来的。因此应保证ActionForm 的参数与表单域的名字相同。
<span style="color:#333333;">package com.bjpowernode.structs; import org.apache.struts.action.ActionForm; /** * 登录ActionForm,负责收集表单数据 * 表单属性必须和ActionForm中的get和set或的属性一致 * @author dandan * */ public class LoginActionForm extends </span><span style="color:#ff6666;">ActionForm </span><span style="color:#333333;">{ 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; } } </span>
第三步,配置Action
Action 负责管理与之关联的ActionForm. 它不仅需要配置实现类,还需要配置Action 的path 属性,该属性用于被用 户请求。对于只需在本Action
内有效的Forward. 还应在Action 元素内配置局部Forward。
<span style="color:#333333;">package com.bjpowernode.structs; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; /** * 登录Action 负责取得表单数据,调用业务逻辑,返回转向信息 * * @author dandan * */ public class LoginAction extends </span><strong><span style="color:#ff6666;">Action </span></strong><span style="color:#333333;">{ @Override public ActionForward execute(ActionMapping mapping, ActionForm form, </span><span style="color:#ff6666;">HttpServletRequest</span><span style="color:#333333;"> request, </span><span style="color:#ff6666;">HttpServletResponse</span><span style="color:#333333;"> response) throws Exception { LoginActionForm laf = (LoginActionForm) form; String username = laf.getUsername(); String password = laf.getPassword(); UserManager userManager = new UserManager(); try { userManager.login(username, password); request.getSession().setAttribute("username", username); return mapping.findForward("success"); } catch (UserNotFoundException e) { e.printStackTrace(); request.setAttribute("msg", "用户不能找到,用户名称=【"+username+"】"); } catch (PasswordErrorException e) { e.printStackTrace(); request.setAttribute("msg", "密码错误"); } return mapping.findForward("error"); } } </span>
action的配置代码:
<action-mappings> <action path="/login" type="com.bjpowernode.structs.LoginAction" name="loginForm" scope="request"> <forward name="success" path="/login_success.jsp" /> <forward name="error" path="/login_error.jsp"></forward> </action> <action path="/must_login" type="com.bjpowernode.structs.MustLoginAction"> <forward name="success" path="/must_login.jsp" /> </action> <action path="/dyna_actionforward" type="com.bjpowernode.structs.DynaActionForwardTestAction"> <forward name="page1" path="/page1.jsp" /> <forward name="page2" path="/page2.jsp"></forward> </action> </action-mappings>
这是关于struts1简单的一个总结,希望和大家交流~