STRUST1
Posted 相忘谁先忘
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STRUST1相关的知识,希望对你有一定的参考价值。
开发第一个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
- 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">
- <!--这里的uerName和passWord要和bean中的一模一样-->
- 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的主要内容,如果未能解决你的问题,请参考以下文章