zoukankan      html  css  js  c++  java
  • 2018.11.20 Struts2中对结果处理方式分析&struts2内置的方式底层源码剖析

    介绍一下struts2内置帮我们封装好的处理结果方式也就是底层源码分析

    这是我们的jar包里面找的位置目录

    打开往下拉看到result-type节点

    name那一列就是我们的type类型取值
    

    上一篇博客在分析的时候发现就算不写也会自动转发原因在这里,default=true  选择了默认方式
    

    接着我们如果想看看底层是如何工作的就选择class属性复制双引号的内容

    接着按住ctrl+shift+T就能出现一个框

    OPen Type

    进去之后发现是这个,点击Attach Source----》选择第二个 外部文件----》完成
    

    看过学过web的同学应该知道这些是html标签,在这里这些是注释文档,接下来我们换一张方式看也就是翻译

    点击windows----show view-----找到other----输入java关键字---看下面的控制台完成OK

    接下来点击其中一个html标签


    下面进入正题

    第一种dispatcher (默认的)---转发

    struts.xml主配置设置

    观察状态栏

    看底层实现方式 不会的可以看看上面的看源码的步骤

    也就是封装了一下,中间有个判断更加安全,符合面向对象方式,实现代码重用。跟我们servlet写法是一样的 request.getRequstDispatcher("").forward(request,response);


    第二种redirect---重定向

    运行之前

    运行之后

    底层分析

    点击选中的sendRedirect方法进入方法

    sendredirect是一个方法


    第三种chain---链方式

    看源码去学习用法及需要配置的参数

    参数的用法

    完整配置的xml文件

    控制台输出

    第三种redirectAction---重定向到某一个action (常用)

    地址栏

    回车之后控制台显示

    以下是struts.xml主配置的所有完整代码

    <?xml version="1.0" encoding="UTF-8"?>
     <!DOCTYPE struts PUBLIC
    	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    	"http://struts.apache.org/dtds/struts-2.3.dtd">
    
    <struts>
    <!-- 是否开启开发模式
    	struts.enable.DynamicMethodInvocation = false
     -->
    	<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
    	
    	<package name="result" namespace="/" extends="struts-default">
    		<!-- 转发 -->
    		<action name="Demo1Action" class="com.legend.action.Demo1Action" method="execute">
    			<result name="success" type="dispatcher">/hello.jsp</result>
    		</action>
    		
    		<!-- 重定向 -->
    		<action name="Demo2Action" class="com.legend.action.Demo2Action" method="execute">
    			<result name="success" type="redirect">/hello.jsp</result>
    		</action>
    		
    		<!-- 转发到action -->
    		<action name="Demo3Action" class="com.legend.action.Demo3Action" method="execute">
    			<result type="chain">
                	 <!-- action的名字 -->
                	 <param name="actionName">Demo1Action</param>
                	 <!-- action所在的命名空间 -->
                	 <param name="namespace">/</param>
             	</result>
    		</action>
    		
    		<!-- 转发到action -->
    		<action name="Demo4Action" class="com.legend.action.Demo4Action" method="execute">
    			<result type="redirectAction">
    				<!-- action的名字 -->
                 	<param name="actionName">Demo1Action</param>
                 	<!-- action所在的命名空间 -->
                 	<param name="namespace">/</param>
             	</result>
    		</action>
    	</package>
    </struts>	
    
  • 相关阅读:
    吴裕雄--天生自然python学习笔记:python 用 Tesseract 识别验证码
    吴裕雄--天生自然python学习笔记:python安装配置tesseract-ocr-setup-3.05.00dev.exe
    吴裕雄--天生自然python学习笔记:python 用 Open CV通过人脸识别进行登录
    吴裕雄--天生自然python学习笔记:python 用 Open CV抓取摄像头视频图像
    HDU4278 Faulty Odometerd
    最大流 总结
    HDU1411 欧拉四面体
    HDU3336 Count the string
    HDU1711
    HDU2203 亲和串
  • 原文地址:https://www.cnblogs.com/qichunlin/p/9987955.html
Copyright © 2011-2022 走看看