【问题标题】:Tomcat8 Spring MVC4 maven jsp source code displayed instead of contentTomcat8 Spring MVC4 maven jsp源码显示而不是内容
【发布时间】:2018-09-05 19:09:27
【问题描述】:

我正在尝试从 My MacBook Air 构建和部署 Spring MVC Web 应用程序。创建了 maven 项目并为项目添加了所有必要的文件。能够构建项目并通过 maven pom.xml 部署到 Tomcat 8。当我访问该页面时,它只显示 jsp 代码而不是内容。

我无法在 tomcat 工作文件夹中看到生成的 servlet 文件。由于我通过 Maven 部署文件,我认为它不能隐藏在我的 Eclipse 工作区中。

我遇到了类似的问题,但没有一个人解决了表格。例如,有一些建议在 servlet.xml 中的 WEB -INF 前添加 /,在 JSP 中添加标签,并将内容放在 body 标签内。我希望这与我的 Tomcat8 和 Maven3.3.9 有关

当我使用 URL 访问应用程序时,我可以看到控制器内部的日志,这意味着我的代码已部署到 Tomcat 中,但只有 JSP 到 servlet 的转换没有发生。

这是我的配置文件。

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">
    <display-name>Digital Services</display-name>

    <servlet>
        <servlet-name>digitalservices</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>
                /WEB-INF/digitalservices-servlet.xml
            </param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>digitalservices</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>

ditalservices-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:context="http://www.springframework.org/schema/context"
    xmlns:tx="http://www.springframework.org/schema/tx" xmlns:p="http://www.springframework.org/schema/p"
    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.2.xsd 
    http://www.springframework.org/schema/context  
    http://www.springframework.org/schema/context/spring-context-3.2.xsd 
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx-3.2.xsd">

    <context:annotation-config />
    <context:component-scan base-package="com.rajan.myservices.controller" />

    <mvc:annotation-driven />
    <mvc:default-servlet-handler />
    <mvc:resources mapping="/resources/**" location="/resources/" />

    <!-- 
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
        <property name="prefix" value="/WEB-INF/views/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
    <bean class="org.springframework.web.servlet.view.UrlBasedViewResolver"
        id="tilesViewResolver">
        <property name="viewClass"
            value="org.springframework.web.servlet.view.tiles3.TilesView" />
    </bean>
    -->
    <bean
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix">
            <value>/WEB-INF/views/</value>
        </property>
        <property name="suffix">
            <value>.jsp</value>
        </property>
    </bean>

</beans>

Maven 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>com.rajan.myservices</groupId>
    <artifactId>DigitalServices</artifactId>
    <packaging>war</packaging>
    <version>0.0.1-SNAPSHOT</version>
    <name>DigitalServices Maven Webapp</name>
    <url>http://maven.apache.org</url>

    <properties>
        <springframework.version>4.0.3.RELEASE</springframework.version>
        <apachetiles.version>3.0.5</apachetiles.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${springframework.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${springframework.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${springframework.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>${springframework.version}</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
        <!-- Below declared dependencies are included for the servers who may complain 
            about servlet/jstl missing dependency -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>2.3.1</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>

    </dependencies>
    <build>
        <finalName>DigitalServices</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <url>http://127.0.0.1:8080/manager/text</url>
                    <server>TomcatServer</server>
                    <username>tomcat</username>
                    <password>tomcat1</password>
                    <path>/DigitalServices</path>
                    <update>true</update>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.4</version>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </plugin>
            <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
        </plugins>
    </build>
</project>

控制器类

package com.rajan.myservices.controller;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

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

import com.rajan.myservices.model.Person;


@Controller
public class HomePageController {

    @RequestMapping(value="index")
    public String index() {
        System.out.println("In index");
        return "index";
    }

    @RequestMapping(value="viewPerson")
    public ModelAndView viewPersons(Model model) {
        Map<String, List<Person>> persons = 
                new HashMap<String, List<Person>>();
        System.out.println("In View Person");
        persons.put("persons", Person.createPersons());
        System.out.println("persons: "+persons);
        return new ModelAndView("personList", persons);
    }

}

Index.jsp

<html>
<body>
<div style="margin:10px;">
    <h3>Welcome to Digital Services by <% out.println("Hello Test"); %></h3>
</div>
</body>
</html>

使用http://localhost:8080/DigitalServices/index访问应用程序时的Jsp输出

Welcome to Digital Services by <% out.println("Hello Test"); %>

仅供参考 - 我可以在 catalina.out 的 Controller 类中看到这些系统输出。

【问题讨论】:

  • return "index"; 表示应该有一个index.jsp 文件,而不是Index.jsp 文件。更好地实现apachetiles 配置。您只是添加了未配置的依赖项。
  • 嗨 Sumesh,非常感谢您不断提供建议。最初我从 Spring4 的 apache 瓦片开始。看起来春季版本 4 中不完全支持 apache 磁贴,如果我降级我的春季版本,它会产生其他类型的问题。所以暂时离开那部分,先开始实现非常基本的mvc版本,然后一步一步进行。

标签: spring-mvc jsp maven-3 tomcat8


【解决方案1】:

在您的 jsp 文件中添加以下行。

<jsp:directive.page contentType="text/html;charset=UTF-8" />

如果这不能解决您的问题,请参考JSP displaying source code instead of executing

【讨论】:

  • 添加 jsp 页面指令后仍然相同的响应。突出显示的链接没有任何可接受的解决方案。我试图确保按照链接中的建议正确关闭 html。
  • 有什么建议吗?
【解决方案2】:

您在 JSP 文件中使用纯 HTML,因此 sn-ps 无法编译。您缺少页面指令。 page 指令用于向容器提供与当前 JSP 页面相关的指令。您可以在 JSP 页面中的任何位置对页面指令进行编码。按照惯例,页面指令编码在 JSP 页面的顶部。

以下是页面指令的基本语法 - &lt;%@ page attribute = "value" %&gt;

 <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Insert title here</title>
    </head>
    <body>
     <div style="margin:10px;">
        <h3>Welcome to Digital Services by <% out.println("Hello Test"); %></h3>
     </div>
    </body>
    </html>

【讨论】:

  • tomcat的控制台和浏览器都没有错误。我可以从控制器类的 java 方法中看到日志语句。
  • @RaguVenkatesan 您似乎有版本冲突。在您的 servlet.xml 中 spring-beans-3.2.xsd 代表 Spring 3.2 版,但在 pom.xml you 中提到了 spring 4。在您的本地机器中,可能在 m2 文件夹中下载了 spring 3.2。
  • 谢谢苏梅什。我错过了这个版本冲突,我会尽快在这里更新状态。
  • 我将架构定义从 3.2 更改为 4.0,因为我的 Spring 版本是 4.0.3。更新项目,构建,取消部署现有应用程序,然后部署。仍然面临同样的问题。
  • @RaguVenkatesan 使用版本较少的 xsd 。它将自动选择当前版本。有关现有 xsd 版本,请参阅此 springframework.org/schema
猜你喜欢
  • 2011-06-09
  • 1970-01-01
  • 1970-01-01
  • 2019-12-01
  • 2012-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-07
相关资源
最近更新 更多