struts2取得request,session,appilcation的方法

本文详细介绍了Struts框架中如何通过ActionContext、实现Aware接口、ServletActionContext以及ServletRequestAware接口来获取request、session、application对象的方法,并展示了在JSP页面上获取这些对象的实例。

  1. Map类型——request,session,application  
  2.   
  3. 真实类型——HttpServletRequest,HttpSession,ServletContext  
  4.   
  5. Map类型是Struts对真实类型的一个封装,会将真实类型映射到Map类型中  
  6.   
  7.   
  8.   
  9. 取得上述元素有以下4种方法  
  10.   
  11. 1  通过ActionContext来访问request,session,application对象  
  12.   
  13. 2  通过实现RequestAware、SessionAware、ApplicationAware  
  14.   
  15.     接口来访问request,session,application对象(常用)  
  16.   
  17. 3  通过ServletActionContext来访问request,session,application对象  
  18.   
  19. 4  通过实现ServletRequestAware接口来访问request,session,application对象  
  20.   
  21.   
  22. 第一种方法  
  23.   
  24. package com.bjsxt.struts2.user.action;  
  25.   
  26. import java.util.Map;  
  27. import com.opensymphony.xwork2.ActionContext;  
  28. import com.opensymphony.xwork2.ActionSupport;  
  29.   
  30. public class LoginAction1 extends ActionSupport {  
  31.    
  32.     private Map request;  
  33.     private Map session;  
  34.     private Map application;  
  35.    
  36.     public LoginAction1() {  
  37.         request = (Map)ActionContext.getContext().get("request");  
  38.         session = ActionContext.getContext().getSession();  
  39.         application = ActionContext.getContext().getApplication();  
  40.     }  
  41.    
  42.     public String execute() {  
  43.         request.put("r1""r1");  
  44.         session.put("s1""s1");  
  45.         application.put("a1""a1");  
  46.           
  47.         return SUCCESS;  
  48.     }  
  49. }  
  50. 通过取得Struts的Action的上下文来取得上述三种元素,map类型的。  
  51.   
  52.   
  53.   
  54.   
  55. 方法二  
  56.   
  57. package com.bjsxt.struts2.user.action;  
  58.   
  59. import java.util.Map;  
  60. import org.apache.struts2.interceptor.ApplicationAware;  
  61. import org.apache.struts2.interceptor.RequestAware;  
  62. import org.apache.struts2.interceptor.SessionAware;  
  63.   
  64. import com.opensymphony.xwork2.ActionContext;  
  65. import com.opensymphony.xwork2.ActionSupport;  
  66.   
  67. public class LoginAction2 extends ActionSupport   
  68.           implements RequestAware,SessionAware,ApplicationAware {  
  69.    
  70.     private Map<String, Object> request;  
  71.     private Map<String, Object> session;  
  72.     private Map<String, Object> application;  
  73.    
  74.   // IOC  
  75.   
  76.     public String execute() {  
  77.         request.put("r1""r1");  
  78.         session.put("s1""s1");  
  79.         application.put("a1""a1");  
  80.       
  81.         return SUCCESS;  
  82.     }  
  83.   
  84.     @Override  
  85.     public void setRequest(Map<String, Object> request) {  
  86.         this.request = request;  
  87.   }  
  88.   
  89.     @Override  
  90.     public void setSession(Map<String, Object> session) {  
  91.         this.session = session;  
  92.   }  
  93.   
  94.     @Override  
  95.     public void setApplication(Map<String, Object> application) {  
  96.         this.application = application;  
  97.     }  
  98.  }  
  99.   
  100.   
  101. 通过Struts注入进来三个元素,map类型。  
  102.   
  103. 前台jsp页面获取后台值的方式  
  104.   
  105. <s:property value="#request.r1> | <%=request.getAttribute("r1")%>  
  106. <s:property value="#session.s1"/> | <%=session.getAttribute("s1")%>  
  107. <s:property value="#application.a1"/> |<%=application.getAttribute("a1")%>  
  108.   
  109.   
  110.   
  111. 方法三  
  112.   
  113. package com.bjsxt.struts2.user.action;  
  114.   
  115. import javax.servlet.ServletContext;  
  116. import javax.servlet.http.HttpServletRequest;  
  117. import javax.servlet.http.HttpSession;  
  118.   
  119. import org.apache.struts2.ServletActionContext;  
  120.   
  121. import com.opensymphony.xwork2.ActionSupport;  
  122.   
  123. public class LoginAction3 extends ActionSupport {  
  124.    
  125.     private HttpServletRequest request;  
  126.     private HttpSession session;  
  127.     private ServletContext application;   
  128.       
  129.     public LoginAction3() {  
  130.         request = ServletActionContext.getRequest();  
  131.         session = request.getSession();  
  132.         application = session.getServletContext();  
  133.     }  
  134.    
  135.     public String execute() {  
  136.         request.setAttribute("r1""r1");  
  137.         session.setAttribute("s1""s1");  
  138.         application.setAttribute("a1""a1");  
  139.         return SUCCESS;  
  140.     }  
  141. }  
  142.   
  143.   
  144. 取得的是真实的类型  
  145.   
  146.   
  147. 方法四  
  148. package com.bjsxt.struts2.user.action;  
  149.   
  150. import javax.servlet.ServletContext;  
  151. import javax.servlet.http.HttpServletRequest;  
  152. import javax.servlet.http.HttpSession;  
  153.   
  154. import org.apache.struts2.interceptor.ServletRequestAware;  
  155.   
  156. import com.opensymphony.xwork2.ActionSupport;  
  157.   
  158. public class LoginAction4 extends ActionSupport implements ServletRequestAware {  
  159.    
  160.     private HttpServletRequest request;  
  161.     private HttpSession session;  
  162.     private ServletContext application;  
  163.    
  164.    
  165.     public String execute() {  
  166.         request.setAttribute("r1""r1");  
  167.         session.setAttribute("s1""s1");  
  168.         application.setAttribute("a1""a1");  
  169.           
  170.         return SUCCESS;  
  171.     }  
  172.   
  173.     @Override  
  174.     public void setServletRequest(HttpServletRequest request) {  
  175.         this.request = request;  
  176.         this.session = request.getSession();  
  177.         this.application = session.getServletContext();  
  178.     }   
  179. }   
内容概要:本文详细阐述了车载以太网通信栈中两个核心模块——以太网接口(EthIf)与以太网驱动(Eth)的功能需求与技术规范。重点介绍了EthIf在上下层协议间的数据转发、硬件抽象、VLAN支持、PDU配置、队列调度、睡眠管理及性能计数器等方面的设计要求;同时深入描述了Eth模块在硬件初始化、工作模式切换、时间戳支持、DMA传输、流量整形与调度、帧抢占等底层驱动功能的技术实现要点。整体围绕车载高可靠性、低延迟、可配置性强的通信需求展开,体现了现代汽车电子架构对高性能网络通信的支持能力。; 适合人群:从事汽车电子、车载网络通信、ECU开发的工程师,尤其是熟悉AUTOSAR架构并希望深入了解以太网协议栈底层机制的研发人员;具备一定嵌入式系统和网络通信基础的技术人员。; 使用场景及目标:①用于设计和实现符合车规级要求的以太网通信栈;②理解EthIf与Eth在车载网络中的角色分工与协作机制;③掌握中断/轮询模式、VLAN处理、时间同步、流量调度、帧抢占等关键技术在实际系统中的应用;④支持高实时性应用场景如自动驾驶、多传感器融合等的网络架构设计。; 阅读建议:建议结合AUTOSAR标准文档及相关硬件手册进行对照学习,重点关注模块接口定义与状态机行为,结合实际项目需求进行配置与验证,并注意软硬件协同设计中的时序与资源管理问题。
<think>首先,用户的问题是关于SpringBoot应用中application.yml配置server.port无效的解决方案。我需要根据提供的引用内容来回答。回顾系统级指令:-所有行内数学表达式用$...$格式(但在这个上下文中可能不相关)。-独立公式用$$...$$并单独成段。-LaTeX语法正确。-使用中文回答。-生成相关问题。-在引用的段落末尾添加引用标识,例如[^1]。用户可见层指令:-回答结构清晰,帮助用户逐步解决问题。-保证回答真实可靠。-参考提供的站内引用。提供的引用:-[^1]:解决SpringBoot项目中配置application.yml中server.port不生效问题。解决办法:1.将application.yml文件改为application.properties2.在resource新建一个config目录,将yml文件放到里面3.加入SpringCloud的注解,将application.yml变为bootstrap.yml(加载优先级高)-[^2]:解决SpringBoot中application.yml配置的server.port和server.servlet.context-path失效以及swagger访问不到的问题。这是因为SpringBoot在启动的时候优先加载properties文件,如果properties文件中没有再去读yml文件,而xxl-job-admin中正好自带了application.properties配置文件,覆盖了我们在application.yml中的配置导致自己的配置不生效。解决方案:-[^3]:SpringBoot--application.yml配置文件--用法。技术上,bootstrap.yml是被一个父级的SpringApplicationContext加载的。这个父级的SpringApplicationContext是先加载的,在加载application.yml的ApplicationContext之前。-[^4]:Springboot的application.properties或者application.yml环境的指定运行与配置。如果将application.properties注释掉,springboot仍然会读取其他appilcation-环境名.properties中的配置。并且properties的优先级高于yml1.2yml支持多文档块方式。从引用中提取关键点:-Properties文件优先级高于yml文件([^2]和[^4])。-如果有application.properties存在,它会覆盖application.yml([^2])。-解决方案包括:改为使用properties文件、移动yml到config目录、改为bootstrap.yml([^1])。-Bootstrap.yml有更高的加载优先级([^1]和[^3])。-Properties优先级高于yml([^4])。用户的问题:springbootapplication.yml配置server.port无效。我需要提供一个结构清晰的解决方案,步骤化。步骤:1.**检查文件优先级**:确认是否有application.properties文件存在,因为它可能覆盖yml配置([^2])。移除或重命名它。2.**使用bootstrap.yml**:改为使用bootstrap.yml,因为它在SpringCloud中优先级更高([^1]和[^3])。3.**移动配置文件**:将yml文件放到resource/config目录下,这可能提高优先级([^1])。4.**检查环境配置**:确保没有其他配置文件如application-{profile}.properties覆盖设置([^4])。5.**其他可能原因**:比如依赖冲突或代码问题,但引用中未提到,我可以简要提及。确保回答真实可靠:基于引用内容,不添加未提及的解决方案。添加引用标识:在相关步骤末尾添加,如[^1]。生成相关问题:在回答后添加相关问题部分,如示例所示。使用中文回答。结构回答:-开头简述问题。-逐步提供解决方案。-结尾添加相关问题。</think>### Spring Boot中application.yml配置server.port无效的解决方案 在Spring Boot应用中,配置`application.yml`文件时,`server.port`设置无效是常见问题,通常由配置文件加载优先级或冲突引起。以下是基于可靠实践的结构化解决方案,帮助您逐步排查和修复问题。解决方案参考了Spring Boot官方文档和社区最佳实践[^1][^2][^3][^4]。 #### 步骤1: 检查并处理配置文件优先级冲突 Spring Boot在启动时优先加载`application.properties`文件(如果存在),这会覆盖`application.yml`中的配置[^2][^4]。 - **操作步骤**: - 打开您的项目资源目录(通常是`src/main/resources`)。 - 检查是否存在`application.properties`文件。如果存在,请删除或重命名它(例如改为`application.properties.bak`)。 - 重新启动应用,测试`server.port`是否生效。 - **原因分析**: Properties文件优先级高于yml文件,优先级顺序为:`application.properties` > `application.yml`[^2][^4]。 #### 步骤2: 使用bootstrap.yml提升加载优先级 如果步骤1无效,可能是Spring Boot在加载上下文时未优先处理`application.yml`。改用`bootstrap.yml`(在Spring Cloud环境中优先级更高)[^1][^3]。 - **操作步骤**: - 在`src/main/resources`目录下,将`application.yml`重命名为`bootstrap.yml`。 - 在`bootstrap.yml`中明确添加`server.port`配置,例如: ```yaml server: port: 8080 # 替换为您的端口号 ``` - 确保项目中添加了Spring Cloud依赖(如果未使用Spring Cloud,此方法可能不适用)。在`pom.xml`中添加: ```xml <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bootstrap</artifactId> <version>3.1.0</version> <!-- 使用最新版本 --> </dependency> ``` - 重新启动应用。bootstrap.yml会被父级ApplicationContext优先加载[^3]。 - **原因分析**: `bootstrap.yml`在Spring Cloud中先于`application.yml`加载,适合处理核心配置[^1][^3]。 #### 步骤3: 移动配置文件到config目录 Spring Boot支持从特定目录加载配置,`config`目录的优先级高于默认位置[^1]。 - **操作步骤**: - 在`src/main/resources`下新建一个`config`目录。 - 将`application.yml`文件移动到此目录中(路径变为`src/main/resources/config/application.yml`)。 - 在yml文件中确认`server.port`设置正确,例如: ```yaml server: port: 8080 # 替换为您的端口号 ``` - 重新启动应用,检查端口是否生效。 - **原因分析**: Spring Boot加载配置文件的优先级为:`config/`目录 > 根目录[^1]。 #### 步骤4: 检查环境特定配置和依赖 如果以上步骤无效,可能是环境配置文件或依赖冲突导致: - **检查环境配置**: Spring Boot支持profile-specific文件(如`application-dev.yml`)。确保没有其他配置文件覆盖`server.port`。您可以在启动命令中指定active profile:`java -jar your-app.jar --spring.profiles.active=prod`[^4]。 - **验证依赖**: 检查pom.xml中是否有模块(如xxl-job-admin)自带properties文件,它可能覆盖您的配置[^2]。移除或排除冲突依赖。 - **日志排查**: 启动应用时添加`--debug`参数查看加载日志:`java -jar your-app.jar --debug`。搜索"Config file application"确认yml是否被读取。 #### 附加建议 - **测试工具**: 使用`curl localhost:8080`或浏览器访问端口验证。 - **回退方案**: 如果yml问题持续,考虑改用`application.properties`(语法简单,优先级高)[^1][^4]。例如: ```properties server.port=8080 ``` - **常见误区**: YAML缩进必须准确(使用空格,非制表符),且文件名拼写正确(`application.yml`非`applicaton.yml`)。 通过以上步骤,大多数`server.port`无效问题都能解决。如果问题依旧,建议检查Spring Boot版本(推荐2.x或3.x)或提供更多上下文(如完整yml文件)进一步诊断[^2][^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值