`

struts02:占位符、通配符

 
阅读更多

第一:概念:无

 

第二:struts2通配符的使用(!是在jsp页面的时候用的)

第一步:struts.xml中的action标签不写method属性了

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
   <package name="my" namespace="/" extends="struts-default">
     <action name="login" class="com.action.TestAction" >
         <result name="success">success.jsp</result>
         <result name="error">error.jsp</result>
     </action>
   </package>
</struts>   

第二步: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>
   <form action="login!UserLogin.action">
                         姓名: <input type="text" name="test.name"><br>
                        年龄:   <input type="text" name="test.age"><br>  
        <input type="submit" value="提交">   
   </form>
  </body>
</html>

第三步:action层:必须有名字为UserLogin的方法

package com.action;

import com.entity.Test;

public class TestAction {
 private Test test;

 public Test getTest() {
  return test;
 }

 public void setTest(Test test) {
  this.test = test;
 }
 public String UserLogin(){
  if(test.getName().equals("admin")&&test.getAge()==8){
   return "success";
  }
     return "error";
 }

}

 

 

第三:使用占位符和通配符

1.struts.xml的配置(其中*表示通配符,{1}表示占位符)

注意:*所表示的内容就是{1}所要表示的内容

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
   <package name="my" namespace="/" extends="struts-default">
     <action name="login_*" class="com.action.TestAction" method="{1}">
         <result name="success">success.jsp</result>
         <result name="error">error.jsp</result>
     </action>
   </package>
</struts>   

2.jsp页面(在表单提交的时候,占位符的位置使用UserLogin字符串替代了,体现了通配符)

<%@ 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>
   <form action="login_UserLogin.action">
                         姓名: <input type="text" name="test.name"><br>
                        年龄:   <input type="text" name="test.age"><br>  
        <input type="submit" value="提交">   
   </form>
  </body>
</html>

3.action类(由于jsp页面在表单提交的时候,使用了login_UserLogin.action,因此在action类中必定会出现UserLogin方法,因为struts.xml中的占位符{1}就是给struts.xml中的通配符*用的)

package com.action;

import com.entity.Test;

public class TestAction {
 private Test test;

 public Test getTest() {
  return test;
 }

 public void setTest(Test test) {
  this.test = test;
 }
 public String UserLogin(){
  if(test.getName().equals("admin")&&test.getAge()==8){
   return "success";
  }
     return "error";
 }

}

第四:课外知识

最为简单的action配置可以说是一个action对应一个类。形如下面:
<package name="schoolweibo" extends="struts-default">

<action name="register" class="registerAction">
<result name="success">/page/user_Login.jsp</result>
</action>
</package>
这样虽然清晰明了,但是如果有太多的Action,那就要写很多配置文件,基于此,struts2提供了模糊匹配;也就是动态定位。
<package name="schoolweibo" extends="struts-default">

<action name="user_*" class="indexAction" method="{1}">
<result name="success">/page/user_{1}.jsp</result>
</action>
</package>
其中【*】号代表占位符,而【{1}】表示【*】所对于的action中的方法,比如jsp页面中这样写:
<a href="user_register.action">立即注册</a>
那么对于的indexAction类中的就是register方法。注意:这样写的前提是必须把execute方法去掉,即不要重写。这还不是最少配置的。
下面来看一个最少配置的。
<package name="schoolweibo" extends="struts-default">

<action name="*_*" class="{1}Action" method="{2}">
<result name="success">/page/{1}_{2}.jsp</result>
</action>
</package>
这里有两个占位符,第一个代表对于的action类名,第二个代表方法名。如果还有更多占位符,则可以以此类推。

 

 

分享到:
评论

相关推荐

    Struts2中使用通配符优化配置

    在Struts2的配置文件(通常为struts.xml或struts-default.xml)中,通配符是一种特殊字符,如`*`,它可以用作占位符,匹配一组相似的Action或URL。通过使用通配符,我们可以创建一组通用的配置规则,这些规则可以...

    struts培训资料

    通配符配置允许在Action路径中使用星号(*)作为占位符,匹配多个Action。例如,`*`可以匹配任意字符,`{1}`、`{2}`等可以匹配请求路径中的参数,提高配置的灵活性。 九、Action的属性接收参数: 1. 在Action添加成员...

    Struts2_wang_Wildcard.rar_wildcard

    等占位符可以捕获URL中的部分,并将其作为参数传递给Action。这使得Action可以根据URL中的不同部分执行相应的业务逻辑。 压缩包中的`Struts2_wang_Wildcard`可能包含了以下组件: 1. **Action类**:实现通配符...

    struts中动态方法调用使用通配符

    这里,`*`作为通配符匹配任何请求,`{1}`是一个占位符,代表第一个通配符匹配到的字符串。所以,当用户点击“登录”按钮,`method`将被解析为“Login”,执行`action.Action`类的`login()`方法,并跳转到`userLogin....

    Struts2学习笔记(4)-通配符的使用

    `class`属性指定为`com.bjsxt.struts2.action.StudentAction`,`method`属性通过占位符"{1}"动态地获取名称中的剩余部分,作为方法名。对应的`result`路径也会根据动作名称动态生成,如`/Studentadd_success.jsp`。 ...

    一个自己写的用struts分发实现的ssh

    )作为占位符,匹配多个URL模式。例如,`*`可以匹配任意数量的字符,而`?`只匹配单个字符。这样的配置可以减少Action 类的数量,提高代码复用,同时降低维护成本。 总之,在这个项目中,开发者尝试用Struts 来实现...

    struts hibernate spring 知识点

    通过`{1}`等占位符可以指定通配符的顺序。 7. Action接收参数的方式多样,包括直接在URL中传参、使用域模型(Domain Model)、DTO(Data Transfer Object)或Model Driven模式。Struts2的标签`s:property value=...

    java资源之Mybatis基础入门学习笔记

    1. **占位符赋值**:JDBC需要手动为SQL的占位符赋值,Mybatis通过动态SQL解决了这一问题。 2. **结果集封装**:Mybatis自动处理结果集,无需手动封装,提高了开发效率。 3. **缓存优化**:JDBC没有内置缓存,而...

    Sturts2的学习

    `{1}`是占位符,表示从URL中提取的实际参数,这里表示匹配以"student"开头的所有动作,并将剩余的部分作为方法名。 传递参数的方法有两种常见方式: 1. 直接在Action中声明参数:在Action类中定义字段,Struts2的...

    ssh 分页 代源码 简单易懂

    例如,如果查询字段是`name`,模糊查询的HQL可能是`from Entity where name like :keyword`,这里的`:keyword`是占位符,实际使用时会被用户输入的值替换,通配符 `%` 可以用来匹配任意字符。 总的来说,SSH框架下...

    spring框架登录初始化数据与struct2权限设置等相关知识

    - **映射动态配置**:使用通配符(*)和占位符({})来定义请求映射规则,使得Struts2能够更加灵活地处理各种URL请求。 **4. 传值的获取表达式** - **EL表达式**:用于存取数据,支持`.`和`[]`两种运算符。当属性名...

    sitemesh框架简单例子

    在模板中,使用特殊的占位符(如`&lt;@page&gt;`或`&lt;decorator:content/&gt;`)来指示Sitemesh插入页面内容的位置。 一旦配置完成,Sitemesh就会自动处理你的请求。当你访问一个页面时,Sitemesh会捕获响应,应用装饰器模板...

    SSH和SSI等框架常用基础配置web.xml

    在实际应用中,应该使用具体的实现类替换掉`xxxx`占位符。`FilterChainProxy`是Acegi Security框架中的核心组件之一,用于构建过滤器链来管理安全控制逻辑。 #### 七、总结 通过对`web.xml`配置文件中各个关键配置...

Global site tag (gtag.js) - Google Analytics