一年前刚毕业的时候,Java对于我来说是一门挺陌生的语言,此前我一致专注在C/C++以及bash shell上。后来来到了现在的公司,C++用不上,于是“转行”干起了Java。一切都得重新来,根本不知道spring框架为何物,也不知道Maven是何方神圣,因为我只知道STL、POCO、makefile等,做的web项目也是C++(后台)加PHP(前台)。不会就上网找嘛,但是,很少有那种特别详细的、专门面向小白用户的博客,于是我决定站在一个小白的角度(本身就是小白,哈哈)写一篇构建基于maven管理的spring web项目的博客,如果这篇博客能帮助到后来的小白们,这也就是我做这件事的意义,如有理解错误或表述错误的地方也希望大家不吝赐教。
一、准备工作
1、安装Java JDK(Java 8);
2、安装eclipse,集成maven、spring等;
3、安装Apache tomcat(tomcat 8.5)。
以上内容能够在网上找到很多详细的资料,而且进阶到spring框架的朋友,我相信安装这些个东西已经不再话下了,这里我就不再赘述。
二、新建Maven工程
1、新建maven工程
一路的选择与next
这样工程就建好了, 目录结构如上图所示。
2、更改工程属性
接下来需要修改工程的属性,首先是Project Facets,修改java和Dynamic Web Module版本,如下图所示。Java版本需要与系统安装的java版本一致(本机安装的是java1.8);Dynamic Web Module需要更改到更高版本3.0,这个时候可能会出现无法修改的情况,这时我们就需要跳过图形接口,直接去修改它的配置文件。
首先,查看工程的路径,在Project Facets这一栏的最上方Resources 。进到找到该路径下的.settings文件夹,在.settings文件夹下有一个 org.eclipse.wst.common.project.facet.core.xml的文件,打开并修改jst.web对应的值,改为3.0,保存后刷新并clean该工程(project>>clean)。再次查看Project Facets会发现Dynamic Web Module已经被修改了。
这里需要提醒一下小白开发者们,Eclipse只是一个IDE,它提供的所有的图形都是用来修改工程配置文件(.settings)的一个便捷接口,因此跳过eclipse,直接更改配置文件也能到达同样的效果。希望你们可以认真看看.settings目录下的配置文件。
3、配置Deployment Assembly
通过增删配置成如下图所示。如果没有对应的文件夹,只需要在src目录下手动创建即可。
4、配置Java Build Path
Source和Library中配置分别如下图所示。分别通过右边的Add Folder和Add Library配置Source和Library。
5、配置pom.xml
<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.yangfang</groupId>
<artifactId>Maven-Spring-Web</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>Maven-Spring-Web Maven Webapp</name>
<url>http://maven.apache.org</url>
<properties>
<!-- Generic properties -->
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<!-- Web -->
<jsp.version>2.2</jsp.version>
<jstl.version>1.2</jstl.version>
<servlet.version>3.1.0</servlet.version>
<!-- Spring -->
<spring-framework.version>4.3.0.RELEASE</spring-framework.version>
<!-- Hibernate / JPA -->
<hibernate.version>4.2.1.Final</hibernate.version>
<!-- Logging -->
<logback.version>1.0.13</logback.version>
<slf4j.version>1.7.5</slf4j.version>
<!-- Test -->
<junit.version>4.11</junit.version>
</properties>
<dependencies>
<!-- Spring MVC -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring-framework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring-framework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring-framework.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.codehaus.jackson/jackson-mapper-asl -->
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
<!-- Other Web dependencies -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>${jstl.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>${servlet.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>${jsp.version}</version>
<scope>provided</scope>
</dependency>
<!-- Spring and Transactions -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring-framework.version}</version>
</dependency>
<!-- Logging with SLF4J & LogBack -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${logback.version}</version>
<scope>runtime</scope>
</dependency>
<!-- Hibernate -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>${hibernate.version}</version>
</dependency>
<!-- Test Artifacts -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring-framework.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.7.4</version>
</dependency>
</dependencies>
<build>
<finalName>Maven-Spring-Web</finalName>
</build>
</project>
6、配置web.xml
web.xml可以被视为web应用程序的main函数,即web程序的入口。
7、配置spring-config.xml
spring-config.xml主要用来告诉spring需要扫描哪些包(package)路径下的类,然后spring会将这些包路径中带有component注解的bean注入到容器,例如@Component、@Service等注解。
<?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:aop="http://www.springframework.org/schema/aop" xmlns:p="http://www.springframework.org/schema/p"
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
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
<context:annotation-config />
<context:component-scan base-package="com.yangfang" >
<!-- <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/> -->
</context:component-scan>
</beans>
8、配置spring-servlet.xml
spring-servlet.xml是用来配置spring mvc中视图解析器(view resolver)的。
<?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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:util="http://www.springframework.org/schema/util" xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-3.0.xsd
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
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
<context:annotation-config />
<context:component-scan base-package="com.yangfang.controller">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" />
</context:component-scan>
<bean id="defaultViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:order="3">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
<property name="contentType" value="text/html" />
<property name="prefix" value="/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
9、编写controller类
配置spring mvc中c(controller),
/**
*
*/
package com.yangfang.controller;
import javax.servlet.http.HttpServletRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.stereotype.Controller;
/**
* @author francisyang
*
*/
@Controller
public class MyController {
private static Logger logger = LoggerFactory.getLogger(MyController.class);
@RequestMapping("hello")
public String getNewName(@RequestParam("userName") String userName, HttpServletRequest request) {
logger.info("welcome to controller");
String newUserName = "yangfang";
request.setAttribute("newUserName", newUserName);
return "hello";
}
}
10、编写index.jsp和hello.jsp
index和hello就是model,spring mvc中最后一个m。
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>index</title>
</head>
<body>
<form action="hello" method="post">
请输入姓名:<input type="text" name="userName" /> <input type="submit"
value="提交" /> <br />
</form>
</body>
</html>
hello.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>hello</title>
</head>
<body>
<h1><%=request.getAttribute("newUserName")%></h1>
</body>
</html>
12、完整的项目结构如下图所示
service部分可以暂时不考虑,只需要编写MyController就可以。
13、启动
一般使用tomcat启动web应用程序,将tomcat添加到eclipse后,右键工程Maven-Spring-Web -> Run as -> Run On Server
浏览器中输入localhost:8080就能看到这样的画面。输入任意值,提交即可
持续更新中。。。