struts1-yb

来自:https://www.youtube.com/watch?v=pB0Zqp3JQIQ&list=PLv2_OVMW-pYxjGhqrbRN-EUbk6UpoTnmP

MVC:把数据的输入(jsp等前端界面)、数据处理(控制层Controller接收数据后调用Model来处理数据)、数据显示分开(jsp等前端页面)

Struts:基于MVC的一个web框架。

Struts特点:
优:程序规范化,开发效率提高,可读性和可维护性增加
缺:form表单鸡肋,action是单例(对并发性处理有影响)。


Struts原理

以用户登录为例:
ActionServlet:总控制器(司令),掌握了一份核心文件(struts-config.xml),该类由Struts提供,我们只需配置即可;属于MVC中的C
struts-config.xml:该文件配置了表单(ActionForm)、Action(小队长)、以及之间的对应关系(ActionMapping);
ActionForm:表单(仓库),用于存放用户输入的数据,必须继承ActionForm属于MVC中的M
Action:分控制器(队长),可以有多个,如:LoginAction,本质就是一个Servlet。属于MVC中的C;
Model:Java类、Service(士兵)。属于MVC中的M
结果页面:如:ok.jsp;error.jsp。属于MVC中的V


以下开始:
login.jsp:
<form action="login.do">
  User:<input type="text" id="name" />
  Password:<input type="password" id="pwd" />
</form>

流程:
1)、访问了http://host/webapp/login.do,发给web服务器,web服务器首先解析主机、解析web应用、解析资源(此时如果不使用struts1框架,则直接发给LoginAction了)、然后转发给ActionServlet类;
2)、ActionServlet查询struts-config.xml文件,去填充数据,把用户传递的数据填充到ActionForm之中,然后调用指定的Action(小队长);
3)、Action(小队长):根据Form和Action之间的关系(ActionMapping)去找到Form并读取数据,然后调用某个士兵(Model)去完成任务,Model中一般会有Service(如:UserService类,其中有一个isValidate);Model完成任务之后,Action把处理结果返回给ActionServlet(总司令);
4)、ActionServlet根据Action的处理结果,再次查询struts-config.xml,决定跳转到什么位置去,如成功后跳转到某个成功jsp页面,页面执行完毕之后,返回一个静态html文件给web服务器


手动开发:

过程如下:
1)、引入开发包;
2)、写一个login.jsp;
3)、编写ActionForm和Action;UserForm的属性名称(如:name和password),建议和jsp页面的控件名称保持一致,不一致也可以(只要ActionForm的getXXX和setXXX方法名称的XXX和控件名称一致即可。请思考一下反射的原理);LoginAction(小队长)需要继承Action类,并重写execute方法(该方法会被自动调用),我们需要重写这个方法:

ActionForward execute(ActionMapping mapping,ActionForm form,request,response){
  UserForm uf = (UserForm)form;
  form.getUsername();
  return mapping.findForward("ok");
}

4)、配置struts-config.xml文件,它配置了action,actionForm,对应关系和跳转位置,一般这个文件位于WEB-INF目录下。

<struts-config>
<form-beans>
  <!--type:指定form的全类名-->
  <form-bean name="userForm" type="form.class.path"/>
</form-beans>
<action-mappings>
  <!---配置具体的action path,表是将来访问该action的资源名,如:http://host/web/path->
  <!--name:用于关联某个表单-->
  <!--path:action的全路径名-->
  <!-- /不能省略-->
  <action path="/login" name="userForm" type="action.class.path">
    <!--下面配置跳转关系,成功到welcome,失败到error-->
    <!--name表是结果名称,path:表示转发到哪个页面-->
    <forward name="ok" path="welcome.jsp" />
    <forward name="error" path="error.jsp" />
  </action>
</action-mappings>

</struts-config>
5)、写出welcome.jsp和error.jsp
6)、web.xml中配置ActionServlet.xml
<servlet>
  <servlet-name>action</servlet-name>
  <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
  <!--配置struts-config.xml位置-->
  <init-param>
    <param-name>config</param-name>
    <param-value>/WEB-INF/struts-config.xml</param-value>
  </init-param>
</servlet>
<servlet-mapping>
  <servlet-name>action</servlet-name>
  <url-pattern>*.do</url-pattern>//处理*.do的请求
</servlet-mapping>

7)、开始使用struts
8)、struts中文乱码-过滤器使用


Go On