HelloWorld之构建第一个Spring MVC项目

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Frank_Adam/article/details/79223644

今天看了慕课上面的Spring MVC起步视频,总结出来搭建第一个Spring MVC项目的步骤以供参考。


1.      配置本地Maven。

从官网下载apache-maven-3.5.2-bin.zip,解压至任意目录如E:\maven\。

将conf目录中的setting.xml拷贝至任意目录如E:\maven\.m2\。

修改拷贝好的setting.xml,添加本地仓库路径和Maven镜像站点配置:

<localRepository>E:\Program Files\maven\.m2\repository</localRepository>
<mirror>
  <id>mirror-uk</id>
  <name>UK Central</name>
  <url>http://uk.maven.org/maven2/</url>
  <mirrorOf>central</mirrorOf>
</mirror>


2.      配置Intellij IDEA的Maven环境。

打开Settings->Build, Execution, Deployment->Build Tools->Maven,设置Maven homedirectory为E:\Program Files\maven\,User settings file后勾选Override后设置为E:\Program Files\maven\.m2\setting.xml。

这样在以后使用IDEA下载Maven依赖时都会下载到配置文件setting.xml中localRepository标签指定的位置。

扫描二维码关注公众号,回复: 3582495 查看本文章


3.      创建第一个Spring MVC项目。

打开IDEA创建新项目,选择Maven并且勾选Create from archetype,选择下方列出的org.apache.maven.archetypes:maven-archetype-webapp,点击下一步,指定GroupId/ArtifactId点下一步,检查Maven配置点下一步,确认Project配置完成创建。


4.      配置pom.xml加入相关依赖。

<project xmlns="http://maven.apache.org/POM/4.0.0" s: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>MavenTest</groupId>
<artifactId>MavenExample</artifactId>
<packaging>war</packaging>  <!-- Default: war-->
<version>1.0-SNAPSHOT</version>
<name>MavenExample Maven Webapp</name>
<url>http://maven.apache.org</url>

<properties>
  <commons-lang.version>2.6</commons-lang.version>
  <slf4j.version>1.7.6</slf4j.version>
  <spring.version>4.1.3.RELEASE</spring.version>
</properties>

<dependencyManagement>   <!--依赖管理,解决依赖冲突问题-->
  <dependencies>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-framework-bom</artifactId>
      <version>${spring.version}</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

<dependencies>
  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>3.8.1</version>
    <scope>test</scope>
  </dependency>
  <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
    <scope>runtime</scope>
  </dependency>
  <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>2.5</version>
</dependency>
  <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>${slf4j.version}</version>
  </dependency>
  <!--dependency>
    <groupId>taglibs</groupId>
    <artifactId>standard</artifactId>
    <version>1.1.2</version>
  </dependency-->
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>${spring.version}</version>
  </dependency>
  <dependency>
    <groupId>commons-lang</groupId>
      <artifactId>commons-lang</artifactId>
      <version>${commons-lang.version}</version>
  </dependency>
  <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>${slf4j.version}</version>
    <exclusions>
      <exclusion>
        <artifactId>slf4j-api</artifactId>
        <groupId>org.slf4j</groupId>
      </exclusion>
    </exclusions>
  </dependency>
</dependencies>
<build>
  <finalName>MavenExample</finalName>
</build>
</project>


5.      添加相关配置文件。

WEB-INF/web.xml:指定配置文件路径、ContextLoadListener、Servlet、Servlet-mapping。

<?xml version="1.0" encoding="UTF-8" ?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
         http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    <display-name>Archetype Created Web Application</display-name>

    <!--Spring应用上下文,理解层次化的ApplicationContext-->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>WEB-INF/conf/spring/applicationContext*.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <!--DispatcherServlet, Spring MVC核心-->
    <servlet>
        <servlet-name>mvc-dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!-- DispatcherServlet对应的上下文配置,默认为WEB-INF/${servlet-name}-servlet.xml-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>WEB-INF/conf/spring/mvc-dispatcher-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>mvc-dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

按照web.xml中mvc-dispatcher项指定的配置文件路径,配置mvc-dispatcher-servlet.xml。

WEB-INF/conf/spring/mvc-dispatcher-servlet.xml:配置mvc-dispatcher。配置ViewResolver中指定了前缀/WEB-INF/jsps/和后缀.jsp,表明servlet将从/WEB-INF/jsps/路径下寻找后缀名为.jsp的匹配页面文件。

<?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.xsd
       http://www.springframework.org/schema/mvc
       http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!--本配置文件供mvc-dispatcher:DispatcherServlet使用,提供其相关的Spring MVC配置-->

    <!--启用Spring基于annotation的DI,使用户可以在Spring MVC中使用Spring的强大功能。-->
    <!--激活@Required @Autowired,JSR 250's @PostConstruct @PreDestroy @Resource-->
    <context:annotation-config/>

    <!--DispatcherServlet上下文,只管理@Controller类型的bean,忽略其他类型的bean如@Service-->
    <context:component-scan base-package="com.adam.spring">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>

    <!--Handler Mapping默认启动-->
    <!--DefaultAnnotationHandlerMapping 基于annotation的HandlerMapping-->

    <!--扩充了注解驱动,可以将请求参数绑定到Controller参数-->
    <mvc:annotation-driven/>

    <!--静态资源处理,css,js,imgs-->
    <mvc:resources mapping="/resources/**" location="/resources/"/>

    <!--View Resolver.可以用多个ViewResolver。使用order属性排序。-->
    <!--InternalResourceViewResolver放在最后。-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
        <property name="prefix" value="/WEB-INF/jsps/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

</beans>

WEB-INF/conf/spring/applicationContext.xml:Spring配置。

<?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"
       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.xsd">

    <context:annotation-config/>

    <!--context:component-scan base-package="com.adam.spring.controller">
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan-->

</beans>


6.      添加前端JSP页面。

在WEB-INF\jsps\路径下新建home.jsp页面。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Spring MVC Test</title>
</head>
<body>
Hello Spring MVC!
</body>
</html>


7.      添加后端Controller。

在src/main/java下com.adam.spring.controller包下新建HelloMvcController。

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/hello")    //HelloMvcController响应/hello请求
public class HelloMvcController {
    @RequestMapping("/mvc")    //helloMvc()方法响应/hello/mvc请求
    public String helloMvc() {
        return "home";    //跳转到WEB-INF/jsps/home.jsp
    }
}


8.      配置Tomcat服务器。

配置Tomcat,部署Web应用。


9.      启动服务器。

启动Tomcat服务器,地址栏输入localhost:8080/hello/mvc回车,页面会显示出home.jsp的内容。



问题记录:

1.   java.lang.NoClassDefFoundError:javax/servlet/jsp/jstl/core/Config

类似错误:java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory

解决:导入JSTL包。

WEB-INF下新建lib文件夹,放入jstl-1.2.jar,然后在ProjectStructure-Library中设置lib。


2.   Cannot resolve reference to bean'cacheManager' while setting bean property 'cacheManager'; nested exception isorg.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named'cacheManager' is defined

解决:dispatcher-servlet.xml文件中将

xmlns:mvc="http://www.springframework.org/schema/cache"

改为

xmlns:mvc="http://www.springframework.org/schema/mvc"

同时将xsi:schemaLocation标签中进行相应调整。


3.   java 非法字符’\ufeff’

编码格式问题。

解决:将文件所有内容复制到Notepad中,然后删除重新创建内容一样的文件。


猜你喜欢

转载自blog.csdn.net/Frank_Adam/article/details/79223644