【发布时间】: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