【发布时间】:2015-09-29 14:14:13
【问题描述】:
我正在使用 Spring Framkework 4.1.6.RELEASE。
我有一个休息控制器和一个普通控制器。 普通控制器给模型添加了一个对象,但是jsp中没有这个对象。
我做错了什么?
我尝试了两种不同的方法:
@Controller
@RequestMapping(value = "/mymapping")
public class StatusController {
private Log LOG = LogFactory.getLog(StatusController.class);
@RequestMapping(method = GET)
public ModelAndView myMethod1(final HttpServletRequest aRequest, final HttpServletResponse aResponse) {
ModelAndView tempMAV = new ModelAndView("myjsp");
tempMAV.addObject("test","test");
return tempMAV;
}
@RequestMapping(method = GET, value="2")
public String method2(Model model) {
model.addAttribute("test","test");
return "myjsp";
}
}
在方法1中,jsp被显示,但变量“test”没有被填充。
test: ${test}
使用方法2我得到一个404,找不到jsp myjsp,因为路径
http://localhost:{...mypath...}/mymapping/WEB-INF/jsp/myjsp.jsp
不存在。
在我的 pom.xml 中我添加了:
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>javax.servlet.jsp.jstl-api</artifactId>
</dependency>
我的 servlet 包含:
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
我的 jsp 以:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page"
xmlns:c="http://java.sun.com/jsp/jstl/core" version="2.0">
<jsp:directive.page language="java"
contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" />
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>My Title</title>
</head>
<body>
<p> test: ${test}</p>
编辑
我的 web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<display-name>My display name</display-name>
<filter>
<filter-name>SetCharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>SetCharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- Expose request to current thread (required for session and request-scoping) -->
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
<servlet>
<servlet-name>spring-mvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>
WEB-INF/config/spring-mvc-servlet.xml
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring-mvc</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
当我将 servlet 内容更改为:
<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
<property name="mediaTypes">
<map>
<entry key="json" value="application/json" />
<entry key="xml" value="application/xml" />
</map>
</property>
<property name="viewResolvers">
<list>
<bean class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
</list>
</property>
</bean>
那么至少方法2再次起作用,这意味着它显示了jsp,但仍然没有填充变量test。
【问题讨论】:
-
将其添加到问题描述中。我无法一次发布所有内容,因为 stackoverflow 不会告诉我在哪一行我没有正确转换代码。
-
你能发布你的 web.xml 吗?
-
感谢您添加所需的数据,您可以尝试使用我的答案中提供的代码吗?
标签: java spring jsp maven servlets