在Eclipse中构建Spring项目
目录
- 0 构建项目
- 1 修改项目 pom.xml
- 2 修改项目 web.xml
- 3 配置springmvc-servlet.xml
- 4 写Controller
- 5 静态资源
- 6 文件上传
- 7 通过application.properties进行参数注入
0. 构建项目
file-new-project选择mavenproject
然后选择webapp
1. 修改项目 pom.xml
添加spring-web 和 spring-webmvc 这两个依赖,以及fastjson,用来将bean转化为json
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.reno.zhihu</groupId>
<artifactId>zhihuSpyderWithGUI</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>zhihuSpyderWithGUI Maven Webapp</name>
<url>http://maven.apache.org</url>
<properties>
<hibernate-version>5.2.2.Final</hibernate-version>
<spring-version>4.2.5.RELEASE</spring-version>
<fastjson-json-version>1.2.16</fastjson-json-version>
<junit-version>3.8.1</junit-version>
</properties>
<dependencies>
<!-- Spring SpringMVC -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!--json-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.8.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.1</version>
</dependency>
</dependencies>
<build>
<finalName>zhihuSpyderWithGUI</finalName>
</build>
</project>
在其中添加两个Spring依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring-version}</version>
</dependency>
2. 修改项目 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>
<display-name>Archetype Created Web Application</display-name>
<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:springmvc-servlet.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>
</web-app>
- DispatcherServlet是前置控制器,拦截匹配的请求,Servlet拦截匹配规则要自已定义,把拦截下来的请求,依据相应的规则分发到目标Controller来处理,是配置spring MVC的第一步。
3. 在resources文件夹中建立springmvc-servlet.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: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.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd">
<!-- scan the package and the sub package -->
<context:component-scan base-package="com.reno.testSpring"/>
<!-- don't handle the static resource -->
<mvc:default-servlet-handler />
<!-- if you use annotation you must configure following setting -->
<mvc:annotation-driven />
<!-- configure the InternalResourceViewResolver -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
id="internalResourceViewResolver">
<!-- 前缀 -->
<property name="prefix" value="/WEB-INF/jsp/" />
<!-- 后缀 -->
<property name="suffix" value=".jsp" />
</bean>
</beans>
<context:component-scan base-package="com.reno.testSpring"/>这个定义了自动扫描的根包,这个根据需要更改
前后缀的使用
<!-- 前缀 -->
<property name="prefix" value="/WEB-INF/jsp/" />
<!-- 后缀 -->
<property name="suffix" value=".jsp" />
当Controller return一个String的时候自动去匹配对应的 /WEB-INF/jsp/"String".jsp 文件
4. 写Controller
@Controller
@RequestMapping("/mvc")
public class mvcController {
public mvcController() {
System.out.println("===============");
}
@RequestMapping("/hello")
public String hello(){
return "hello";
}
@RequestMapping("/hello2")
public
@ResponseBody
Person getShopInJSON() {
Person p = new Person();
p.setAge(12);
p.setName("adad");
return p;
}
}
return "hello"; 会与之前springmvc-servlet.xml中的前缀后缀拼接,最后返回一个 /WEB-INF/jsp/hello.jsp
return 一个对象 ,由于之前引入fastjson,将被直接转化成一个json串。
5. 静态资源
参考 http://blog.csdn.net/litlit023/article/details/41494093
在springmvc-servlet.xml中添加信息,这个文件根据你在web.xml中的配置而名字不同
一下字段添加在<beans>标签以内
<!-- Handles HTTP GET requests for /resources/** by efficiently serving
up static resources in the ${webappRoot}/resources directory -->
<mvc:resources mapping="/resources/**" location="/resources/" />
<mvc:resources mapping="/images/**" location="/images/" />
<mvc:resources mapping="/js/**" location="/js/" />
6. 文件上传
在pom.xml中添加依赖
<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
这里最新版本是1.3.2 但是在 http://repo.maven.apache.org/maven2 这个仓库中 1.3.2的文件结构有点和其他的版本不一样,用maven构建的时候出现问题,故而使用1.3.1版本
在springmvc-servlet.xml中配置一下
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver" />
从而实现上传功能 这里还可以做一些详细的配置比如文件的最大上传大小之类的
比如在bean中添加属性参数限制上传大小
<property name="maxUploadSize" value="204800" />
前端上传界面
使用一个form 利用enctype="multipart/form-data"属性上传文件。 action="/zhihuSpyderWithUI/springUpload"代表了点击upload按钮以后再后端请求的url
<form name="Form2" action="/zhihuSpyderWithUI/springUpload" method="post" enctype="multipart/form-data">
<h1>使用spring mvc提供的类的方法上传文件</h1>
<input type="file" name="file">
<input type="submit" value="upload"/>
</form>
后台处理代码
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class UploadFile {
/*
*采用spring提供的上传文件的方法
*/
@RequestMapping("/springUpload")
public String springUpload(HttpServletRequest request) throws IllegalStateException, IOException
{
//将当前上下文初始化给 CommonsMutipartResolver (多部分解析器)
CommonsMultipartResolver multipartResolver=new CommonsMultipartResolver(
request.getSession().getServletContext());
//检查form中是否有enctype="multipart/form-data"
if(multipartResolver.isMultipart(request))
{
//将request变成多部分request
MultipartHttpServletRequest multiRequest=(MultipartHttpServletRequest)request;
//获取multiRequest 中所有的文件名
Iterator iter=multiRequest.getFileNames();
while(iter.hasNext())
{
//一次遍历所有文件
MultipartFile file=multiRequest.getFile(iter.next().toString());
if(file!=null)
{
String basepath=request.getSession().getServletContext().getRealPath("uploadfile");
System.out.println(basepath);
path=basepath+"/"+System.nanoTime()+file.getOriginalFilename();
//上传
file.transferTo(new File(path));
}
}
}
return "success";
}
}
这里将文件保存在webapp 下的upload目录底下
7. 通过application.properties进行参数注入
在xxx-servlet.xml中添加
<context:property-placeholder location="classpath:application.properties" />
这里application.properties文件存放在resources 目录底下
之后再任何的Bean类中使用一下代码
@Value("${cmd.dir}")
private String baseURL;
给baseURL赋值 ,其中cmd.dir对应了application.properties中的内容:
cmd.dir=xxx