码迷,mamicode.com
首页 > 其他好文 > 详细

Struts(二)

时间:2016-06-26 18:13:06      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:

=============================基本结构=============================
登录程序运行流程图:
    login.jsp-->核心控制器-->Action-->Result-->success.jsp
    
核心控制器:
    1.在web.xml中进行配置
    2.对框架进行初始化,以及处理所有的请求
    
Action:
    1.开发Action
        a.实现Action接口
        b.继承ActionSupport类
    范例:
    <struts>
        <package name="default" namespace="/" extends="struts-default">
            <!--  请求地址/需要调用的Servlet  -->
            <action name="login" class="com.xuetamg9.demo.action.LoginAction">
                <result name="success">/page/manage.jsp</result>
                <result name="input">/page/login.jsp</result>                    
                <result name="error">/page/error.jsp</result>
            </action>
        </package>
    </struts>

Result:
    1.实现对结果的调用
    2.result元素的值指定对应的实际资源位置
    3.name属性表示result逻辑名
    
    结果类型:
        a.登录成功,重定向到index.action
        b.验证失败,转发到登录页面
        c.登录失败,重定向到错误页面
    
范例:
<struts>
    <package name="default" namespace="/" extends="struts-default">
        <action name="login" class="com.xuetamg9.demo.action.LoginAction" method="login">
            <!-- 登陆成功 -->
            <result name="success" type="redirectAction">index.action</result>
            
            <!-- 验证失败 -->
            <result name="input" type="dispatcher">/login.jsp</result>    
            
            <!-- 登陆失败 -->
            <result name="error" type="redirect">/page/error.jsp</result>
        </action>
    </package>
</struts>


==================================配置文件=============================
一、struts.xml
    1.核心配置文件,主要负责管理Action
    2.通常放在WEB-INF/classes目录下,在该目录下的struts.xml文件可以被自动加载
范例:
<struts>
      <constant name="" value=""/>
    <package name="" namespace="" extends="">
        <action name="" class="">
            <result name=""></result>            
        </action>
    </package>
</struts>

a.constant元素
    1.配置常量,可以改变Struts2框架的一些行为
    2.name属性表示常量名称,value属性表示常量值
    范例:
    <struts>
        <constant name="struts.i18n.encoding" value="UTF-8"/>
        <package name="" namespace="" extends="">
            <action name="" class="">
                <result name=""></result>
            </action>
        </package>
    </struts>

b.package元素
    1.包的作用:简单维护工作,提高量用性,可以"继承"包,并添加自己包的配置
    2.name属性必须唯一,指定包的名称
    3.extends属性指要继承的包
    4.namespace属性定义该包中action的命名空间,为可选属性
    范例:
    <struts>
        <constant name="" value=""/>
        <package name="default" namespace="/" extends="struts-default">
            <action name="" class="">
                <result name=""></result>            
            </action>
        </package>
    </struts>

二、struts-default.xml
    1.Struts2默认配置文件,会自动加载
    2.struts-default包在struts-default.xml文件中定义
    
三、struts-plugin.xml
    1.Struts2插件使用的配置文件

加载顺序:struts-default.xml --> struts-plugin.xml  --> struts.xml
    
==================================Action=============================    
作用:
    1.封装工作单元
    2.数据转移场所
    3.返回(字符串)结果逻辑名(execute方法)
范例:
public class HelloWorldAction implements Action {    
      private String name = "";
      private String message = "";    
      public String execute() {
          this.setMessage("Hello,"+this.getName()+"!");
          return SUCCESS;
      }
      //...省略setter/getter方法
}

属性:
    1.method
        a.实现Action中不同方法的调用
        b.特点:
            1)避免动态方法调用的安全隐患
            2)导致大量的Action配置
        范例:
        <action name="login" class="com.xuetang9.demo.action.UserAction" method="login">
            …………
        </action>
        <action name="register" class="com.xuetang9.demo.action.UserAction" method="register">
             …………
        </action>

    2.
    
    
动态方法调用:
    1.作用:减少Action数量
    2.使用:actionName!methodName.action
    3.禁用:将属性struts.enable.DynamicMethodInvocation设置为false
范例:
public class UserAction implements Action {    
      …    
    public String login() {…  }
    public String register() {…}
}
<action name="user" class="com.xuetang9.demo.action.UserAction">
      <result name="login">/page/success.jsp</result>
    ……
</action>

通配符(*)的使用:另一种形式的动态方法调用
范例:
<action name= "*User" class="com.xuetang9.demo.action.UserAction" method="{1}">
      <result>/page/{1}_success.jsp</result>
      <result name="input">/page/{1}.jsp</result>
</action>
/loginUser.action --> method="login"
                      /page/login_success.jsp
                      /page/login.jsp
/registerUser.action --> method= "register"
                         /page/register_success.jsp
                         /page/register.jsp

配置默认Action:
    1.没有Action匹配请求时,默认Action将被执行
    2.通过<default-action-ref … />元素配置默认Action
范例:
<struts>
      <default-action-ref name="defaultAction"/ >
    <package name="default" extends="struts-default">
        <!-- 省略class属性,将使用ActionSupport类 -->
        <action name="defaultAction">
            <result>error.jsp</result>
        </action>
    </package>
</struts>
【注意:如果请求的Action不存在,页面跳转到error.jsps】
    
====================================Result===================================
常用结果类型:
    1.dispatcher类型(转发)
        默认结果类型,后台使用RequestDispatcher转发请求
    2.redirect类型(重定向jsp)
        后台使用的sendRedirect()将请求重定向至指定的URL
    3.redirectAction类型(重定向Action)
        主要用于重定向到Action
    
配置动态结果--动态结果
    配置时不知道执行后的结果是哪一个,运行时才知道哪个结果作为视图显示给用户
范例:
public class UserAction extends ActionSupport {
    private String nextDispose;
    public String login() {
        ...
        if(user.isManager()){
            nextDispose = "manager";
        }else{
            nextDispose = "common";
        }
        return SUCCESS;
        }
        
        public String getNextDispose(){
            return nextDispose;
        }
}
<struts>
    <package name="default" extends="struts-default">
        <action name="login" class="com.xuetang9.demo.action.UserAction" method="login">
            <result type="redirectAction">${nextDispose}</result>
            <result name="error">/page/error.jsp</result>
        </action>
        <action name="common" class="com.xuetang9.demo.action.CommonUserAction">
            …
        </action>
        <action name="manage" class="com.xuetang9.demo.action.ManagerAction">
            ...
        </action>
    </package>
</struts>

============================全局结果==========================
实现同一个包中多个action共享一个结果
范例:
<struts>    
    
    <package name="default" extends="struts-default">
        <default-action-ref name="defaultAction"/ >
        
        <!-- 全局结果位于package元素内-->
        <global-results>
            <result name="error">/error.jsp</result>
            <result name="login" type="redirect">/login.jsp</result>
        </global-results>    
            
        …省略action的配置…
    </package>
</struts>

    
查询不要提交事务

增删改都需要提交事务

重定向 上下文不一样(请求一次和响应一次,之后服务器不管。下次再请求一次和响应一次,之前的请求响应就丢失了)    
    
    
    
    
    
    
   

Struts(二)

标签:

原文地址:http://www.cnblogs.com/ivy-xu/p/5618268.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!