文章目录
1 SpringMVC简介
(1)传统的JavaWeb
(2)MVC
(3)SpringMVC
(4)SpringMVC
SpringMVC 也叫 Spring web mvc。是 Spring 框架的一部分,是在 Spring3.0 后发布的。
特点:
- 基于MVC架构
- 容易上手,简单
- 作为Spring的一部分,可以很容易与其他框架进行整合
- SpringMVC 强化注解的使用,在控制器,Service,Dao 都可以使用注解。方便灵活。
(使用
@Controller 创建处理器对象,
@Service 创建业务对象,
@Autowired 或者@Resource在控制器类中注入 Service,
Service 类中注入 Dao。)
(5)具体应用过程
2 第一个注解的 SpringMVC 程序
需求:用户在页面发起一个请求,请求交给SpringMVC的控制对象,并显示请求的处理结果。
2.1 中央调度器创建SpringMVC容器对象
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!--
启动tomcat报错,读取这个文件 /WEB-INF/springmvc-servlet.xml(/WEB-INF/myweb-servlet.xml)
springmvc创建容器对象时,读取的配置文件默认是 /WEB-INF/<servlet-name>-servlet.xml,
所以我们需要重新自定义
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
-->
<servlet>
<servlet-name>myWeb</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--自定义SpringMVC读取的配置文件的位置-->
<init-param>
<!--springMvc的配置文件的位置-->
<param-name>contextConfigLocation</param-name>
<!--指定自定义文件的位置-->
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<!--Tomcat启动后,创建对象
load-on-startup表示Tomcat启动后创建的顺序,
它的值是整数,数字大于等于0,数字越小,创建对象的时间越早。
-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>myWeb</servlet-name>
<!--
使用框架的时候,url-pattern可以使用两种值
1.使用扩展名的方式,语法 *.xxxx, xxxx是自定义的扩展名。常用的方式 *.dao, *.action, *.mvc等等
http://localhost:8080/myweb/some.do
http://localhost:8080/myweb/other.do
2.使用斜杠 "/"
-->
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>
2.2 创建发起请求页面
<%--
Created by IntelliJ IDEA.
User: 北极星
Date: 2021/9/16
Time: 23:00
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>index</title>
</head>
<body>
<p>SpringMVC的第一个项目</p>
<a href="some.do">发起some请求</a>
</body>
</html>
2.3创建控制类
package com.sdnu.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
/**
* @Controller:创建处理器对象,对象放在springmvc容器中。
* 位置:在类的上面,和spring中的@Service, @Component
*/
@Controller
public class MyController {
/*
处理用户提交的请求,springmvc中是使用方法处理的。
方法是自定义的,可以有多种返回值,多种参数,方法名称自定义
*/
/**
* 准备使用dosome方法处理some.do请求
* @RequestMapping: 请求映射,作用是把一个请求地址和一个方法绑定在一起。一个请求指定一个方法处理。
* 属性:1.value 是一个String,表示请求的url地址(some.do)。value的值必须是唯一的,不能重复。
* 位置:1.在方法的上面,常用的。
* 2.在类的上面。
* 说明:使用@RequestMapping修饰的方法叫做处理器方法或者控制器方法。
* 使用@RequestMapping修饰的方法可以处理请求,类似Servlet中的doGet, doPost
* @Return ModelAndView 表示本次请求的处理结果
* Model: 数据,请求处理完成后,要显示给用户的数据
* View: 视图,比如jsp等等。
*/
@RequestMapping(value="/some.do")
public ModelAndView doSome(){
//处理some.do请求。相当于service调用处理完成了。
ModelAndView mv = new ModelAndView();
//添加数据,框架在请求后把数据放入到request作用域中
//request.setAttribute("msg", "欢迎使用springmvc做web开发");
mv.addObject("school", "深圳大学");
mv.addObject("age", "21");
//指定视图,指定视图的完整路径
//框架对视图执行的forward操作,request.getRequestDispather("/show.jsp").forward(...)
mv.setViewName("/show.jsp");
//返回mv
return mv;
}
}
2.4 结果处理页面
<%--
Created by IntelliJ IDEA.
User: 北极星
Date: 2021/9/16
Time: 23:00
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>index</title>
</head>
<body>
<p>SpringMVC的第一个项目</p>
<a href="some.do">发起some请求</a>
</body>
</html>
2.5 SpringMVC的配置文件
<?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 https://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="com.sdnu.controller"/>
</beans>
2.6 SpringMVC的请求过程
2.7 SpringMVC的源码请求过程
2.8 定义目标页面
我们发现一个问题,我们在浏览器的地址栏中输入http://localhost:8080/SpringMVC1/some.do
可以直接访问some.do,这不是我们想要的,我们想要的是从Jsp页面中访问some.do,所以我们需要修改目标页面,我们只需将我们的页面放到WEB-INF之下即可。
2.9 配置视图解析器
我们发现有这样的一个问题,当我们的页面有很多个的时候,我们在中央调度器中会写许多如下的代码
代码中的路径前面都是相同的,而我们使用框架的目的是简化我们的操作,所以我们能不能使用框架使得我们的操作变得简单呢。
作者:Beyong
出处:Beyong博客
github地址:https://github.com/beyong2019
本博客中未标明转载的文章归作者Beyong有,欢迎转载,但未经作者同意必须保留此段声明,且在文章明显位置给出原文连接,否则保留追究法律责任的权利。