2016-08-14 6 views
0

그래서 스프링 MVC를 배우려고하는데, 시도한 첫 번째 튜토리얼은 model.addAttribute("printme", "From spring");이고 JSP는 ${printme}입니다.JSP EL에서 requestScope 변수를 찾을 수 없습니까?

내 컨트롤러는 간단하다 :

@RequestMapping(value = "index", method = RequestMethod.GET) 
public String index(Model modelMap) { 
    System.out.println("on method"); 
    modelMap.addAttribute("printme", "Hello Spring FROM INDEX !!"); 
    return "index"; 
} 

나는 그것이 작동하지 않는 코드를 실행

, 그래서 나는 JSP에 추가 시작했다.

나는 몸이 함께 상처 :

 <h1> 
      ${param.printme} 
      <br /> 
      ${printme} 
      <br /> 
      ${requestScope.printme} 
      <br /> 
      <%=request.getParameter("printme")%> 
      <br /> 
      <%=request.getAttribute("printme")%> 
      <br /> 
      <%=pageContext.findAttribute("printme")%> 
     </h1> 

내 출력 소스는 다음과 같습니다

<h1> 

      <br /> 

      <br /> 
      Hello Spring FROM INDEX !! 
      <br /> 
      null 
      <br /> 
      Hello Spring FROM INDEX !! 
      <br /> 
      Hello Spring FROM INDEX !! 
     </h1> 

내가 request.getParameter()에서 나에게 빈 문자열뿐만 아니라 널 (null)을 param.printme을 기대했다.

${printme} 검색 요청 범위를 찾아서 찾아야합니까?

${printme}

  • ${requestScope.printme}
  • <%=requestScope.getAttribute("printme")%>
  • <%=pageContext.findAttribute("printme")%>으로 동일하지 않나요?

여기에 무슨 일이 일어나고 있는데, ${printme} 속성을 찾는 이유는 무엇입니까?

나는 단지 ${requestScope.printme}을 계속 사용할 수 있지만 더 장황하고 왜 그것이 어떻게 작동하는지 알고 싶습니다.

중요한 경우 나는 Tomcat7.0.52, Spring 4.0 xsds 및 java ee 3.0 xsds를 사용하고 있습니다.

답변

1

나는 다음과 같은 간단한 프로젝트가 :

의 pom.xml을

<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
          http://maven.apache.org/maven-v4_0_0.xsd"> 

    <modelVersion>4.0.0</modelVersion> 

    <groupId>biz.tugay</groupId> 
    <artifactId>smvcelex</artifactId> 
    <packaging>war</packaging> 

    <version>1.0-SNAPSHOT</version> 
    <name>smvcelex Maven Webapp</name> 
    <url>http://maven.apache.org</url> 

    <dependencies> 
     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>javax.servlet-api</artifactId> 
      <version>3.1.0</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>javax.el</groupId> 
      <artifactId>javax.el-api</artifactId> 
      <version>3.0.0</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-context</artifactId> 
      <version>4.0.5.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-webmvc</artifactId> 
      <version>4.0.5.RELEASE</version> 
     </dependency> 
    </dependencies> 

    <build> 
     <finalName>smvcelex</finalName> 
     <plugins> 
      <plugin> 
       <groupId>org.eclipse.jetty</groupId> 
       <artifactId>jetty-maven-plugin</artifactId> 
       <version>9.2.1.v20140609</version> 
      </plugin> 
     </plugins> 
    </build> 

    <properties> 
     <maven.compiler.source>1.7</maven.compiler.source> 
     <maven.compiler.target>1.7</maven.compiler.target> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 

</project> 

web.xml을

<?xml version="1.0" encoding="UTF-8"?> 
<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"> 

    <servlet> 
     <servlet-name>springDispatcher</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <init-param> 
      <param-name>contextConfigLocation</param-name> 
      <param-value>/WEB-INF/servletContext.xml</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>springDispatcher</servlet-name> 
     <url-pattern>/</url-pattern> 
    </servlet-mapping> 

    <jsp-config> 
     <jsp-property-group> 
      <url-pattern>*.jsp</url-pattern> 
      <url-pattern>*.jspf</url-pattern> 
      <page-encoding>UTF-8</page-encoding> 
      <scripting-invalid>true</scripting-invalid> 
      <trim-directive-whitespaces>true</trim-directive-whitespaces> 
      <default-content-type>text/html</default-content-type> 
     </jsp-property-group> 
    </jsp-config> 

</web-app> 

servletContext.xml

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans 
          http://www.springframework.org/schema/beans/spring-beans-4.0.xsd"> 

    <bean id="sampleController" class="biz.tugay.SampleController"/> 

    <bean id="viewResolver" 
      class="org.springframework.web.servlet.view.InternalResourceViewResolver"/> 

</beans> 

SampleController.java

package biz.tugay; 

/* User: [email protected] Date: 2016/08/16 */ 


import org.springframework.stereotype.Controller; 
import org.springframework.ui.Model; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 

@Controller 
@RequestMapping(value = "/") 
public class SampleController { 

    @RequestMapping(value = "", method = RequestMethod.GET) 
    public String indexController(Model model) { 
     model.addAttribute("printme", "Hello Spring FROM INDEX !!"); 
     return "index.jsp"; 
    } 
} 

마지막 인덱스입니다.JSP

<%@ page contentType="text/html;charset=UTF-8" language="java" %> 

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8"/> 
    <title>Hello</title> 
</head> 
<body> 
    ${printme} 
</body> 
</html> 

내가 localhost를 방문 할 때 : 8080 나는

Hello Spring FROM INDEX !! 

잘 텍스트를 볼 수 있습니다 ..

는이 한 개 프로젝트를 비교 추가 코드를 제공하고 추가로 요청하시기 바랍니다 필수.

+1

글쎄, 결함이있는 프로젝트를 삭제했습니다. 그래서 나는 내가 가진 것과 당신이 제공 한 것을 더 이상 비교할 수 없습니다. 그러나 이것을 사용하여 잘 작동합니다. 컨트롤러 클래스를 bean으로 명시 적으로 선언하지 않고 스프링을 구성했다는 것을 알고 있습니다. (참고 : netbeans를 사용하고 Maven이 아닙니다.) 아직 시도하고 있습니다. xml 비트가 무엇을 제어하는지 알아 내고, 주석을 달았습니다 : annotation-config (적절한 사용을 생각하지 않았습니다) 컨텍스트 : 적절한 기본 패키지와 mvc : annotation-driven으로 구성 요소 스캔 ... 예상대로 결과를 얻으면서 올바른 것으로 표시하십시오 .. – MatrixPeckham

+0

@MatrixPeckham이 정보는 도움이 될 수 있습니다. http://stackoverflow.com/questions/35807056/how-many-ways-are-there-to-configure-the- spring-framework-what-are-the-differen –

-3

jstl이 jsp 파일의 맨 위에 참조되어 있지 않은 것처럼 보입니다. 달러 기호는 jstl 속기입니다. jsp 파일의 맨 위에 다음이 있는지 확인하십시오.

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> 
+0

죄송합니다.이 "답변"은 완전히 난무합니다. JSTL과 EL이 정확히 무엇인지 배우려면 http://stackoverflow.com/tags/jstl/info와 http://stackoverflow.com/tags/el/info를 방문하십시오 – BalusC