Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java jsp中的模型对象为空_Java_Spring_Jsp_Maven_Servlets - Fatal编程技术网

Java 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

我正在使用Spring Framkework 4.1.6.RELEASE

我有一个Rest控制器和一个普通控制器。 普通控制器向模型中添加一个对象,但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}
对于方法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中。