2012-08-06 33 views
13

Tôi có một vấn đề thú vị với Spring 3.1.0. Các trang JSP không được đánh giá EL của họ. Tôi đã gỡ lỗi quá trình phân giải khung nhìn và JstlView đang được sử dụng và các thư viện Jstl được phát hiện. Tuy nhiên, các trang JSP của tôi chỉ hiển thị các thông tin nhưTrang jsp xuân không được đánh giá

<%="Hello World!"%> 

Có rất nhiều tham chiếu về vấn đề này, không có vấn đề nào trong số đó có hiệu quả đối với tôi.

Script tags not rendered in JSP page (using Spring + Tiles + JSPX) Spring and JSP EL not being processed

Từ trên đỉnh, đây là cấu hình của tôi;

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_2_5.xsd" 
    version="2.5">   

<servlet> 
    <servlet-name>spring</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>spring</servlet-name> 
    <url-pattern>/*</url-pattern> 
</servlet-mapping> 

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>classpath:applicationContext.xml</param-value> 
</context-param> 

<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 
<listener> 
    <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class> 
</listener> 
</web-app> 

mùa xuân-servlet.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" xmlns:p="http://www.springframework.org/schema/p" 
xmlns:context="http://www.springframework.org/schema/context" 
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:mvc="http://www.springframework.org/schema/mvc" 
xsi:schemaLocation=" 
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd 
     http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd 
     http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd   
     http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> 
    <!-- 
    https://stackoverflow.com/questions/3652090/difference-between-applicationcontext-and-spring-servlet-xml-in-spring 
    -->   
</beans> 

applicationContext.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" xmlns:p="http://www.springframework.org/schema/p" 
xmlns:context="http://www.springframework.org/schema/context" 
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:mvc="http://www.springframework.org/schema/mvc" 
xsi:schemaLocation=" 
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd 
     http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd 
     http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd   
     http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> 

<context:annotation-config /> 
<context:component-scan base-package="com.csc.fs.emea" /> 
<mvc:default-servlet-handler /> 
<mvc:annotation-driven /> 
<mvc:resources mapping="/static/**" location="/" /> 

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerExceptionResolver" p:order="1" /> 
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver" p:order="2" p:defaultErrorView="sorry" /> 

<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> 
    <property name="templateLoaderPath" value="/WEB-INF/freemarker/" /> 
    <property name="freemarkerSettings"> 
     <props>    
      <prop key="default_encoding">UTF-8</prop> 
      <prop key="output_encoding">UTF-8</prop> 
      <prop key="auto_include">macros.ftl</prop> 
      <prop key="auto_import">spring.ftl as spring</prop> 
      <prop key="template_update_delay">${freemarker.template.update.delay}</prop> 
     </props> 
    </property> 
    <property name="freemarkerVariables"> 
     <props> 
      <prop key="googleAnalyticsId">${google.analytics.id}</prop> 
     </props> 
    </property> 
</bean> 

<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"> 
    <property name="viewResolvers"> 
     <list> 
     <bean 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" /> 
       <property name="contentType" value="text/html;charset=UTF-8"></property> 
      </bean> 
      <bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"> 
       <property name="cache" value="true" /> 
       <property name="prefix" value="" /> 
       <property name="suffix" value=".html" /> 
       <property name="contentType" value="text/html;charset=UTF-8"></property> 
       <property name="exposeSpringMacroHelpers" value="true" /> 
      </bean>    
     </list> 
    </property>  
</bean> 

<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> 
    <property name="basename" value="classpath:messages" /> 
</bean> 
<bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"> 
    <property name="paramName" value="lang" /> 
</bean> 
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver"></bean>  
<bean id="handlerMapping" class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"> 
    <property name="interceptors"> 
     <ref bean="localeChangeInterceptor" /> 
    </property> 
</bean> 
</beans> 

Tôi đang sử dụng ContentNegotiatingViewResolver vì tôi có một số công cụ freemarker và REST trong đó.

khiển

@RequestMapping("/") 
@Controller 
public class RootResource extends AbstractResource { 

    ...abridged... 

    @RequestMapping(value="/jsp", method = RequestMethod.GET, produces = "text/html") 
    public String getJSP(final Model m) {   
     return "example"; 
    } 
} 

example.jsp

<%@ page isScriptingEnabled="true" isELIgnored="false" %> 
<html> 
<head> 
    <title>Hello World JSP Page.</title> 
</head> 
<body> 
<font size="10"><%="Hello World!"%></font> 
</body> 
</html> 

tôi trở lại "dụ" như tên nhìn từ điều khiển của tôi và bạn có thể thấy trong các bản ghi nó giải quyết cho đúng WEB-INF/jsp/example.jsp

22:35:13,049 DEBUG [[email protected]] [org.springframework.web.servlet.view.ContentNegotiatingViewResolver] Returning [org.springframework.web.servlet.view.JstlView: name 'example'; URL [/WEB-INF/jsp/example.jsp]] based on requested media type 'text/html' 
22:35:13,050 TRACE [[email protected]] [org.springframework.web.servlet.view.JstlView] Rendering view with name 'example' with model {} and static attributes {} 
22:35:13,054 DEBUG [[email protected]] [org.springframework.web.servlet.view.JstlView] Forwarding to resource [/WEB-INF/jsp/example.jsp] in InternalResourceView 'example' 

Vì vậy, mọi thứ đều ổn, chỉ là trang JSP không bao giờ được đánh giá đúng.

example.jsp trông như thế này

<%@ page isScriptingEnabled="true" isELIgnored="false" %> <%="Hello World!"%> 

Tôi đang sử dụng plugin Maven cầu cảng 6 để chạy các ứng dụng web.

Tôi chắc chắn rằng tôi thiếu thứ gì đó đơn giản, có thể đây là một trong những vấn đề "xem xét quá lâu".

Cảm ơn mọi con trỏ bạn có thể cung cấp.

Cập nhật 1 - Tôi vừa thay đổi ánh xạ Spring servlet từ /* thành /spring/* và giờ nó hoạt động. Vì vậy, có một số chi tiết xung quanh servlet mùa xuân được ánh xạ tới /* mà tôi đã bỏ lỡ.

+2

Đối với người mới bắt đầu '<% =" Hello World! "%>' Không phải là cú pháp EL. EL sẽ đọc '$ {" Hello World "}' –

+0

Cảm ơn Chris - Tôi đã thử thách với example.jsp và đã thử những gì bạn đề xuất trong một hóa thân trước đó. Vẫn không có niềm vui. – biddster

+0

xin lỗi, tôi cần phải làm rõ, tôi không mong đợi nó để giải quyết vấn đề của bạn (xin lỗi!) Nó chỉ là một bình luận ;-) –

Trả lời

32

Tuyệt đối là trường hợp "xem xét quá lâu".

servlet mùa xuân cần phải là servlet mặc định. tức là ánh xạ tới / và không phải là /*.

<servlet> 
    <servlet-name>spring</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>spring</servlet-name> 
    <url-pattern>/</url-pattern>   
</servlet-mapping> 
+1

Giải pháp hoàn hảo tại chỗ. Tôi đã gỡ lỗi ContentNegotiatingViewResolver và nó hoạt động tốt. Phải thừa nhận rằng, tôi vẫn không thể hiểu tại sao nó sẽ làm cho nó để render JSP thô chỉ vì thẻ hoang dã. Bạn có thể xây dựng thêm một chút nữa không? Cảm ơn rất nhiều. –

+0

/đặt servlet này làm servlet mặc định cho ứng dụng, nhưng/* chỉ là ánh xạ thẻ tự nhiên. –

+0

Cảm ơn rất nhiều! Tôi sắp phát điên. – asgs

Các vấn đề liên quan