Java 可能工作的最简单的Spring(3)应用程序是什么?
我正在使用Spring3,并试图创建可能工作的最基本的应用程序 这就是我到目前为止所做的: HeyDude.javaJava 可能工作的最简单的Spring(3)应用程序是什么?,java,spring,Java,Spring,我正在使用Spring3,并试图创建可能工作的最基本的应用程序 这就是我到目前为止所做的: HeyDude.java package test; import org.springframework.stereotype.Controller; import org.springframewor
package test;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class HeyDude {
@RequestMapping("/hello")
public @ResponseBody String hello () {
return "Such cool. Many awesome.";
}
}
web.xml
<web-app version="2.4" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/j2ee" xsi:schemalocation="http:/java.sun.com/dtd/web-app_2_3.dtd">
<display-name>Spring test for awesome!</display-name>
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
<!--
-->
</web-app>
<property name="name" value="api"/>
<property name="lib.dir" value="${name}/WEB-INF/lib"/>
<property name="build.dir" value="${name}/WEB-INF/classes"/>
<target name="testbuild" description="Compile main source tree java files">
<mkdir dir="${lib.dir}"/>
<copy todir="${lib.dir}" preservelastmodified="true">
<fileset dir="/usr/share/tomcat7/lib/">
<include name="servlet-api.jar"/>
</fileset>
<fileset dir="/path/to/other/libs">
<include name="spring-core-3.2.2.RELEASE.jar" />
<include name="spring-web-3.2.2.RELEASE.jar" />
<include name="spring-context-3.2.2.RELEASE.jar" />
<include name="spring-servlet-3.2.2.RELEASE.jar" />
</fileset>
</copy>
<javac destdir="${build.dir}" source="1.6"
includeantruntime="false"
target="1.6" debug="true"
deprecation="false" optimize="false" failonerror="true">
<src path="${build.dir}/test"/>
<classpath refid="master-classpath"/>
</javac>
</target>
<target name="testwar" depends="testbuild" description="Build a WAR">
<war basedir="api/" warfile="my-test.war">
<exclude name="${build-dir}" />
<exclude name="downloads/*" />
</war>
</target>
<include name="spring-core-3.2.2.RELEASE.jar" />
<include name="spring-web-3.2.2.RELEASE.jar" />
<include name="spring-context-3.2.2.RELEASE.jar" />
<include name="spring-context-support-3.2.2.RELEASE.jar" />
<include name="spring-webmvc-3.2.2.RELEASE.jar" />
<include name="spring-beans-3.2.2.RELEASE.jar" />
<include name="org_apache_commons_logging.jar" />
<include name="spring-expression-3.2.2.RELEASE.jar" />
<display-name>Spring test for awesome!</display-name>
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
我要怎么做才能让它工作,为什么?或者,如果有一个更简单的应用程序我可以创建,我想看看它 首先,您缺少很多依赖项(SpringBeans、SpringContext-Support和可能的SpringExpression),并且您没有不存在的依赖项(SpringServlet,可能必须是SpringWebMVC) 下一步,您的
@Controller
错误,它当前映射到/hello
,这将导致一个URL/hello/hello
,它将永远不会被DispatcherServlet
触及,因为它映射到/hello
而不是/hello/*
,但是我希望它映射到/hello
,所以映射您的servlet到/
或/*
最后,我强烈建议您再次开始关注Maven(或Gradle)。您不想在internet上搜索需要在项目中包含哪些JAR。如果您真的想继续使用ant,至少要研究一下依赖关系管理
对于maven来说,以下内容就足够了(大致是您的build.xml
文件的翻译)
4.0.0
测试
我的测试
战争
0.0.1-快照
UTF-8
3.2.8.1发布
org.springframework
SpringWebMVC
${spring.version}
javax.servlet
javax.servlet-api
3.0.1
假如
org.apache.maven.plugins
maven编译器插件
3.1
${project.build.sourceEncoding}
1.6
1.6
这将下载所有必需的附件,并在执行mvn包时创建一个war文件。Deinum的回答引导我找到了我想要的: 将这些依赖项添加到build.xml
<web-app version="2.4" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/j2ee" xsi:schemalocation="http:/java.sun.com/dtd/web-app_2_3.dtd">
<display-name>Spring test for awesome!</display-name>
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
<!--
-->
</web-app>
<property name="name" value="api"/>
<property name="lib.dir" value="${name}/WEB-INF/lib"/>
<property name="build.dir" value="${name}/WEB-INF/classes"/>
<target name="testbuild" description="Compile main source tree java files">
<mkdir dir="${lib.dir}"/>
<copy todir="${lib.dir}" preservelastmodified="true">
<fileset dir="/usr/share/tomcat7/lib/">
<include name="servlet-api.jar"/>
</fileset>
<fileset dir="/path/to/other/libs">
<include name="spring-core-3.2.2.RELEASE.jar" />
<include name="spring-web-3.2.2.RELEASE.jar" />
<include name="spring-context-3.2.2.RELEASE.jar" />
<include name="spring-servlet-3.2.2.RELEASE.jar" />
</fileset>
</copy>
<javac destdir="${build.dir}" source="1.6"
includeantruntime="false"
target="1.6" debug="true"
deprecation="false" optimize="false" failonerror="true">
<src path="${build.dir}/test"/>
<classpath refid="master-classpath"/>
</javac>
</target>
<target name="testwar" depends="testbuild" description="Build a WAR">
<war basedir="api/" warfile="my-test.war">
<exclude name="${build-dir}" />
<exclude name="downloads/*" />
</war>
</target>
<include name="spring-core-3.2.2.RELEASE.jar" />
<include name="spring-web-3.2.2.RELEASE.jar" />
<include name="spring-context-3.2.2.RELEASE.jar" />
<include name="spring-context-support-3.2.2.RELEASE.jar" />
<include name="spring-webmvc-3.2.2.RELEASE.jar" />
<include name="spring-beans-3.2.2.RELEASE.jar" />
<include name="org_apache_commons_logging.jar" />
<include name="spring-expression-3.2.2.RELEASE.jar" />
<display-name>Spring test for awesome!</display-name>
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
因此Spring有几个要求(包括ApacheCommons日志记录)。Spring还需要一个springservlet.xml
,它可能需要context:component-scan
元素(与其他地方相比,这是绝对需要的)
这是我能想到的最简单的Spring应用程序。ant+Spring3是一个约束条件,还是可以切换到maven+Spring4?在后一种情况下,SpringBoot是一个非常棒的工具,可以或多或少地限制您的启动。另外,根据我的经验,Maven更复杂,而不是更少(虽然它确实隐藏了一些复杂性。我猜。我从来没能让它真正起作用,呵呵。)@WayneWerner所以你认为Maven让事情变得复杂,而你的非Maven项目似乎显示了一个与缺少依赖项相关的错误。当我使用“复杂”这个词时,我想我的意思是我不理解它是如何工作的,或者它在做什么。我觉得我在疯狂地挥舞。对于我试图做的事情,我仍然觉得我在疯狂地挥舞,因为我一生都找不到一个基本的例子,上面写着“为了创建一个spring应用程序,你需要X,Y,Z”。我看到的每一个例子都说,“来自Eclipse…”-当然,使用这些工具是可以的,但我试图理解它们应该如何工作。现在我显然不明白Spring是如何工作的——这正是我想要做的;这并不会让你的生活变得更轻松,但对于建筑工程师来说,它也能实现同样的效果。。。使用基于脚本的构建,如ant或更新的基于DSL的构建工具,使构建配置成为代码;作为这样的代码,它需要任何其他代码的维护级别,并且任何代码的维护都比强制生命周期的xml配置要痛苦得多。