页面跳转
搭建好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配置文件导入注解驱动也能完成上述功能。