Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 可能工作的最简单的Spring(3)应用程序是什么?_Java_Spring - Fatal编程技术网

Java 可能工作的最简单的Spring(3)应用程序是什么?

Java 可能工作的最简单的Spring(3)应用程序是什么?,java,spring,Java,Spring,我正在使用Spring3,并试图创建可能工作的最基本的应用程序 这就是我到目前为止所做的: HeyDude.java package test; import org.springframework.stereotype.Controller; import org.springframewor

我正在使用Spring3,并试图创建可能工作的最基本的应用程序

这就是我到目前为止所做的:

HeyDude.java

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>       

我要怎么做才能让它工作,为什么?或者,如果有一个更简单的应用程序我可以创建,我想看看它

首先,您缺少很多依赖项(SpringBeansSpringContext-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配置要痛苦得多。