struts2 jsp <s:property value="path" /> path为中文的时候乱码

本文介绍了解决Struts2项目中图片路径显示乱码的问题,通过设置正确的字符编码UTF-8,并调整<s:property>标签的escape属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

乱码问题一直是困扰我们的事情,所以我从一开始就知道,统一所有的编码格式为UTF-8

数据库MySQL:

[client]
port=3306
default-character-set=utf8

[mysql]

default-character-set=utf8

[mysqld]

character-set-server=utf8

查询配置结果:

mysql> show variables like 'char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

mysql> 
然后就是JSP界面:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

然后就是Java代码:

/**
	 * @Desc:获取http请求中的request对象
	 * @return request
	 */
	public HttpServletRequest getRequest() throws UnsupportedEncodingException {

		HttpServletRequest request = ServletActionContext.getRequest();
		request.setCharacterEncoding("utf-8");
		return request;
	}

	/**
	 * @Desc: 获取http响应中的response对象
	 * @return response
	 */
	public HttpServletResponse getResponse() {

		HttpServletResponse response = ServletActionContext.getResponse();
		response.setContentType("text/html;charset=utf-8");
		return response;
	}

但是我的图片显示不出来:

Failed to load resource: the server responded with a status of 404 (Not Found) http://scun-yun-oos1.oss-cn-shanghai.aliyuncs.com/upload/picture/menu/QQ图片20151209093955.png

我在代码里面打印信息:

picturePath = http://scun-yun-oos1.oss-cn-shanghai.aliyuncs.com/upload/picture/menu/QQ图片20151209093955.png
我JSP界面使用struts2的标签来获取的值:

<s:property value="picturePath"/>

很明显就是struts2的标签有什么问题,这里看到一个类似的问题:

struts2 jsp <s:property 。 />传值到action出现乱码

加上escape="false"没有问题了:

<s:property value="picturePath" escape="false"/>



<think>好的,用户想了解关于Strutsproperty标签与条件属性(condition attribute)的用法。首先,我需要回忆一下Struts标签库的相关知识,尤其是property标签是否支持条件属性。 根据用户提供的引用内容,特别是引用[2]中的IF标签示例,似乎Struts的标签中有条件判断的功能,但需要确认property标签是否直接支持condition属性。可能用户混淆了property标签和if标签的用法。 首先,查阅Struts的官方文档或可靠资源,确认property标签是否有condition属性。根据常规知识,property标签主要用于输出值,例如<s:property value="myProperty"/>,而条件判断通常使用<s:if>、<s:elseif>、<s:else>标签,如引用[2]中的示例。 用户可能希望根据某个条件来决定是否显示某个属性值,这时候需要结合使用<s:if>和<s:property>标签。例如,先判断条件,再输出值。因此,property标签本身可能不支持condition属性,而是需要借助条件标签来实现。 此外,需要验证用户提供的引用内容是否相关。引用[1]提到的是include标签的属性,引用[3]是关于从request中获取属性,引用[4]涉及参数安全处理。这些可能与当前问题关联不大,但引用[2]中的IF标签结构是重点,说明Struts的条件标签用法。 接下来,思考用户可能的错误用法,比如试图在property标签中添加condition属性,导致错误。需要指出正确的做法是使用条件标签包裹property标签。 另外,安全问题也很重要,如引用[4]提到的,处理用户输入时需要验证和清理,防止注入攻击。不过这可能超出当前问题的范围,但可以提及作为最佳实践。 总结回答的结构:首先说明property标签的基本用法,然后指出它不支持condition属性,接着介绍如何通过条件标签实现条件输出,最后提供示例代码和注意事项,如安全处理和常见错误。</think>### Struts property标签与条件判断的使用方法 #### 1. property标签基础用法 Struts的`<s:property>`标签主要用于输出OGNL表达式计算结果,**不支持直接使用`condition`属性**。标准语法为: ```jsp <s:property value="表达式"/> ``` 例如显示请求参数: ```jsp <s:property value="#parameters.userId"/> [^3] ``` #### 2. 条件输出实现方式 需要结合`<s:if>`/`<s:else>`标签实现条件判断: ```jsp <s:if test="%{condition_expression}"> <s:property value="trueValue"/> </s:if> <s:else> <s:property value="falseValue"/> </s:else> ``` 示例(判断用户权限): ```jsp <s:if test="%{userType == 'admin'}"> <s:property value="adminWelcomeMsg"/> </s:if> <s:else> <s:property value="guestWelcomeMsg"/> </s:else> [^2] ``` #### 3. 复合条件表达式 使用逻辑运算符构建复杂判断: ```jsp <s:if test="%{(age >= 18) && (vipLevel > 3)}"> <s:property value="premiumContent"/> </s:if> ``` 注意XML特殊字符转义: ```jsp <s:if test="%{(score == 1) || (score > 100)}"> ``` #### 4. 安全注意事项 当处理用户输入时(如表单参数),需进行数据清洗: ```jsp <!-- 不安全示例 --> <s:property value="#parameters.rawInput"/> <!-- 安全处理 --> <% String sanitized = ESAPI.encoder().encodeForHTML(request.getParameter("input")); %> <%= sanitized %> [^4] ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值