搭建SpringMVC

通过Maven创建项目

  • 选择Group Id = org.apache.maven.archetypes, Aritifact Id = maven-archetype-webapp
  • 其他配置按要求输入即可
  • 针对Maven创建项目进程慢的问题处理方法:解决办法之一
  • 修改Build Path,去除前期运行环境错误
  • 配置加载依赖包,编辑pom.xml
    注意这里的version都是引用变量,故需要在文件前面声明好spring.version
    之前因为导入包不好导致好多问题,比如加载不了dispatcher
<properties>
        <spring.version>4.3.11.RELEASE</spring.version>
    </properties>

    <!-- springmvc dependencies -->
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>

         <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring.version}</version>
        </dependency>

    </dependencies>

创建Controller

在src/main/java/路径下创建一个controller包,在这个包中创建Controller

import org.springframework.stereotype.Controller;  
import org.springframework.ui.ModelMap;  
import org.springframework.web.bind.annotation.RequestMapping;  
import org.springframework.web.bind.annotation.RequestMethod;  

//注解标明当前class是一个Controller,并根据映射将不同的url将http请求映射到对应的处理方法中
@Controller     
@RequestMapping("/")   //无参数注解  对所有的请求拦截映射
public class HelloWorldController {  

   @RequestMapping(method = RequestMethod.GET)
   //ModelMap是Map实现它提供一种 从request或者session中设置 或者获取属性的方式  
   public String sayHello(ModelMap model) {  
       model.addAttribute("greeting", "Hello World from Spring 4 MVC");
       //返回值十分重要,配合前缀后缀指定视图文件名
       return "helloworld";  
   }  

   //带参数注解,value属性指定拦截的url
   @RequestMapping(value="/helloagain", method = RequestMethod.GET)  
   public String sayHelloAgain(ModelMap model) {  
       model.addAttribute("greeting", "Hello World Again, from Spring 4 MVC");  
       return "helloworld";  
   }  

创建View

在WEB-INF路径下创建一个views文件夹用于存放视图文件,文件名为helloworld.jsp
helloworld是与controller中的返回值对应的,这样从控制层就可以路由到对应的视图资源

<%@ 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 World Test</title>
</head>
<body>
    <!--输出Ctroller模型中的属性值-->
    Greeting : ${greeting}  
</body>
</html>

配置springMVC

  • 编辑web.xml:标准的JavaEE Servlet配置,声明DisPatcherServlet和路径映射
    经过这个xml文件的配置,所有的/路径都会被名为dispatcher的DispatcherServlet处理

  • init-param.这个参数,使得可以在项目的任何位置存放配置文件也可以随意命名,而且甚至都可以配置多个配置文件。如果没有这个参数就不得不以[dispatcher ]-servlet.xml 形式命名此配置文件

<web-app id = “WebApp_IDversion = “2.4xmlns = “http://java.sun.com/xml/ns/j2eexmlnsxsi = “http://www.w3.org/2001/XMLSchema-instancexsischemaLocation =“http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd“ >  

 <display-name>Spring4MVCHelloWorldDemo Web应用程序</ display-name>  

 <servlet>  
    <servlet-name>dispatcher</servlet-name >  
    <servlet-class>  
        org.springframework.web.servlet.DispatcherServlet  
    </servlet-class>  
    <init-param>  
        <param-name> contextConfigLocation </param-name>  
        <param-value>/WEB-INF/springmvc-servlet.xml</param-value>  
    </init-param>  
    <load-on-startup>1</load-on-startup>  
 </servlet>  

 <servlet-mapping>  
    <servlet-name>dispatcher</servlet-name>  
    <url-pattern>/</url-pattern>  
 </servlet-mapping>     
</ web-app >  

除此以外,还可能会配置一些使用的bean。每一个Dispatcher都有自己的上下文对象WebApplicationContext,而且有继承了来着(Root)WebApplicationContext中的所有bean。特殊情况,当只需要一个Dispatcher时,只配置一个rootContext亦可。
Dispatcher内部结构

  • 写好web.xml后,需要在相同路径下创建一个 [DispatcherName]-servlet.xml 文件用于Dispatcher初始化,其中定义所有springmvc的组件(比如beans)
<beans xmlns = “http://www.springframework.org/schema/beansxmlnscontext = “http://www.springframework.org/schema/contextxmlnsmvc = “http://www.springframework.org/schema/mvcxmlnsxsi = “http://www.w3.org/2001/XMLSchema-instancexsischemaLocation =“http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd  
    http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd  
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd“>  

    <!-- base-package指明在当前路径下搜索controller-->
    <!-- mvc声明view resolver,用于controller相应正确视图资源-->
    <context:component-scan base-package="controller"/>
    <mvc:annotation-driven />   

    <bean class = “org.springframework.web.servlet.view.InternalResourceViewResolver”>
        <!--声明前缀-->
        <property name=“prefix”>   
            <value>/WEB-INF/views/</value>  
        </property>  
        <!--声明后缀-->
        <property name=“suffix”>   
            <value>.jsp</value>  
        </property>  
    </bean>  

</beans>  

完成配置发布到Tomcat

创建过程中问题

  • Maven导入jar包有问题,报错信息为Spring-beans包过大无法解压

    解决办法:根据eclipse的problems面板报错信息锁定问题发生位置,查看build path中的路径没有错误,于是在Maven本地仓库中删除出错包再重新下载,Update Project问题解决

  • 表面上一切正常并不一定没有问题,时常查看日志或者console输出可以及时发现问题。 比如Tomcat启动起来,仍要查看console是否有报错。

  • 注意使用的jar包版本与程序中的类和方法是否匹配。可能会因为两者之间的差异而报错。

  • 注意XXX-servlet.xml中命名空间十分重要,决定了标签是否可用。

  • Controller的返回值一定要与预计的view层文件相对应,否则将会无法正确路由。

猜你喜欢

转载自blog.csdn.net/baidu_22153679/article/details/77961623