页面跳转
搭建好springmvc的环境后,尝试使用ModelAndView来配置模型与视图来进行返回。但是遇到问题:
控制层代码如下:
@Controller
public class UserController{
@RequestMapping("save2")
public ModelAndView save2(){
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("index");
modelAndView.addObject("username","hxy");
return modelAndView;
}
}
index.jsp文件如下:
<html>
<body>
<h2>Hello World!"${username}"</h2>
</body>
</html>
按道理来说我应该是配置好了ModelAndView,但是最终在页面呈现的内容为Hello World!"{username}",也就是没有解析"{username}"这部分内容,最后找原因:
根据提供的代码和配置,问题可能出在JSP页面未正确解析EL表达式 ${username}
。以下是详细原因和解决方案:
原因分析:
-
Servlet版本过低导致EL默认禁用 :
您的
web.xml
使用了Servlet 2.3(对应Dweb-app_2_3.dtd),而Servlet 2.3及之前的版本默认忽略(不解析)EL表达式 ,导致${username}
直接显示为字符串。 -
将
web.xml
更改为支持Servlet 3.0或更高版本,以默认启用EL:<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <!-- 其他配置保持不变 --> </web-app>
回写数据
在springmvc中使用@Response标签来标记,用于回写数据,上述的内容是返回的视图,响应数据是指直接将响应体进行返回。
比如如下代码,使用jackson包中的类转json格式,将响应体进行了返回,最后在页面上呈现了json字符串数据内容
@RequestMapping("save3")
@ResponseBody
public String save3() throws JsonProcessingException {
User user = new User();
user.setName("haha");
user.setAge(18);
user.setAddress("sc");
ObjectMapper objectMapper = new ObjectMapper();
return objectMapper.writeValueAsString(user);
}
}
上述的方法使用了jackson包中的内容,但我们是在学框架,所以考虑spring-mvc框架中是否有这样的内容能够完成这种形式的转换?
答案当然是有的,框架中携带了这种功能,但是我们需要在配置文件中对其进行重写。
在spring-mvc配置文件中配置处理器
<!-- 配置处理器适配器-->
<bean id="requestMappingHandlerAdapter" class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<!-- 修改适配器中的消息转换属性-->
<property name="messageConverters">
<!-- 消息转换的属性对应一个list,所以使用list进行配置-->
<list>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"></bean>
</list>
</property>
</bean>

上述方式也比较繁琐,现在引入最简单的,在spring-mvc配置文件导入注解驱动也能完成上述功能。