⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 14. struts1.x note.txt

📁 在达内培训java笔记
💻 TXT
📖 第 1 页 / 共 4 页
字号:
Day1:
overview:
1.MVC概述
2.Struts框架 (技术概览) 
3.Struts开发步骤
4.Struts新手上路
5.Struts详解
6.使用工具构建struts应用
**************************************************************

一 MVC概述 (教材Page 219) 
1 起源

2 设计理念
    图(Page 219) 

    Controller:
    Model:
    View:

3.分层设计对Model的影响

4.Web MVC的发展(Page 221 ~ 227) 
  Model1 ---> Model2 ---> Framework
    1)Model1的特点(Page 222) 
    2)Model2的特点(Page 224) 
    3)Framework的引入(Page 226) 

  引入框架的作用
    A. 使得功能组件松散耦合,甚至可配置
    B. 提供公用的服务:
       例如:i18n,安全,表单的重复提交,文件上传……
    C. 简化开发模型——使得开发人员的精力集中在业务逻辑之上
  框架的分类
    A.设计的思路
      白盒框架:使用时,需要了解其内部结构(extends);入侵性框架
      黑盒框架:不需了解其代码细节,最多实现其接口;非入侵性框架
    B.功能、作用
      Web:Strusts1.x, WebWork, Strusts2.x(发展1.x和webwork), JSF(抗衡.net), Tapestry,
          Shale, ZK, Echo, (根本全是Servlet规范) ……
      Business:Spring, Seam
      Persistence(持久层):Hibernate, Toplink, OpenOJB, ……
  评价框架的优劣?
    A.设计理念    先进?
    B.编程模型    简单?
    C.是否拥抱规范、标准?
    D.社区是否庞大?第三方的支持程度?


程序设计思路
  可维护性:预见需求(预见多年后的事) 
  可重用: 
          代码可重用(最低级别):粒度:方法(常用代码块),类,包,组件(类库) 
          设计的可重用:框架(半成品,如Hibernate);产品(开发软件);算法、设计模式
          分析的可重用(最高级别,见不到代码):文档、规范、标准(ISO:CMM,CMMI) 
  可扩展性:

*****************************************************

二、Struts框架 (技术概览) 
1.Struts简介
  Apache
  OpenSource
  官方网站:http://jakarta.apache.org

MVC
Servlet, JSP, 资源文件, 定制标签库

Struts框架的位置


2.Struts快速上手
需求描述:
    系统的登录

开发步骤
1) 创建项目、搭建环境
    下载Struts开发包
    把%STRUTS_HOME%/lib/*.jar拷贝到WEB-INF/lib
    把%STRUTS_HOME%/contrib/struts-el/lib/*.jar拷贝到WEB-INF/lib
    把%STRUTS_HOME%/lib/*.tld拷贝到WEB-INF(新版本无需这么做) 
    将%STRUTS_HOME%/contrib/struts-el/lib/*.tld 拷贝到WEB-INF(新版本无需这么做) 
2) 配置WEB-INF/web.xml文件

<servlet>
    <servlet-name>action</servlet-name>
    <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>
        <init-param>
          <param-name>debug</param-name>
          <param-value>3</param-value>
        </init-param>
        <init-param>
          <param-name>detail</param-name>
          <param-value>3</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>

3) 在WEB-INF创建struts-config.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!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 />
  <global-exceptions />
  <global-forwards />
  <action-mappings />
  <message-resources parameter="com.yourcompany.struts.ApplicationResources" />
</struts-config>

4) 提供login.jsp
引入struts标签库
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>

<html:form action="/login">
    <table>
        <tr>
            <td>用户名:</td>
            <td><html:text property="username"></html:text></td>
        </tr>
        <tr>
            <td>密  码:</td>
            <td><html:password property="password"></html:password></td>
        </tr>
        <tr>
            <td colspan=2 align=center>
                <html:submit value="登录"></html:submit>
            </td>
        </tr>
    </table>
</html:form>

5) 提供Form Bean
com.form.LoginForm
public class LoginForm extends ActionForm {

    private String username;
    private String password;
    
    //getter, setter
}

配置文件更新:
<form-beans>
    <form-bean name="loginForm" type="com.form.LoginForm"></form-bean>
</form-beans>

6) 提供action:LoginAction extends Action
public class LoginAction extends Action {

    @Override
    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) 
            throws Exception {
        LoginForm loginForm = (LoginForm)form;
        String username = loginForm.getUsername();
        String password = loginForm.getPassword();
        
        boolean isLogin = false;
        if("maxwell".equals(username) && "123".equals(password)) {
            isLogin = true;
        }
        
        if(isLogin) {
            return mapping.findForward("success");
        } else {
            return mapping.findForward("error");
        }
    }

}

配置文件更新:
<action-mappings>
      <action path="/login" type="com.action.LoginAction" name="loginForm">
          <forward name="success" path="/success.jsp"></forward>
          <forward name="error" path="/error.jsp"></forward>
      </action>
  </action-mappings>




3.Struts技术详解
1) struts的MVC模型 (Page229) 
2) 主要组件详解
    1)ActionServlet
    继承HttpServlet类,需要在web.xml中配置
    <servlet>
        <servlet-name>action</servlet-name>
        <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>
    </servlet>
    <servlet-mapping>
        <servlet-name>action</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>

    2)Action
    开发人员必须继承这个Action类,供ActionServlet所驱动。
    职责:调用业务逻辑方法
          将控制权返回给ActionServlet并且提供相关的路由信息
    public class LoginAction extends Action {
    ......
    }
    步骤:
     (1) 继承Action类。
     (2) 覆盖 execute(...)方法。
     (3) 返回ActionForward对象 (提供决策信息给ActionServlet选择适当的视图响应用户) 。
     (4) 在struts-config.xml中配置

    <action-mappings>
        <action input="/index.jsp"              :ActionForm验证失败的跳转页面
            name="aForm"                        :与Action对应的FormBean对象
            path="/myAction"                    :请求URI(/myAction.do) 
            scope="session"                     :FormBean作用域范围 
            type="action.LoginAction"           :自定义的Action类
            validate="true"                     :FormBean是否调用validate(...)方法
        >
        <forward name="success" path="/success.jsp" /> :成功跳转的页面
        </action>
        ......
    </action-mappings>
    注:scope的值可以是request和session,默认是session

    3)ActionForm:封装HTTP请求中的数据
    将用户提交的数据自动填充(在相应的action的execute方法被调用之前)到form的属性中
    无需手工调用request.getParameter(…) 
    开发人员必须继承这个ActionForm类
    public class LoginForm extends ActionForm {
        ......
    }
3) 处理流程(程序中的关系) 


****************************************************************************
三、使用IDE工具生成struts项目



Day2:
1 视图选择
2 国际化
3 Struts中的异常处理
4 动态表单
5.标签库
*************************************************************************

1 视图选择
局部转发与全局转发(优先级:局部转发的优先级比全局转发的优先级高) 
1) 局部转发:只对某个Action可见
  <action ...>
    <forward name="success" path="/success.jsp" />
  </action>

2) 全局转发:对所有的Action可见(共享) 
    <global-forwards>
        <forward name="success" path="/globalsuccessful.jsp"></forward>
    </global-forwards>


例子:
把登录例子中的成功跳转设置为全局转发。



2 I18N
I18N解决办法
创建多个资源文件,根据用户设置选择不同资源文件
ApplicationResources.properties
ApplicationResources_en.properties
ApplicationResources_zh.properties


资源文件:
用于映射页面中的静态信息、按钮标签、错误信息等,
通过一个属性文件(.properties) 把所有页面的静态信息集中在一起,便于修改。

例子:
编写资源文件的步骤:
1) 编辑资源文件

login_en.properties
login.title=Login Page
login.success=Congratuation! You successfully login our System!
login.username=User Name
login.password=Password

添加对中文的支持txt:
login.title=登录页面
login.success=恭喜你!你已经成功登录我们的系统了!
login.username=用户名
login.password=密码
login.submit=登录


转换本地编码为Unicode:
native2ascii login.txt login_zh.properties  ----->生成login_zh.properties文件
login.title=\u767b\u5f55\u9875\u9762
login.success=\u606d\u559c\u4f60\uff01\u4f60\u5df2\u7ecf\u6210\u529f\u767b\u5f55\u6211\u4eec\u7684\u7cfb\u7edf\u4e86\uff01
login.username=\u7528\u6237\u540d
login.password=\u5bc6\u7801
login.submit=\u767b\u5f55


2)在struts-config.xml文件中配置资源文件<message-resources parameter="login" />

3)在JSP文件中使用<bean:message key="login.title"/>标签输出资源文件中的值

4)演示效果:
修改浏览器的设置
英文界面少写了"login.submit";则是找出中文的


3 Struts中的异常处理

java class: try/catch/finally/throws/throw/custom Exception class
jsp: page指令 + web.xml配置<error-page>
struts: try/catch/finally/throws/throw/custom Exception class

         声明方式(*)------->struts-config.xml
         定制异常处理器(*) 

ActionErrors(或ActionMessages):异常的集合类
ActionMessage:具体异常类
关系图


方法一:
在actionform的validate方法中处理(很少使用,一般用验证框架实现用户输入合法性验证) 

(1)重写action form的validate方法
@Override
public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
    ActionErrors errors = new ActionErrors();
    if(username == null || username.equals("") || username.length() > 50) {
        ActionMessage msg = new ActionMessage("error.username");
        errors.add("errorusername", msg);
    }
    return errors;
}
  
login_en.properties的内容
error.username=Please input the correct user name!
login_zh
error.username=请输入正确的用户名信息!error.username=\u8bf7\u8f93\u5165\u6b63\u786e\u7684\u7528\u6237\u540d\u53ca\u5bc6\u7801\uff01

(2)配置struts-config.xml文件
在action标记内添加一个input属性和validate属性
其中,
input属性的值-----表示发生错误后跳转到的页面
validate属性的值-----表示ActionServlet是否去执行ActionForm的validate(...)方法,并且这个属性默认值是true
    <action-mappings>
        <action name="loginForm" 
                path="/login" 
                type="com.action.LoginAction" 
                input="/login.jsp"
                validate="true">
            <forward name="fail" path="/fail.jsp"></forward>
        </action>
    </action-mappings>


(3)在login.jsp页面中加入<html:errors/>输出错误。


方法二:
在action的execute方法中处理(极少使用,知道这种方法就可以了) 
(1)在action的execute方法中写错误处理的代码(和action form里valdiate方法的代码基本一致) 


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -