Java jsp中的模型对象为空
我正在使用Spring Framkework 4.1.6.RELEASE 我有一个Rest控制器和一个普通控制器。 普通控制器向模型中添加一个对象,但jsp中没有该对象 我做错了什么 我尝试了两种不同的方法:Java jsp中的模型对象为空,java,spring,jsp,maven,servlets,Java,Spring,Jsp,Maven,Servlets,我正在使用Spring Framkework 4.1.6.RELEASE 我有一个Rest控制器和一个普通控制器。 普通控制器向模型中添加一个对象,但jsp中没有该对象 我做错了什么 我尝试了两种不同的方法: @Controller @RequestMapping(value = "/mymapping") public class StatusController { private Log LOG = LogFactory.getLog(StatusController.clas
@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}
对于方法2,我得到一个404,由于路径
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>
编辑
My 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,但变量测试仍然没有填充。在配置中将前缀更改为/WEB-INF/jsp/:
test: ${test}
<bean id="viewResolver"
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>
要访问method1,请尝试使用以下URL:
http://localhost:port/contextPath/mymapping/method1
对于第二种控制器方法,请按以下方式执行:
@RequestMapping(value = "/method2",method = GET)
public String method2(Model model) {
model.addAttribute("test",new ObjectName());
return "myjsp";
}
您必须了解addAttribute用于绑定,所以您可以添加模型类和其他内容。试试看 GUISSOUMA Issam建议使用UrlBasedViewResolver:
<bean id="viewResolver"
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>
这有助于使方法2发挥作用
此外,我在web.xml中添加了以下代码,使变量得以填充:
<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
<init-param>
<param-name>fork</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>xpoweredBy</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>3</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>/WEB-INF/jsp/*</url-pattern>
</servlet-mapping>
我仍然不明白的是,在这种特定情况下,为什么需要将JspServlet配置添加到web.xml中。在我们的另外两个项目中,我看到了相同的控制器方法等,但没有在web.xml中声明JspServlet,并且在没有它的情况下也可以工作。将其添加到问题描述中。我不能一次发布所有内容,因为stackoverflow不会告诉我哪行代码没有正确转换。你能发布你的web.xml吗?谢谢你添加了所需的数据,你能试用我回答中提供的代码吗?这并不能解决问题。现在method1也找不到jsp了。它说:HTTP Status 404-/contextPath/mymapping/WEB-INF/jsp/myjsp.jsp它试图查找jsp的路径完全是错误的。是的,404。您不应该以这种方式访问/mymapping/WEB-INF/jsp/myjsp.jspWell,不是我在尝试。控制员在做,让我们来,我就是这么做的。我只返回了一个字符串,而不是一个对象。无论如何,该对象也不会出现在jsp中。