Struts2 ActionWildcard(通配符配置)约定优于配置

简介:

新建web project:struts2_0500_actionwildcard

Build Path

项目图:

  src:                  

    StudentAction.java

    TeacherAction.java

    struts.xml

  WebRoot:

    index.jsp

    Student_add.jsp

    Student_delete.jsp

    Student_edit.jsp

    Student_find.jsp

    Teacher_add.jsp

    Teacher_delete.jsp

 ------------------------------------Hongten---------------------------------

struts.xml

代码:

<?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>
 <constant name="struts.devMode" value="true" />
 <package name="Student" namespace="/" extends="struts-default">
  <action name="*_*" class="com.b510.hongten.{1}Action">
   <result>
    /{1}_{2}.jsp
            </result>
  </action>
  
  
  <action name="Student_add" class="com.b510.hongten.StudentAction"
   method="add">
   <result>
    /Student_delete.jsp
            </result>
  </action>
 </package>
</struts>

 ------------------------------------Hongten---------------------------------

 ------------------------------------Hongten---------------------------------

在这里,我们没有去添加Teacher_edit.jsp和Teacher_find.jsp,要想说明的是,如果我们要添加的时候

直接添加即可,不会因为我们又添加了新的的文件,而影响整个程序的运行。但是添加的时候

一定要遵守"约定优于配置"的原则。如:Teacher的首字母一定要大写,Teacher_edit.jsp就得一定要以

这种形式去写。不然我们还是免不了去修改配置文件;

还有一个就是,我们看到struts.xml文件中有两个action,其实这里只是为了做一个小测试二用的:

我们的程序中只用:

  <action name="*_*" class="com.b510.hongten.{1}Action">
   <result>/{1}_{2}.jsp</result>
    </action>

就足可以使我们的程序很好的运行起来,但是添加了第二个action后:

  <action name="Student_add" class="com.b510.hongten.StudentAction"
   method="add">
   <result>/Student_delete.jsp</result>
   </action>

这时候就会出现我们访问一个url:http://localhost:1000/struts2_0500_actionwildcard/Student_add

的时候,是去的是:Student_delete.jsp 这个页面,而不是我们的Student_add.jsp页面,这是为什么呢?

原因是:在struts2中,当我们访问的url来到的时候,服务器就会在struts.xml文件中找最接近这个url的action(如果

是同一个包中),我们很容易发现:

  "*_*"和"Student_add" 和url相比较,显然是后者要接近,所以选择了Student_delete.jsp,而非Student_add.jsp
 

 ------------------------------------Hongten--------------------------------- 

 ------------------------------------Hongten---------------------------------

StudentAction.java

代码:

package com.b510.hongten;

import com.opensymphony.xwork2.ActionSupport;

/**
 * 
 * @author XHW
 * 
 * @date 2011-7-30
 * 
 */
public class StudentAction extends ActionSupport {
 private static final long serialVersionUID = -5023520095036169842L;

 public String add() {
  return SUCCESS;
 }

 public String delete() {
  return SUCCESS;
 }

 public String edit() {
  return SUCCESS;
 }

 public String find() {
  return SUCCESS;
 }
}

 ------------------------------------Hongten---------------------------------

TeacherAction.java

代码;

package com.b510.hongten;

import com.opensymphony.xwork2.ActionSupport;

/**
 * 
 * @author XHW
 * 
 * @date 2011-7-30
 * 
 */
public class TeacherAction extends ActionSupport {
 private static final long serialVersionUID = -5023520095036169843L;

 public String add() {
  return SUCCESS;
 }

 public String delete() {
  return SUCCESS;
 }

 public String edit() {
  return SUCCESS;
 }

 public String find() {
  return SUCCESS;
 }
}

 ------------------------------------Hongten---------------------------------

 index.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>My JSP 'index.jsp' starting page</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>
    My JSP 'index.jsp' starting page<br>
    <a href="<%=basePath %>Student_add">增加学生</a>
    <a href="<%=basePath %>Student_delete">删除学生</a><br>
    <a href="<%=basePath %>Student_edit">编辑学生</a>
    <a href="<%=basePath %>Student_find">查看学生</a><br>
    <a href="<%=basePath %>Teacher_add">增加老师</a>
    <a href="<%=basePath %>Teacher_delete">删除老师</a><br>
    <a href="<%=basePath %>Teacher_edit">编辑老师</a>
    <a href="<%=basePath %>Teacher_find">查看老师</a><br>
  </body>
</html>

 ------------------------------------Hongten---------------------------------

Student_add.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>My JSP 'Student_add.jsp' starting page</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>
   My JSP 'Student_add.jsp' starting page <br>
   <a href="<%=basePath %>index.jsp">home</a>
  </body>
</html>

 ------------------------------------Hongten---------------------------------

Student_delete.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>My JSP 'Student_delete.jsp' starting page</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>
    My JSP 'Student_delete.jsp' starting page <br>
   <a href="<%=basePath %>index.jsp">home</a>
  </body>
</html>

 ------------------------------------Hongten---------------------------------

Student_edit.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>My JSP 'Student_edit.jsp' starting page</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>
    My JSP 'Student_edit.jsp' starting page <br>
    <a href="<%=basePath %>index.jsp">home</a>
  </body>
</html>

 ------------------------------------Hongten---------------------------------

Student_find.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>My JSP 'Student_find.jsp' starting page</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>
    My JSP 'Student_find.jsp' starting page <br>
  <a href="<%=basePath %>index.jsp">home</a>
  </body>
</html>

 ------------------------------------Hongten---------------------------------

Teacher_add.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>My JSP 'Teacher_add.jsp' starting page</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>
   My JSP 'Teacher_add.jsp' starting page<br>
   <a href="<%=basePath %>index.jsp">home</a>
  </body>
</html>

 

 ------------------------------------Hongten---------------------------------

Teacher_delete.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>My JSP 'Teacher_delete.jsp' starting page</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>
   My JSP 'Teacher_delete.jsp' starting page <br>
  <a href="<%=basePath %>index.jsp">home</a>
  </body>
</html>

目录
相关文章
|
9天前
|
存储 关系型数据库 分布式数据库
PostgreSQL 18 发布,快来 PolarDB 尝鲜!
PostgreSQL 18 发布,PolarDB for PostgreSQL 全面兼容。新版本支持异步I/O、UUIDv7、虚拟生成列、逻辑复制增强及OAuth认证,显著提升性能与安全。PolarDB-PG 18 支持存算分离架构,融合海量弹性存储与极致计算性能,搭配丰富插件生态,为企业提供高效、稳定、灵活的云数据库解决方案,助力企业数字化转型如虎添翼!
|
7天前
|
存储 人工智能 Java
AI 超级智能体全栈项目阶段二:Prompt 优化技巧与学术分析 AI 应用开发实现上下文联系多轮对话
本文讲解 Prompt 基本概念与 10 个优化技巧,结合学术分析 AI 应用的需求分析、设计方案,介绍 Spring AI 中 ChatClient 及 Advisors 的使用。
355 130
AI 超级智能体全栈项目阶段二:Prompt 优化技巧与学术分析 AI 应用开发实现上下文联系多轮对话
|
7天前
|
人工智能 Java API
AI 超级智能体全栈项目阶段一:AI大模型概述、选型、项目初始化以及基于阿里云灵积模型 Qwen-Plus实现模型接入四种方式(SDK/HTTP/SpringAI/langchain4j)
本文介绍AI大模型的核心概念、分类及开发者学习路径,重点讲解如何选择与接入大模型。项目基于Spring Boot,使用阿里云灵积模型(Qwen-Plus),对比SDK、HTTP、Spring AI和LangChain4j四种接入方式,助力开发者高效构建AI应用。
347 122
AI 超级智能体全栈项目阶段一:AI大模型概述、选型、项目初始化以及基于阿里云灵积模型 Qwen-Plus实现模型接入四种方式(SDK/HTTP/SpringAI/langchain4j)
|
20天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1338 8
|
1天前
|
存储 JSON 安全
加密和解密函数的具体实现代码
加密和解密函数的具体实现代码
189 136
|
6天前
|
监控 JavaScript Java
基于大模型技术的反欺诈知识问答系统
随着互联网与金融科技发展,网络欺诈频发,构建高效反欺诈平台成为迫切需求。本文基于Java、Vue.js、Spring Boot与MySQL技术,设计实现集欺诈识别、宣传教育、用户互动于一体的反欺诈系统,提升公众防范意识,助力企业合规与用户权益保护。
|
19天前
|
机器学习/深度学习 人工智能 前端开发
通义DeepResearch全面开源!同步分享可落地的高阶Agent构建方法论
通义研究团队开源发布通义 DeepResearch —— 首个在性能上可与 OpenAI DeepResearch 相媲美、并在多项权威基准测试中取得领先表现的全开源 Web Agent。
1429 87
|
6天前
|
JavaScript Java 大数据
基于JavaWeb的销售管理系统设计系统
本系统基于Java、MySQL、Spring Boot与Vue.js技术,构建高效、可扩展的销售管理平台,实现客户、订单、数据可视化等全流程自动化管理,提升企业运营效率与决策能力。