第二章 Maven 构建 Java Web项目
本教程中,我们将教给大家如何创建一个基于Spring MVC 的 Maven Web Project。
用到的技术/工具:
1、Eclipse 4.9
2、Maven 3.6.2
3、Tomcat 8.5.34
4、JDK 1.8
5、Spring 4.3.14.RELEASE
2.1 新建Maven Project
打开Eclipse IDE,新建Maven Project,步骤:File->Project->Maven->Maven Project
在此不要勾选“Create a simple project(skip archetype selection)”,勾选了将会跳过模板选择,框架结构就需要自己手动去建了,不要勾选。接下来选择一下项目工程的路径
我们给项目命名“maven_webapp”,如果这个目录不存在,可以自己创建一个,选择这个文件目录
选择模板“maven-archetype-webapp”:
配置:Group Id一般指项目所属的组织机构,Artifact Id指项目名称,Package会根据前面的两项自动生成,接着下一步完成,一个Maven的Web项目就创建完毕了。
创建完成后,可以看一下项目的目录结构:
上图发现了两个问题:
1、 项目目录出现了错误红叉
2、 而且目录结构缺少java和test的结构目录
原因:打开index.jsp文件后,鼠标移到左边的红叉上,提示没有找到javax.servlet.http.HttpServlet ,这是没有Java Build Path 中没有引入Tomcat Server的原因。
2.2 添加Tomcat Server
两种方式:
1、右键->项目名称->Build Path->Configure Build Path->Java Build Path
2、菜单:Project->Properties->Java Build Path
Libraries中并没有Tomcat,所以需要“Add Library...”来添加
现在Libraries中已经添加了Tomcat。再来看一下项目的结构目录中不但红叉的错误消失了,而且增加了java和test的结构目录,让项目结构完整了。
2.3 配置pom.xml
引入依赖包:spring-web、spring-webmvc、commons-logging、servlet、jsp.jstl、taglibs
<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.gg</groupId> <artifactId>maven_webapp</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <name>maven_webapp Maven Webapp</name> <url>http://maven.apache.org</url> <!-- 公共属性,方便控制,可通过类似于表达式EL一样引用 --> <properties> <spring.version>4.3.14.RELEASE</spring.version> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <!-- 搭建Springmvc框架只需要引用spring-web,spring-webmvc两个包即可Maven会自动引用他们的依赖包 --> <!-- https://mvnrepository.com/artifact/org.springframework/spring-web --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <!-- Maven中通过类似与EL表达式一样可以引用上方配置公共属性 --> <version>${spring.version}</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <!-- https://mvnrepository.com/artifact/commons-logging/commons-logging --> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.1.1</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> </dependency> <dependency> <groupId>javax.servlet.jsp.jstl</groupId> <artifactId>jstl-api</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>taglibs</groupId> <artifactId>standard</artifactId> <version>1.1.2</version> </dependency> </dependencies> <build> <finalName>maven_webapp</finalName> </build> </project>
2.4 配置web.xml
设置spring-mvc的配置文件路径/WEB-INF/mvc-dispatcher-servlet.xml,mvc-dispatcher-servlet.xml文件可以在后面创建。
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> <display-name>Archetype Created Web Application</display-name> <!-- The front controller of this Spring Web application, responsible for handling all application requests --> <servlet> <servlet-name>mvc-dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <!-- 配置springmvc配置文件的加载位置,如果不配置的话默认加载WEB-INF目录下的 [servlet-name]-servlet.xml 这里没配置的话将加载目录下的springDispatcherServlet-servlet.xml --> <param-name>contextConfigLocation</param-name> <!-- 这里需要注意项目中的classpath并不是/src目录下,而是存放编译后的代码的地方, 通常默认为/classes目录下 --> <!--<param-value>classpath:springmvc-servlet.xml</param-value>--> <param-value>/WEB-INF/mvc-dispatcher-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <!-- Map all requests to the DispatcherServlet for handling --> <servlet-mapping> <servlet-name>mvc-dispatcher</servlet-name> <!-- 配置DispatcherServlet需要拦截配置,共有 *.[xx], /*, /, /xx/* 几种方式 这里我们配置为/ 即为拦截所有的资源,后面我们会在springmvc配置文件中单独配置 静态资源让其不拦截 --> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
2.5 spring-mvc配置
根据上一步web.xml中的spring-mvc的文件路径配置,需要在WEB-INF目录下手动创建一个名字为mvc-dispatcher-servlet.xml的文件,添加配置:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd" > <!-- 开启springmvc的注解 下面就不需要手动注册注解类型的处理器映射器与处理器适配器 --> <mvc:annotation-driven/> <!-- 扫描注解,配置到需要扫描的包即可 --> <context:component-scan base-package="com.gg.maven_webapp"></context:component-scan> <!-- 设置静态资源路径,这样就不会被前端控制器拦截处理 --> <mvc:resources location="/resources/" mapping="/resources/**"></mvc:resources> <!-- 注册视图解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- jsp中会使用到jstl,所以设置为jstlView --> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> <!-- 视图路径前缀 --> <property name="prefix" value="/resources/jsp/" /> <!-- 视图后缀 --> <property name="suffix" value=".jsp" /> </bean> </beans>
2.6 创建spring mvc的控制器类
创建一个spring mcv控制器类BaseController:
源代码:BaseController.java
package com.gg.maven_webapp; import javax.servlet.http.HttpServletRequest; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.servlet.ModelAndView; import org.springframework.ui.Model; @Controller @RequestMapping("/say") public class BaseController { @RequestMapping("/hello") public String hello(ModelAndView modelAndView,Model model,HttpServletRequest request) { String context = " say hello"; modelAndView.addObject("modelview", "modelview"+context); model.addAttribute("model", "model"+context); request.setAttribute("request", "request"+context); System.out.println(context); return "result"; } }
代码中的return “result”表示对应的视图result.jsp文件,根据mvc-dispatcher-servlet.xml文件中的配置,视图的文件放置在/webapp/resources/jsp/,对应文件result.jsp。
稍后通过 http://localhost:8080/maven_webapp/say/hello 访问。
2.7 创建jsp视图文件
在对应目录下创建result.jsp视图文件
html源代码:
<html> <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <body> <h2>Hello World!</h2> <body> <p>modelAndView结果${modelview}</p> <p>model结果${model }</p> <p>request结果${request }</p> </body> </body> </html>
2.8 Tomcat运行项目
如果项目中已经添加了Tomcat Server的话,可以 右键->Add And Remove…,将项目添加到启动配置中。
启动运行tomcat,打开浏览器访问:http://127.0.0.1:8080/maven_webapp/say/hello