首页 > 代码库 > STRUST1

STRUST1

开发第一个struts程序

 

1.开发form

1)建立一个类,继承ActionForm
2)注册,修改struts-config.xml
Name:变量名
Type:类的全名
例如:

 

 

[html] view plain copy
 
 技术分享技术分享
  1. <form-beans>  
  2.     <form-bean name="loginForm" type="cn.com.hewei.bean.LoginForm"/>  
  3. </form-beans>  

 

2.开发Action

1) 建立一个类,继承Action覆盖execute方法

2) 注册,修改strutrs-config.xml

Path:指明调用者(jsp)能通过中心控制器ActionServlt找到该Action

Type:指明该Action的类名

Name:该Action应用的Form名称

 

3.实例:模拟用户的登录,第一个用户程序

1)写bean程序,继承ActionForm

[java] view plain copy
 
 技术分享技术分享
  1. package cn.com.hewei.Bean;  
  2. import org.apache.struts.action.ActionForm;  
  3. public class LoginForm extends ActionForm {  
  4.     private String userName;  
  5.     private String password;  
  6.     public String getUserName() {  
  7.         return userName;  
  8.     }  
  9.     public void setUserName(String userName) {  
  10.         this.userName = userName;  
  11.     }  
  12.     public String getPassword() {  
  13.         return password;  
  14.     }  
  15.     public void setPassword(String password) {  
  16.         this.password = password;  
  17.     }  
  18. }  


编写Action程序

 

[java] view plain copy
 
 技术分享技术分享
  1. package cn.com.hewei.Action;  
  2.   
  3. import javax.servlet.http.HttpServletRequest;  
  4. import javax.servlet.http.HttpServletResponse;  
  5. import org.apache.struts.action.Action;  
  6. import org.apache.struts.action.ActionForm;  
  7. import org.apache.struts.action.ActionForward;  
  8. import org.apache.struts.action.ActionMapping;  
  9. import cn.com.hewei.Bean.LoginForm;  
  10.   
  11. public class LoginAction extends Action {  
  12.     @Override  
  13.     public ActionForward execute(ActionMapping mapping, ActionForm form,  
  14.             HttpServletRequest request, HttpServletResponse response)  
  15.             throws Exception {  
  16.         // 转换成LoginForm  
  17.         LoginForm login = (LoginForm) form;  
  18.         if (login.getUserName().equals("admin")) {  
  19.             return mapping.findForward("loginSuccess");  
  20.         } else {  
  21.             return mapping.findForward("loginFail");  
  22.         }  
  23.     }  
  24. }  


配置struts-config.xml文件

 

[html] view plain copy
 
 技术分享技术分享
  1. <?xml version="1.0" encoding="ISO-8859-1" ?>  
  2. <!DOCTYPE struts-config PUBLIC  
  3.           "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"  
  4.           "http://struts.apache.org/dtds/struts-config_1_3.dtd">  
  5. <struts-config>  
  6.     <form-beans>  
  7.         <form-bean name="loginForm"  
  8.             type="cn.com.hewei.Bean.LoginForm">  
  9.         </form-bean>  
  10.     </form-beans>  
  11.     <action-mappings>  
  12.         <action path="/Login" type="cn.com.hewei.Action.LoginAction"  
  13.             name="loginForm">  
  14.             <forward name="loginSuccess" path="/loginSuccess.jsp"></forward>  
  15.             <forward name="loginFail" path="/loginFail.jsp"></forward>  
  16.         </action>  
  17.     </action-mappings>  
  18. </struts-config>  

我们要注意一点所有的path=都要以“/”开头

 

Login.jsp

[html] view plain copy
 
 技术分享技术分享
  1. <body>  
  2.     <form action="<%=request.getContextPath()%>/Login.do" method="post">  
  3.         <!--这里的uerName和passWord要和bean中的一模一样-->  
  4.   username:  
  5.         <input type="text" name="userName">用户名</input>  
  6.   password:  
  7.         <input type="text" name="passWord">密码</input></br>  
  8.         <input type="submit" value=http://www.mamicode.com/"提交">  
  9.     <form>  
  10. </body>  


登录成功页面loginSuccess.jsp

 

[java] view plain copy
 
 技术分享技术分享
  1. <body>  
  2.    Login Success <br>  
  3. </body>  


登录失败页面loginFail.jsp

[html] view plain copy
 
 技术分享技术分享
  1. <body>  
  2.    Login Fail <br>  
  3. </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)声明:

 

[html] view plain copy
 
 技术分享技术分享
  1. <servlet>  
  2.     <servlet-class>  
  3.         org.apache.struts.action.ActionServlet  
  4.     </servlet-class>  
  5.     <init-param>  
  6.         <param-name>config</param-name>  
  7.         <param-value>/WEB-INF/struts-config.xml</param-value>  
  8.     </init-param>  
  9.     <load-on-startup>0</load-on-startup>  
  10. </servlet>  
  11. <servlet-mapping>  
  12.     <servlet-name>action</servlet-name>  
  13.     <url-pattern>*.do</url-pattern>  
  14. </servlet-mapping>  

 

 

Action图解

技术分享

 

1.Action:一个请求和业务逻辑的适配器

1)初始化时间:第一次请求的时候初始化,不是在读取配置时初始化,
2)初始化次数:每个Action只被初始化一次(多个请求共享一个Action)
3)安全问题:Action是线程不安全的,因为所有的请求共享一个action实例
4)怎样实现Action的安全性问题:
主要不要用实例变量或者类变量共享只是针对某个请求的数据
注意资源操作的同步性

 

STRUST1