第二章 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>
View Code

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>
View Code

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>
View Code

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";
    }
}
View Code

代码中的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>
View Code

2.8    Tomcat运行项目

如果项目中已经添加了Tomcat Server的话,可以 右键->Add And Remove…,将项目添加到启动配置中。

 

 

 

 启动运行tomcat,打开浏览器访问:http://127.0.0.1:8080/maven_webapp/say/hello

posted @ 2019-12-20 14:30  柴高八斗  阅读(765)  评论(0编辑  收藏  举报