struts2.5+框架使用通配符与动态方法常见问题小结

Struts2.5+框架使用通配符与动态方法常见问题

在使用Struts2.5+框架进行web开发过程中,经常会用到通配符和动态方法的方式进行访问,但在实际开发中,可能会遇到一些问题。下面我们就来详细讲解一下在使用通配符和动态方法时会遇到的常见问题,并提供一些解决方案。

通配符使用

通配符的作用是将不同的请求映射到同一个Action中进行处理。比如你有两个请求 /user/info/1/user/update/1,你可以通过在 Struts.xml 文件中使用通配符 /* 的方式将它们映射到同一个 Action 中进行处理。

问题一:通配符和正则表达式怎么用?

通配符在 Struts2.5+ 中是使用正则表达式实现的,因此在使用通配符时,要注意避免和正则表达式的语法冲突。比如下面的代码中,我们想把所有的请求都映射到一个 Action 中:

<action name="/*" class="com.example.MyAction">
  <result>/result.jsp</result>
</action>

但是这段代码中,/* 实际上是一个正则表达式中的符号,表示匹配任意字符零次或多次,因此这个配置是匹配不到任何请求的。如果要使用通配符,请使用 /{*} 的方式进行配置,如下所示:

<action name="/{*}" class="com.example.MyAction">
  <result>/result.jsp</result>
</action>

问题二:如何传递参数?

在使用通配符时,请求的参数是作为 HttpServletRequest 对象的属性传递到 Action 的方法中的。比如我们有一个请求 /user/info/1,其中的 1 可以作为参数传递到 Action 的方法中。下面是一段示例代码:

public class MyAction extends ActionSupport {

  private String id;

  public void setId(String id) {
    this.id = id;
  }

  public String execute() throws Exception {
    System.out.println(id);
    return SUCCESS;
  }
}

在这段代码中,我们将请求参数 1 的值通过 setId 方法传递到了 id 变量中。

动态方法使用

动态方法的作用是在一个 Action 中定义多个方法,根据请求参数的不同调用相应的方法。比如你有一个请求 /user/info.action?method=get,则会调用 Action 中的 get 方法进行处理。

问题三:动态方法的参数名如何定义?

在使用动态方法时,参数名必须是 method,否则 Struts2.5+ 将无法识别请求参数。同时,method 参数可以通过在 action 的配置中进行定义。比如下面的代码,定义了 method 参数的默认值为 execute

<action name="user" class="com.example.UserAction">
  <param name="method">execute</param>
  <result>/user.jsp</result>
</action>

问题四:动态方法的命名有什么要求?

在动态方法中,方法的命名必须以 execute 开头,比如 executeGetexecuteSave 等。同时,在使用动态方法时,为了避免与 Struts2.5+ 的默认方法名发生冲突,建议将动态方法名统一使用 execute 开头,比如 executeGetexecuteSave 等。

示例

下面我们来演示一下在 Struts2.5+ 中如何使用通配符和动态方法:

示例一:通配符

首先在 Struts.xml 中进行如下配置:

<action name="/user/*" class="com.example.UserAction">
  <result>/user.jsp</result>
</action>

在 UserAction 中的代码如下:

public class UserAction extends ActionSupport {

  private String id;

  public void setId(String id) {
    this.id = id;
  }

  public String execute() throws Exception {
    System.out.println("execute method");
    System.out.println(id);
    return SUCCESS;
  }
}

当我们访问 /user/info/1 时,就会执行 UserAction 类中的 execute 方法,并将请求参数 1 的值赋值给 id 变量。

示例二:动态方法

首先在 Struts.xml 中进行如下配置:

<action name="user" class="com.example.UserAction">
  <param name="method">executeGet</param>
  <result>/user.jsp</result>
</action>

在 UserAction 中的代码如下:

public class UserAction extends ActionSupport {

  private String id;

  public void setId(String id) {
    this.id = id;
  }

  public String executeGet() throws Exception {
    System.out.println("executeGet method");
    System.out.println(id);
    return SUCCESS;
  }
}

当我们访问 /user?action=get&id=1 时,就会执行 UserAction 类中的 executeGet 方法,并将请求参数 1 的值赋值给 id 变量。

总结

在使用 Struts2.5+ 框架进行 web 开发时,通配符和动态方法是常见的访问方式,掌握了它们的正确使用方法,可以使我们的开发更加方便和高效。同时,我们也需要注意上述介绍中提到的问题,以免在开发中出现错误。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:struts2.5+框架使用通配符与动态方法常见问题小结 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • Java 从json提取数组并转换为list的操作方法

    下面是 “Java 从json提取数组并转化为list的操作方法” 的完整攻略: 1. 需要的依赖 在 Java 中使用 JSON 数据,我们需要导入相应的 JSON 解析库,这里我们以 JSON-java 为例。 在 Maven 项目中添加以下依赖即可: <dependency> <groupId>org.json</grou…

    Java 2023年5月26日
    00
  • JSP教程(一)

    下面是“JSP教程(一)”的完整攻略。 标题 在文档开头加入标题,以便读者能够了解该文档的内容。 # JSP教程(一) 简介 在简短的几句话中介绍文档的内容和目标用户。 本文档将介绍什么是JSP,以及JSP的结构和基本语法。本文适合那些对Java Web开发有基本了解的读者阅读。 什么是JSP? JSP(Java Server Pages)是一种Java技术…

    Java 2023年6月15日
    00
  • java取某段/某个时间段的值的方法

    当我们需要从Java中的日期/时间中取出某个时间段的值时,可以使用Java中已经内置的日期/时间库来完成。 下面是取某段时间的值的方法的完整攻略: 步骤1:创建日期或时间对象 在Java中,日期和时间对象可以通过使用内置的Date,Calendar,LocalDate,LocalDateTime等类来创建。例如: Date date = new Date()…

    Java 2023年5月20日
    00
  • 详解Spring Boot最新版优雅停机的方法

    详解Spring Boot最新版优雅停机的方法 Spring Boot 是一个非常流行的 Java Web 开发框架,但在生产环境中,如果需要升级或重启应用,就需要考虑如何优雅地停止应用,以免影响用户访问。本文将详细讲解 Spring Boot 最新版优雅停机的方法。 为什么需要优雅停机 通常,为了升级应用程序或更改配置文件等原因需要停止应用程序。 在这种情…

    Java 2023年5月19日
    00
  • Spring Security系列教程之会话管理处理会话过期问题

    Spring Security系列教程之会话管理处理会话过期问题 在使用Spring Security构建Web应用时,会话管理是非常重要的一部分。会话的过期问题也需要得到妥善的处理。本文将对Spring Security的会话管理流程进行详细讲解,并提供两条示例来说明如何处理会话过期问题。 会话管理流程 Spring Security的会话管理处理流程如下…

    Java 2023年5月20日
    00
  • 什么是Java线程池?

    Java线程池是Java提供的一个用于管理和重复使用线程的机制。线程池将一组线程存储在内存中,当需要执行一些任务时,可以分配一个线程来处理任务,以提高性能和资源利用率。 Java线程池的使用攻略: 步骤1:创建一个线程池 Java线程池通常使用Executor工厂类来创建。 Executor提供了许多静态工厂方法来创建不同种类的线程池。其中,最常用的是Exe…

    Java 2023年5月11日
    00
  • java 使用URLDecoder和URLEncoder对中文进行处理

    下面是详细讲解“java 使用URLDecoder和URLEncoder对中文进行处理”的完整攻略。 什么是URLDecoder和URLEncoder URLDecoder和URLEncoder是Java中内置的两个工具类,用于将字符串进行URL编码和解码。URL编码是指将字符串中的特殊字符(如中文)转换成%XX的形式,以便在URL中传输。URL解码则是将%…

    Java 2023年5月20日
    00
  • 谈谈为JAXB和response设置编码,解决wechat4j中文乱码的问题

    针对“谈谈为JAXB和response设置编码,解决wechat4j中文乱码的问题”,我为你提供以下攻略: 如何为JAXB设置编码 1. 设置XML文件头部 在编写JAXB应用程序时,首先需要设置XML文件头部,以确保正确解析XML内容。通常在XML文件头部加上<?xml version=”1.0″ encoding=”UTF-8″ standalon…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部