标签:名称   ext   sources   点击   bsp   问题   组件   actions   init   
开发第一个struts程序
 
1.开发form
1)建立一个类,继承ActionForm
2)注册,修改struts-config.xml
Name:变量名
Type:类的全名
例如:
 
 
- <form-beans>  
-     <form-bean name="loginForm" type="cn.com.hewei.bean.LoginForm"/>  
- </form-beans>  
 
 
2.开发Action
1) 建立一个类,继承Action覆盖execute方法
2) 注册,修改strutrs-config.xml
Path:指明调用者(jsp)能通过中心控制器ActionServlt找到该Action
Type:指明该Action的类名
Name:该Action应用的Form名称
 
3.实例:模拟用户的登录,第一个用户程序
1)写bean程序,继承ActionForm
- package cn.com.hewei.Bean;  
- import org.apache.struts.action.ActionForm;  
- public class LoginForm 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;  
-     }  
- }  
 
编写Action程序
 
- package cn.com.hewei.Action;  
-   
- 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;  
- import cn.com.hewei.Bean.LoginForm;  
-   
- public class LoginAction extends Action {  
-     @Override  
-     public ActionForward execute(ActionMapping mapping, ActionForm form,  
-             HttpServletRequest request, HttpServletResponse response)  
-             throws Exception {  
-         
-         LoginForm login = (LoginForm) form;  
-         if (login.getUserName().equals("admin")) {  
-             return mapping.findForward("loginSuccess");  
-         } else {  
-             return mapping.findForward("loginFail");  
-         }  
-     }  
- }  
 
配置struts-config.xml文件
 
- <?xml version="1.0" encoding="ISO-8859-1" ?>  
- <!DOCTYPE struts-config PUBLIC  
-           "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"  
-           "http://struts.apache.org/dtds/struts-config_1_3.dtd">  
- <struts-config>  
-     <form-beans>  
-         <form-bean name="loginForm"  
-             type="cn.com.hewei.Bean.LoginForm">  
-         </form-bean>  
-     </form-beans>  
-     <action-mappings>  
-         <action path="/Login" type="cn.com.hewei.Action.LoginAction"  
-             name="loginForm">  
-             <forward name="loginSuccess" path="/loginSuccess.jsp"></forward>  
-             <forward name="loginFail" path="/loginFail.jsp"></forward>  
-         </action>  
-     </action-mappings>  
- </struts-config>  
 
我们要注意一点所有的path=都要以“/”开头
 
Login.jsp
- <body>  
-     <form action="<%=request.getContextPath()%>/Login.do" method="post">  
-         
-   username:  
-         <input type="text" name="userName">用户名</input>  
-   password:  
-         <input type="text" name="passWord">密码</input></br>  
-         <input type="submit" value="提交">  
-     <form>  
- </body>  
 
登录成功页面loginSuccess.jsp
 
- <body>  
-    Login Success <br>  
- </body>  
 
登录失败页面loginFail.jsp
- <body>  
-    Login Fail <br>  
- </body>  
 
原理分析:

1)在浏览器的地址栏中输入index.jsp
2)输入用户名密码后点击提交,跳转到Login.do、
3)因为是.do结尾的所以会被web.xml的ActionServlet解析到,ActionServlet会查看struts-config.xml文件,根据action标签的path和跳       转到LoginAction这个Servlet目录
4)跳转时,会根据action的name属性带着ActionForm中的内容交给LoginAction处理
5)LoginAction处理好后根据findForward将跳转的关键字带给ActionServlet处理,ActionServlet会查看Struts-config.xml文件根据forward标签,和name属性(那么属性判断带来的关键字)跳转到path指定的路径
 
Struts的基本原理

1.读取配置(初始化ModuleConfig对象)
Struts框架总控制器(ActionServlet)是一个Servelt,在web.xml中配置成自动启动的Servlet,在Web.xml中配置成自动启动的Servlet。读取配置文件(Struts-config.xml)的配置文件信息,为不同的Struts模块初始化响应的ModuleCofig对象:ActionConfig,ControlConfig,FormBeanConfig,ForwardConfig,MessageResourcesConfig(一定要记得看源码)
2.发送请求
用户提交表单或调用URL向web应用的程序器提交一个请求,请求的数据用HTTP协议上传给Web服务器
3.填充Form(实例化,复位,填充数据,校验,保存)
(*.do请求)从ActionConfig中找到对应该请求的Action的子类,如没有对应的Action,控制器直接转化给Jsp或静态的页面。如有对应的Action且这个Action有一个对应的ActionForm,ActionForm被实例化并用HTTP请求的数据填充其属性,并且保存在ServletConfig中(request或session中),这样他们就可以被其他的Action对象或者Jsp调用了。这个后面会说到如何保存这个form到各个域中
4.派发请求
控制器根据配置信息ActionConfig将请求派发到具体的Action,相应的FormBean一并传给这个Action的execute()方法
5.处理业务
Action一般只包含一个execute()方法,它负责执行相应的业务逻辑(调用其他业务模块)。完毕返回一个ActionFoward对象,控制器通过这个AcationForward对象进行转发工作。
6.返回响应
Action根据业务逻辑处理的不同结果返回一个目标响应对象总控制器,该目标响应对象给总控制器,该目标响应对象对应一个具体的Jsp页面或另一Action
7.查找响应(翻译响应)
总控制器根据业务功能Action返回的目标响应对象,找到对应的资源对象,通常是一个具体的jsp页面.
8.响应客户
目标响应对象结果展现给用户目标响应对象(JSP)将结果页面展现给用户。
 
Struts的原理详细分析
1.Struts组件
ActionServlet 
Acation Classes,
Action Mapping(此包括ActionForward)
ActionForm Bean。
2.Struts的Mvc
1.模型(Model):本质上来说在Struts中Model是一个商业逻辑类,开发者实现商业逻辑
2.视图(View):View是与控制器Servelt配合工作的一整套Jsp定制标签构成,利用他们可以快速建立应用系统的界面
3.控制器(Controller):前端控制器(总控制器)是一个Servlet,它将客户端的请求转发到响应的后端控制器Action类
 
 
3.ActionServlet(中心控制器)
定义:继承自javax.servelt.http.HttpServlet类,是中心控制器(总控制器)。它提供了一个中心位置来处理全部的终端请求
1)作用:接受请求,填充数据,派发请求,响应用户
2)配置:在web配置文件(web.xml)声明:
 
- <servlet>  
-     <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>0</load-on-startup>  
- </servlet>  
- <servlet-mapping>  
-     <servlet-name>action</servlet-name>  
-     <url-pattern>*.do</url-pattern>  
- </servlet-mapping>  
 
 
 
Action图解

 
1.Action:一个请求和业务逻辑的适配器
1)初始化时间:第一次请求的时候初始化,不是在读取配置时初始化,
2)初始化次数:每个Action只被初始化一次(多个请求共享一个Action)
3)安全问题:Action是线程不安全的,因为所有的请求共享一个action实例
4)怎样实现Action的安全性问题:
主要不要用实例变量或者类变量共享只是针对某个请求的数据
注意资源操作的同步性
 
STRUST1
标签:名称   ext   sources   点击   bsp   问题   组件   actions   init   
原文地址:http://www.cnblogs.com/tengfeihhh/p/6627935.html