【问题标题】:JSP on Tomcat is displaying as source, not processed as JSPTomcat 上的 JSP 显示为源,而不是作为 JSP 处理
【发布时间】:2015-06-02 19:23:52
【问题描述】:

注意:这不是 this question 的副本。指出的问题也是使用@RestController,他们的问题通过切换到@Controller 得到了解决。我正在使用@Controller 和 org.springframework.web.servlet.view.InternalResourceViewResolver

将 Web 应用程序从 WebSphere 移植到 Tomcat。以下在我的 mvc-config.xml 文件中:

<mvc:view-controller path="/" view-name="redirect:/dashboard"/>
<mvc:view-controller path="/login" view-name="login"/>

<mvc:view-controller path="/**.html" view-name="login"/>

<!-- Resolves view names to protected .jsp resources within the /WEB-INF/views directory -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/views/"/>
    <property name="suffix" value=".jsp"/>
</bean>

当我从 Tomcat 启动应用程序时,会显示以下测试(这是 /WEB-INF/views/login.jsp 的文本,因此该部分正在运行):

<%@page contentType="text/html;charset=UTF-8"%>
<%@page pageEncoding="UTF-8"%>
<%@ page session="false" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<html>
<head>  
    <title>Please log in</title>
    <style>
        h1{
            font-size:1.5em;            
        }

        h2{
            font-size:1.1em;
        }

        label, input{
            font-size:1.5em;
        }
    </style>
    <script type="text/javascript">
        jQuery(document).ready(function(){
            jQuery("#j_username").focus();
        });
    </script>

</head>
<body>

    <h1>Welcome to Our App</h1>

    <c:if test="${not empty param.login_error}">
      <div class='error' style="color: red;">
        Your login attempt was not successful, try again.
      </div>
      <div>
        If you need access to Our App, please contact your supervisor and they can get you access.
      </div>
    </c:if>

    <h2>Please login to continue.</h2>
    ...

IOW,login.jsp 的完整内容正在显示,没有进行任何类型的处理。发生在 Firefox 和 Chrome、Tomcat 7.0.61 中。这是我的 Tomcat 日志文件中显示的内容:

2821136 [http-8080-4] DEBUG org.springframework.security.web.FilterChainProxy  - /dashboard at position 1 of 6 in additional filter chain; firing Filter: 'SecurityContextPersistenceFilter'
2821136 [http-8080-4] DEBUG org.springframework.security.web.context.HttpSessionSecurityContextRepository  - No HttpSession currently exists
2821136 [http-8080-4] DEBUG org.springframework.security.web.context.HttpSessionSecurityContextRepository  - No SecurityContext was available from the HttpSession: null. A new one will be created.
2821136 [http-8080-4] DEBUG org.springframework.security.web.FilterChainProxy  - /dashboard at position 2 of 6 in additional filter chain; firing Filter: 'LogoutFilter'
2821136 [http-8080-4] DEBUG org.springframework.security.web.FilterChainProxy  - /dashboard at position 3 of 6 in additional filter chain; firing Filter: 'ExceptionTranslationFilter'
2821136 [http-8080-4] DEBUG org.springframework.security.web.FilterChainProxy  - /dashboard at position 4 of 6 in additional filter chain; firing Filter: 'AuthenticationFilter'
2821136 [http-8080-4] DEBUG org.springframework.security.web.FilterChainProxy  - /dashboard at position 5 of 6 in additional filter chain; firing Filter: 'AnonymousAuthenticationFilter'
2821137 [http-8080-4] DEBUG org.springframework.security.web.authentication.AnonymousAuthenticationFilter  - Populated SecurityContextHolder with anonymous token: 'org.springframework.security.authentication.AnonymousAuthenticationToken@9055e4a6: Principal: anonymousUser; Credentials: [PROTECTED]; Authenticated: true; Details: org.springframework.security.web.authentication.WebAuthenticationDetails@957e: RemoteIpAddress: 127.0.0.1; SessionId: null; Granted Authorities: ROLE_ANONYMOUS'
2821137 [http-8080-4] DEBUG org.springframework.security.web.FilterChainProxy  - /dashboard at position 6 of 6 in additional filter chain; firing Filter: 'FilterSecurityInterceptor'
2821137 [http-8080-4] DEBUG org.springframework.security.web.util.matcher.AntPathRequestMatcher  - Checking match of request : '/dashboard'; against '/secure/super/**'
2821137 [http-8080-4] DEBUG org.springframework.security.web.access.intercept.FilterSecurityInterceptor  - Public object - authentication not attempted
2821137 [http-8080-4] DEBUG org.springframework.security.web.FilterChainProxy  - /dashboard reached end of additional filter chain; proceeding with original chain
2821137 [http-8080-4] DEBUG org.springframework.web.servlet.DispatcherServlet  - DispatcherServlet with name 'Spring MVC Dispatcher Servlet' processing GET request for [/cemWar/dashboard]
2821137 [http-8080-4] DEBUG org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping  - Mapping [/dashboard] to HandlerExecutionChain with handler [edu.mayo.lpea.lsa.cem.controllers.DashboardController@4e939c89] and 1 interceptor
2821137 [http-8080-4] DEBUG org.springframework.web.servlet.DispatcherServlet  - Last-Modified value for [/cemWar/dashboard] is: -1
2821137 [http-8080-4] DEBUG org.springframework.web.bind.annotation.support.HandlerMethodInvoker  - Invoking request handler method: public java.lang.String edu.mayo.lpea.lsa.cem.controllers.DashboardController.loadDashboard(javax.servlet.http.HttpSession,org.springframework.ui.ModelMap,edu.mayo.lpea.lsa.cem.config.UserDetails)
2821137 [http-8080-4] DEBUG org.springframework.security.access.intercept.aopalliance.MethodSecurityInterceptor  - Secure object: ReflectiveMethodInvocation: public java.lang.String edu.mayo.lpea.lsa.cem.controllers.DashboardController.loadDashboard(javax.servlet.http.HttpSession,org.springframework.ui.ModelMap,edu.mayo.lpea.lsa.cem.config.UserDetails); target is of class [edu.mayo.lpea.lsa.cem.controllers.DashboardController]; Attributes: [ROLE_READER]
2821137 [http-8080-4] DEBUG org.springframework.security.access.intercept.aopalliance.MethodSecurityInterceptor  - Previously Authenticated: org.springframework.security.authentication.AnonymousAuthenticationToken@9055e4a6: Principal: anonymousUser; Credentials: [PROTECTED]; Authenticated: true; Details: org.springframework.security.web.authentication.WebAuthenticationDetails@957e: RemoteIpAddress: 127.0.0.1; SessionId: null; Granted Authorities: ROLE_ANONYMOUS
2821137 [http-8080-4] DEBUG org.springframework.security.access.vote.AffirmativeBased  - Voter: org.springframework.security.access.vote.RoleVoter@91e1a75, returned: -1
2821137 [http-8080-4] DEBUG org.springframework.security.access.vote.AffirmativeBased  - Voter: org.springframework.security.access.vote.AuthenticatedVoter@175afc00, returned: 0
2821138 [http-8080-4] WARN  org.springframework.context.support.ResourceBundleMessageSource  - ResourceBundle [/WEB-INF/messages/messages] not found for MessageSource: Can't find bundle for base name /WEB-INF/messages/messages, locale en_US
2821138 [http-8080-4] WARN  org.springframework.context.support.ResourceBundleMessageSource  - ResourceBundle [/WEB-INF/messages/messages] not found for MessageSource: Can't find bundle for base name /WEB-INF/messages/messages, locale en_US
2821138 [http-8080-4] DEBUG org.springframework.web.servlet.DispatcherServlet  - Could not complete request
org.springframework.security.access.AccessDeniedException: Access is denied
    at org.springframework.security.access.vote.AffirmativeBased.decide(AffirmativeBased.java:83)
    at org.springframework.security.access.intercept.AbstractSecurityInterceptor.beforeInvocation(AbstractSecurityInterceptor.java:206)
    at org.springframework.security.access.intercept.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:60)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:653)
    at edu.mayo.lpea.lsa.cem.controllers.DashboardController$$EnhancerBySpringCGLIB$$27934b39_2.loadDashboard(<generated>)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:177)
    at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:446)
    at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:434)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:943)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at com.opensymphony.sitemesh.webapp.SiteMeshFilter.obtainContent(SiteMeshFilter.java:129)
    at com.opensymphony.sitemesh.webapp.SiteMeshFilter.doFilter(SiteMeshFilter.java:77)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118)
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:199)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:110)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192)
    at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160)
    at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:344)
    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:261)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    at java.lang.Thread.run(Thread.java:745)
2821139 [http-8080-4] DEBUG org.springframework.security.web.access.ExceptionTranslationFilter  - Access is denied (user is anonymous); redirecting to authentication entry point
org.springframework.security.access.AccessDeniedException: Access is denied
    at org.springframework.security.access.vote.AffirmativeBased.decide(AffirmativeBased.java:83)
    at org.springframework.security.access.intercept.AbstractSecurityInterceptor.beforeInvocation(AbstractSecurityInterceptor.java:206)
    at org.springframework.security.access.intercept.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:60)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:653)
    at edu.mayo.lpea.lsa.cem.controllers.DashboardController$$EnhancerBySpringCGLIB$$27934b39_2.loadDashboard(<generated>)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:177)
    at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:446)
    at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:434)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:943)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at com.opensymphony.sitemesh.webapp.SiteMeshFilter.obtainContent(SiteMeshFilter.java:129)
    at com.opensymphony.sitemesh.webapp.SiteMeshFilter.doFilter(SiteMeshFilter.java:77)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118)
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:199)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:110)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
    at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192)
    at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160)
    at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:344)
    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:261)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    at java.lang.Thread.run(Thread.java:745)
2821139 [http-8080-4] DEBUG org.springframework.security.web.savedrequest.HttpSessionRequestCache  - DefaultSavedRequest added to Session: DefaultSavedRequest[http://127.0.0.1:8080/cemWar/dashboard]
2821139 [http-8080-4] DEBUG org.springframework.security.web.access.ExceptionTranslationFilter  - Calling Authentication entry point.
2821139 [http-8080-4] DEBUG org.springframework.security.web.DefaultRedirectStrategy  - Redirecting to 'http://127.0.0.1:8080/cemWar/login'
2821139 [http-8080-4] DEBUG org.springframework.security.web.context.HttpSessionSecurityContextRepository  - SecurityContext is empty or contents are anonymous - context will not be stored in HttpSession.
2821139 [http-8080-4] DEBUG org.springframework.security.web.context.SecurityContextPersistenceFilter  - SecurityContextHolder now cleared, as request processing completed

我在这里设置了什么错误?我是一个完整的 JSP 菜鸟。注意:我的控制器都不是“@RestController 他们都是@Controller

【问题讨论】:

    标签: java spring jsp tomcat websphere


    【解决方案1】:

    问题在于 WebSphere 包含 jstl,而 Tomcat 不包含。 Maven POM 将 jstl 作为“提供”。消除它可以解决问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-09
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 2013-09-27
      • 2016-10-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多