1. 建立maven web project
右键 new -> other ->
finish后,新建了工程,但上面有红叉
2. 添加servlet,以解决上面的红叉
我们需要添加Servlet依赖。到Maven中央仓库获取。http://www.mvnrepository.com/,搜索Servlet:
选择3.1.0 -> 复制下面代码:
代码如下:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
粘贴到pom.xml,保存:
右键工程 Maven -> Update Project
ok,红叉消失
3. 我的目的是学习@RequestMapping @ResponseBody 和 @RequestBody 注解的用法,查询到需要通过Maven添加2个包,其他的依赖包会自动下载。
1)修改pom.xml,添加如下代码:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>3.1.2.RELEASE</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.8</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
右键工程 Maven -> Update Project。
工程中的包如下:
2)修改如下3个文件,注意建立的目录树结构,需要完全一致。
2.1) web.xml是自带的,其内容 用 如下代码代替:
web.xml
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<!-- ================spring mvc 适配器================ -->
<servlet>
<servlet-name>springMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:/applicationContext/application_spring_mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- ================================================== -->
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
2.2)在src的main下面建立3层目录结构,二级目录mavenDemo的名字与工程名一致
HelloController.java代码:
package mavenDemo;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@RequestMapping("/")
public class HelloController
{
@RequestMapping(value = "/something", method = RequestMethod.GET)
@ResponseBody
public String helloWorld() {
return"Hello World";
}
}
2.3)src的resources下建立2层目录结构
application_spring_mvc.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:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
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/tx
http://www.springframework.org/schema/tx/spring-tx-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">
<!-- 自动扫描的包名 -->
<context:component-scan base-package="mavenDemo"/>
<!-- 默认的注解映射的支持,自动注册DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter -->
<mvc:annotation-driven />
</beans>
3) 右键项目 -> Run as -> Run on server ->
输出了想要的内容!!!ok
问题:1)为什么 HelloController.java 和 application_spring_mvc.xml 非要建成上面的目录结构 ?
2)许多具体原理不懂?这只是一个画瓢的例子
参考:
2. SpringMVC最基础配置 (重要)
4. SpringMVC中的@Controller和@RequestMapping到底什么鬼? (第一个代码)
5. 浅谈@RequestMapping @ResponseBody 和 @RequestBody 注解的用法与区别