• struts2之Action配置的各项默认值、result配置的各种试图转发类型及为应用指定多个struts配置文件


    1、Action配置的各项默认值
    (1)、如果没有为action指定class,默认是ActionSupport。
    (2)、如果没有为action指定method,默认执行action中的execute()方法。
    (3)、如果没有为action指定result,默认值为success。

       

    2、result配置的各种试图转发类型
    <result type="">...</result>
    其中type的常用类型有:
    dispatcher(默认值) ->转发
    redirect ->重定向
    redirectAction ->重定向的action在别的命名空间下
    如:<result type="redirectAction">
              <param name="actionName">helloworld</param>
              <param name="nameSpace">/test</param>
          </result>
    plainText ->显示原始文件内容
    如:<result type="">
              <param name="location">/xxx.jsp</param>
              <!--指定读取文件的编码-->
              <param name="charSet">UTF-8</param>
          </result>
    注意:在result中还可以使用${属性名}表达式访问action中的属性,表达式里的属性名对应action中的属性名
    如:<result name="success" type="redirect">/index.jsp?username=${username}</result>

       

    3、为应用指定多个struts配置文件

    在大部分应用里,随着应用规模的增加,系统中Action数量也大量增加,导致struts.xml配置文件变得非常臃肿。为了避免struts.xml文件过于庞大、臃肿,提高struts.xml文件的可读性,我们可以将一个struts.xml配置文件分解成多个配置文件,然后在struts.xml文件中包含其他配置文件。下面的struts.xml通过<include>元素指定多个配置文件:

    <?xml version="1.0" encoding="UTF-8"?>

    <!DOCTYPE struts PUBLIC

        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

        "http://struts.apache.org/dtds/struts-2.0.dtd">

    <struts>

      <include file="struts-user.xml"/>

      <include file="struts-order.xml"/>

    </struts>

    通过这种方式,我们就可以将Struts 2的Action按模块配置在多个配置文件中。

    以下为模拟案例

    目录结构

        

            

    HelloWordAction action类

    package com.ljq.action;

    import java.net.URLEncoder;


    public class HelloWordAction {
    private String msg;
    private String username;

    public String msg(){
    msg
    = "我的第一个Struts2应用";
    return "msg";
    }

    public String list() throws Exception{
    //对中文进行编码
    msg = "我的第一个Struts2应用";
    this.username=URLEncoder.encode("林计钦","UTF-8");
    return "list";
    }

    public String getMsg() {
    return msg;
    }

    public void setMsg(String msg) {
    this.msg = msg;
    }

    public String getUsername() {
    return username;
    }

    public void setUsername(String username) {
    this.username = username;
    }
    }

           

    message.jsp页面

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%
    String path
    = request.getContextPath();
    String basePath
    = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <base href="<%=basePath%>">

    <title>message</title>

    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->

    </head>

    <body>
    <b>${msg }</b>
    </body>
    </html>

          

    index.jsp页面

    <%@ page language="java" import="java.util.*,java.net.*" pageEncoding="UTF-8"%>
    <%
    String path
    = request.getContextPath();
    String basePath
    = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <base href="<%=basePath%>">

    <title>HelloWord</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->
    </head>

    <body>
    <%--
    <result name="list" type="redirect">不会显示${msg }的值
    <result name="list" type="dispatcher">会显示${msg }的值
    --%>
    ${msg }
    <br/>
    <%--获取url的请求参数 --%>
    <%--${param.username }会出现乱码 --%>
    ${param.username }
    <br/>
    <%=URLDecoder.decode(new String(request.getParameter("username").getBytes("ISO8859-1"),"UTF-8"),"UTF-8")%>
    </body>
    </html>

         

    helloworld_struts.xml子配置文件

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "struts-2.0.dtd">
    <struts>
    <!-- 全局result:有很多时候一个result可供很多action使用,这时可以使用global-results标签来定义全局的result -->
    <package name="base" extends="struts-default">
    <global-results>
    <result name="msg">/message.jsp</result>
    </global-results>
    </package>
    <package name="helloWord" namespace="/helloWord" extends="base" >
    <!-- 访问路径: http://localhost:8083/struts2_1/helloWord/manage.do -->
    <action name="manage" class="com.ljq.action.HelloWordAction" method="msg"></action>
    <!-- 访问路径: http://localhost:8083/struts2_1/helloWord/listHelloWord.do
    http://localhost:8083/struts2_1/helloWord/msgHelloWord.do
    -->
    <action name="*HelloWord" class="com.ljq.action.HelloWordAction" method="{1}">
    <!-- 注意:在result中还可以使用${属性名}表达式访问action中的属性,表达式里的属性名对应action中的属性名 -->
    <result name="list" type="redirect">/index.jsp?username=${username}</result>
    </action>
    </package>
    </struts>

         

    struts.xml配置文件

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "struts-2.0.dtd">

    <struts>
    <!-- 该属性指定需要Struts2处理的请求后缀,该属性的默认值是action,即所有匹配*.action的请求都由Struts2处理。
    如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开。
    -->
    <constant name="struts.action.extension" value="do,php" />
    <!--解决乱码 -->
    <constant name="struts.i18n.encoding" value="UTF-8" />
    <!-- 设置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好关闭 -->
    <constant name="struts.serve.static.browserCache" value="false" />
    <!-- 当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false(生产环境下使用),开发阶段最好打开 -->
    <constant name="struts.configuration.xml.reload" value="true" />
    <!-- 开发模式下使用,这样可以打印出更详细的错误信息 -->
    <constant name="struts.devMode" value="true" />
    <!-- 默认的视图主题 -->
    <constant name="struts.ui.theme" value="simple" />
    <!--<constant name="struts.objectFactory" value="spring" />-->
    <!-- 动态方法调用和使用通配符定义 -->
    <!--该属性设置Struts2是否支持动态方法调用,该属性的默认值为true。如果需要关闭动态方法调用,则可设置该为false -->
    <!--<constant name="struts.enable.DynamicMethodInvocation" value="false" />-->
    <!--上传文件的大小设置(这里的大小指的是总大小)-->
    <!--<constant name="struts.multipart.maxSize" value="10701096" />-->

    <!-- 引入 -->
    <include file="helloworld_struts.xml" />
    </struts>

    <!--注意:Struts2读取到Struts2.xml的内容后,以JavaBean形式存放在内存中。-->
    <!--以后Struts2对用户的每次请求处理将使用内存中的数据,而不是每次都读取Struts2.xml文件-->

                  

    运行结果

    1、访问路径: http://localhost:8083/struts2_1/helloWord/manage.do

    2、http://localhost:8083/struts2_1/helloWord/listHelloWord.do

  • 相关阅读:
    ADO.Net——增、删、改、查
    面向对象——类库五大原则
    面向对象——设计模式和委托
    JS 函数 内置方法和对象
    js 字符串、数组类型 及方法
    复习一下 Python三元运算
    复习一下 列表
    前端 2 CSS 选择器
    前端 1 HTML
    39
  • 原文地址:https://www.cnblogs.com/linjiqin/p/1985361.html
Copyright © 2020-2023  润新知