没有调用Spring MVC Controller,但编译过程似乎很好

时间:2015-10-28 12:55:53

标签: java spring spring-mvc tomcat ant

我尝试使用Spring MVC Framework创建一个小的Java-web项目。 要构建我的项目,我使用ant。 编译过程似乎有效,但不幸的是我的控制器类(和方法)从未被调用过。

以下是我的解决方案文件。

的web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>HelpMe</display-name>

  <servlet>
      <servlet-name>mvc</servlet-name>
      <servlet-class>
         org.springframework.web.servlet.DispatcherServlet
      </servlet-class>
      <load-on-startup>1</load-on-startup>
   </servlet>

   <servlet-mapping>
      <servlet-name>mvc</servlet-name>
      <url-pattern>/test/</url-pattern>
   </servlet-mapping>

</web-app>

MVC-servlet.xml中:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:context="http://www.springframework.org/schema/context"
   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-3.0.xsd
   http://www.springframework.org/schema/context 
   http://www.springframework.org/schema/context/spring-context-3.0.xsd">

   <context:component-scan base-package="com.please.help.me" />

   <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
      <property name="prefix" value="/WEB-INF/jsp/" />
      <property name="suffix" value=".jsp" />
   </bean>

</beans>

控制器级:

package com.please.help.me;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class WelcomeController {

    @RequestMapping("/page1")
    public String showWelcomePage1() {
        System.out.println("show page 1...");
        return "page1";
    }

    @RequestMapping("/page2")
    public String showWelcomePage2() {
        System.out.println("show page 2...");
        return "page2";
    }

}

ant-build-file:(build.xml)

<project name="HelpMeProject" default="compile" basedir="." xmlns:ivy="antlib:org.apache.ivy.ant">
    <description>
  Build file for not working project
  </description>

    <!-- set global properties for this build -->
    <property name="src" location="src" />
    <property name="build" location="build" />
    <property name="lib" location="lib" />

    <property name="classes" location="${build}\WEB-INF\classes" />

    <path id="project-classpath">
        <fileset dir="${build}\WEB-INF\lib" includes="*.jar" />
        <fileset dir="${src}" />
    </path>

    <target name="compile" description="compile the source" >

        <delete dir="${lib}" />
        <delete dir="${build}" />

        <mkdir dir="${lib}" />

        <!-- Do ivy retrieve -->
        <ivy:retrieve pattern="${lib}/[type]/[artifact]-[revision].[ext]" />

        <!-- Create the build directory structure used by compile -->
        <mkdir dir="${build}" />
        <mkdir dir="${build}\WEB-INF\lib" />
        <mkdir dir="${classes}" />

        <copy todir="${build}\WEB-INF\lib">
            <fileset dir="${lib}\jar" />
            <fileset dir="${lib}\bundle" />
        </copy>

        <copy todir="${build}">
            <fileset dir="web" />
        </copy>

        <!-- Compile the java code from ${src} into ${build} -->
        <javac srcdir="${src}" destdir="${classes}" classpathref="project-classpath" debug="true" />

    </target>

</project>

最后是我的tomcat部署描述符:(helpme.xml)

<?xml version='1.0' encoding='utf-8'?>
<Context crossContext="true" docBase="c:\..myPath..\HelpMe\build\"  path="/helpme">

</Context>

运行compile-ant-script后,一切似乎都很好。 Tomcat应该启动它,但是我调用哪个URL并不重要 - 控制器不会被触及。 这就是我试过的:

  • 本地主机:8080 /
  • localhost:8080 / test
  • 本地主机:8080 /测试/第1页
  • 本地主机:8080 /第1页

我查找了类似的主题,但没有找到解决该问题的方法。也许你可以帮助我。 非常感谢。

2 个答案:

答案 0 :(得分:1)

更改

<url-pattern>/test/</url-pattern>

<url-pattern>/</url-pattern>

然后localhost:8080 / page1至少应该可以正常工作

这是一个maven项目吗?如果是这样,你能告诉我们pom.xml吗?

  

大多数人使用Requestmapping&#34; /&#34;

启动他们的webapp

如果你想快速启动Spring MVC Programming没有垃圾或设置使用STS(弹簧工具套件),虽然有人给了我一个艰难的时间因为我喜欢这个工具说它带有预先设置的tomcat因此减少了体验这是真的但最终你需要接近如何手动部署到tomcat。

答案 1 :(得分:1)

在您的情况下,如果您在控制器中有任何请求映射为/test/,那么

localhost:8080/test/  

它会起作用。

如果你想要/ test /之后的任何网址需要像:

那样工作
localhost:8080/test/page1

您需要将其映射到web.xml中:

/test/* 

正如我评论的那样。

在url / test / *中,*表示/ test /

之后的任何内容