1.① String path = request.getContextPath(); 可以获取工程的名字struts2_0100_path
② String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 最终形成了"http://localhost:8080/struts2_0100_path/",在所有的链接之前加上basePath就形成了绝对路径。
- request.getScheme() 拿到“http”字符串
- request.getServerName() 拿到localhost
- request.getServerPort() 拿到8080端口号
使用方法:
①<a href="<%=basePath%>index.jsp">index.jsp</a>
②在<head></head>之间添加<base href="<%=basePath%>" />标签,指定base是什么内容。这个base的意思是说当前我们所有的这个页面里的链接前面默认它都会加上basePath
2.struts2中路径问题是根据action的路径来确定而不是JSP路径来确定,所有尽量不要用相对路径。
虽然可以使用redirect方式解决,但redirect方式非必要。
解决办法非常简单,统一使用绝对路径。
3.①Action执行的时候并不一定要执行execute()方法。
②可以在配置文件中配置Action的时候,使用“method=”来指定执行那个方法(不推荐),因为如果action中有很多方法的话,就要在struts.xml中配置很多action。
③也可以在URL地址中动态指定(动态方法调用DMI)(推荐),因为不管action中有多少个方法,只需要在struts.xml中配置一个action。
4.wildcard 通配符 eg: * , {n}
①使用通配符将配置量降低到最低
②当客户请求一个action时,最精确的Action优先匹配,与其位置无关; 带 * 符号的Action优先级别相同,那个在前,优先匹配那个,与位置相关。
③ 情况1:
1.有三个action 顺序如下: name ="student_*"name = "*_*"
name = “student_add”
2.输入:http://localhost:8080/struts2/student_add
分析:会匹配第三个action,因为当一个客户请求一个action时,最精确的Action优先匹配,与其前后位置无关。
情况2:
1.有2个action 顺序如下: name = “*_*”
name = “student_*”
2.输入:http://localhost:8080/struts2/student_add
分析:会匹配第一个action,因为带“*” 符号的Action优先级别相同
5.在Struts2里面,你可以往action里面传参数,参数怎么来接收呢?在Action里面有3种方式来接收参数的方式
①通过成员变量来接受
URL地址中的参数名字(eg:age)要和Action中setXXX(setAge)中的XXX(Age)相同,而成员变量XXX对应的set方法不一定要遵循setXXX()格式,因为URL地址中输入的参数是经过Action中setXXX()方法给成员变量赋值的,而不是直接给成员变量赋值的
②DomainModel 域模型来直接接收参数
1.定义一个User类,该类有二个属性String name和int age
2.在Action中,声明private User user(该user不用new,Struts2自动帮我们创建User对象),并自动生成对应的setUser和getUser方法,这样写之后,我们可以直接给User赋值。
说明:执行流 :a.首先调用getUser()来获取user,如果user为null的话,调用setUser来创建一个User对象并且给User对象的age属性赋值,然后将User赋值的引用传给成员变量user。
b,递归调用getUser,此时user不为null,直接给成员变量user的name属性赋值"gaoweigang" 。
c,最后调用action中的add方法。
我们输入的参数个数有可能不是恰好和域模型匹配,我输入了1个参数name,域模型是不是正好要有1个参数呢?不是,这时候并不会报错,age是赋予默认值0。
再如:我们输入3个参数分别为name,age, birthday(Model中并不存在该属性),域模型中name和age属性会被正常赋值,birthday会在后台报错ognl.NoSuchPropertyException。
③通过ModelDriven来接收,这种方式并不常用,不过其中隐含了一种非常重要的程序设计思想(MVC模型)
implements ModelDriven<User>,DomainModel要自己new。
运行机制:struts2接收到2个参数,接收到2个参数后,它就会new那个访问的action, new这个action的时候,它就会发现这个action实现了ModelDriven接口,你既然实现了ModelDriven接口,那么就调用getModel()方法,返回一个DomainModel(User对象),再调用setName和setAge给User赋值。
相关推荐
JavaScript获取网页表单的action属性是一种常用的操作,通常用于获取表单提交时要发送到的URL地址。在Web开发中,表单是用来收集用户输入数据并将其发送到服务器的HTML元素。action属性指定了表单提交后,服务器处理...
Spring in Action CN.001<br>Spring in Action CN.002<br>Spring in Action CN.003<br>Spring in Action CN.004<br>Spring in Action CN.005<br>Spring in Action CN.006<br>Spring in Action ... <br>本书信息:...
"Action_Portable"是一款被誉为最强大的录屏软件,它的便携式版本允许用户在无需安装的情况下,随时随地进行高质量的屏幕录制。Action!以其出色的性能、丰富的功能和易用性赢得了用户的广泛赞誉。以下是对这款软件的...
### jsp自动调用action详解 #### 一、概述 在Web开发中,尤其是在使用Java Server Pages (JSP)与Struts框架时,有时需要在用户访问某个初始页面(如欢迎页)时自动触发一系列后端操作(如执行某个Action)。这种...
在Struts2框架中,自定义Action是实现业务逻辑的核心组件。这个教程将带你了解如何通过实现`Action`接口来创建一个简单的登录功能。首先,我们需要理解Struts2的架构和Action类的角色。 Struts2是一个基于MVC...
在开发Java Web应用程序时,尤其是使用Struts2或者Spring MVC等MVC框架时,我们经常需要在多个Action之间进行跳转并传递参数。这在构建动态、交互性强的Web应用中是必不可少的。本项目旨在演示如何在自定义的Action...
Struts2和Struts1是两个非常著名的Java Web框架,它们在处理请求时通常会在URL中显式地显示.action或.do后缀。然而,为了提供更友好的用户体验和增强安全性,有时我们需要隐藏这些扩展名。本篇文章将详细介绍如何在...
在某些情况下,我们可能需要启动多个Service来执行不同的任务,但问题在于,如果这些Service的Intent ACTION(动作)相同,可能会引发冲突。本篇文章将深入探讨这个主题,并提供一个验证示例。 当多个Service声明了...
Action 之间的跳转 Action 之间的跳转是 Struts2 框架中的一种机制,允许不同的 Action 之间进行跳转,以实现复杂的业务逻辑。这种机制可以分为两种类型:chain 和 redirect-action。 1. Chain 类型 当 type 为 ...
13. `ACTION_DATA_ACTIVITY_STATE_CHANGED_ACTION` 和 `ACTION_DATA_CONNECTION_STATE_CHANGED_ACTION`:这两个广播分别用于通知电话的数据活动状态和数据连接状态变化,对于网络相关功能的监控非常有用。...
在表单提交时,我们可以通过`action`属性设置表单数据的提交地址,即URL。例如: ```html <form action="doSomething" method="post"> <!-- 表单内容 --> ``` 这里的`doSomething`就是Action方法的标识,它会被...
### Action的三种类型详解 在自动化测试工具QTP(Quick Test Professional)中,Action是一种重要的概念,它代表了脚本中的一个独立执行单元。通过合理地组织和利用Action,可以帮助测试人员更高效、灵活地进行自动...
form name="myform" id="myform" action="ssss" method="post" onsubmit="getUrl();"> javascript方法: [removed] function getUrl(){ $('form').attr('action','new_url'); } [removed] 或者用单纯的...
在Android应用开发中,Action Bar(操作栏)是界面设计中的一个重要组成部分,它为用户提供了一种统一且高效的交互方式。这个部分将详细讲解Action Bar的基本概念、功能、设计原则以及如何在代码中实现。 一、...
### Action传递参数的三个方法 在自动化测试领域,特别是使用QTP(Quick Test Professional)工具进行脚本开发时,参数化是一种非常重要的技术。通过参数化可以提高测试脚本的复用性和灵活性,使得测试更加高效。...
Spring in Action CN.001<br>Spring in Action CN.002<br>Spring in Action CN.003<br>Spring in Action CN.004<br>Spring in Action CN.005<br>Spring in Action CN.006<br>Spring in Action ... <br>本书信息:...
当我们想要从应用中拨打电话时,就需要用到Intent ACTION_CALL这个知识点。接下来,我们将深入探讨如何在Android中使用Intent ACTION_CALL来实现拨打电话的功能。 首先,理解Intent ACTION_CALL的含义是关键。...
"Struts2 in Action" 是一本深入探讨Struts2框架的专业书籍,旨在帮助开发者掌握这一框架的核心概念和实践技巧。这本书的中文版不仅提供了理论知识,还附带有配套的源代码,方便读者进行实践操作,加深理解。 ...
### Struts2中Action间的参数传递方法 在Struts2框架中,经常需要实现Action之间的跳转,并在跳转过程中传递必要的参数。这种需求在实际开发中非常常见,尤其是在需要根据用户的不同操作来调用不同的业务逻辑时。...
在讨论Struts2框架时,我们经常会遇到一个关键词——Action,它在Struts2中扮演着非常关键的角色。今天我们就来探讨Action的含义、作用以及在Struts2框架中的配置。 首先,Action在Struts2中包含三层含义。第一层,...