在使用Spring MVC框架时,我尝试创建一个小的Java web项目。为了构建我的项目,我使用蚂蚁。编译过程似乎可以工作,但不幸的是,我的控制器类(和方法)从未被调用过。
这是我的解决方案文件。
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.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-INFclasses" />
<path id="project-classpath">
<fileset dir="${build}WEB-INFlib" 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-INFlib" />
<mkdir dir="${classes}" />
<copy todir="${build}WEB-INFlib">
<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..HelpMebuild" path="/helpme">
</Context>
运行编译ant脚本后,一切似乎都很好。Tomcat按照它应该做的那样启动,但我调用哪个URL并不重要——控制器不会被触碰。这就是我尝试的:
- localhost:8080/
- localhost:8080/test
- localhost:8080/test/page1
- localhost:8080/page1
我寻找相似的话题,但没有找到解决那个问题的办法。也许你可以帮我。非常感谢。
在您的情况下,如果您在控制器中有任何请求映射为/test/
,则
localhost:8080/test/
它会起作用的。
如果你想要/test/之后的任何url,需要像一样工作
localhost:8080/test/page1
您需要在web.xml中将其映射为:
/test/*
正如我所评论的。
在url/test/*中,*
表示/test/
更改
<url-pattern>/test/</url-pattern>
至
<url-pattern>/</url-pattern>
那么localhost:8080/page1至少应该可以正常工作
这是一个maven项目吗?如果是的话,你能给我们看pom.xml吗?
大多数人使用Requestmapping"/"启动他们的网络应用程序
如果你想快速开始SpringMVC编程,没有垃圾或设置,请使用STS(Spring-tools suite),尽管有人给了我一段时间,因为我喜欢这个工具,说它附带了一个预设置的tomcat,因此减少了体验,尽管这是真的,但最终你需要接近如何手动部署到tomcat。