搭建SpringMVC

本文介绍如何使用Maven和IntelliJ IDEA创建Spring MVC项目,包括配置pom.xml引入依赖、创建Controller处理请求、配置视图解析器及DispatcherServlet。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通过Maven创建项目

使用Intellij IDEA参考 https://www.cnblogs.com/shang-shang/p/7477607.html

  • 选择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_ID” 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>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/beans”   
    xmlns:context = “http://www.springframework.org/schema/context”  
    xmlns:mvc = “http://www.springframework.org/schema/mvc”  
    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-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层文件相对应,否则将会无法正确路由。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值