SpringMVC 学习日记
Posted ans20xx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringMVC 学习日记相关的知识,希望对你有一定的参考价值。
SpringMVC 概述
Hadoop 弄炸了,再来学学 JAVAWEB 缓缓
SpringMVC 是什么
SpringMVC:是基于 spring 的一个框架,实际上就是 Spring 的一个模块,专门做 Web 开发的,可以理解为 Servlet 的一个升级。
Web 开发底层是 Servlet,框架是在 Servlet 基础长增加一些功能,让你做 Web 开发更方便。
SpringMVC 就是 Spring。Spring 是一个容器,ioc 能管理对象,使用
SpringMVC 能够创建对象,放入容器中(Spring MVC 容器),SpringMVC 容器中放的是控制器对象。
我们要做的就是使用 Controller 创建控制器对象,把对象放入到 springmvc 容器中,把创建的对象作为控制器使用。
这个控制器对象能接受用户的请求,显示处理结果,就当做是一个 Servlet 使用。
使用 @Controller 注解创建的是一个普通的类的对象,不是 Servlet,SpringMVC 赋予了控制器对象一些额外的功能。
Web 开发底层是 Servlet,SpringMVC 中有一个对象是 Servlet: DispatherServlet
DispatherServlet:负责接受用户的所有请求,用户把请求给了 DispatherServlet,之后 DispatherServlet 把请求转发给我们的 Controller 对象,最后是 Controller 对象来处理。
index.jsp -> DispatherServlet(Servlet) -> 转发,分配给 -> Controller 对象 (@Controller 注解创建的对象)
第一个 SpringMVC 程序
创建一个新工程
在这个新工程下创建一个 Maven 模块
在 pom.xml 下添加所需要的依赖
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!-- servlet 依赖 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!-- springmvc 依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
</dependencies>
添加编译插件
<build>
<plugins>
<!-- 编码和编译和JDK版本 -->
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
更改 web.xml 的版本
之后再重命名回 web.xml
发布项目到 tomcat
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">
<!-- 声明,注册 springmvc 的核心对象 DispatcherServlet
需要在 tomcat 服务器启动后,创建 DispatcherServlet 对象的实例
因为 DispatcherServlet 在他的创建过程中,会同时创建 springmvc 容器对象
读取 springmvc 的配置文件,把这个配置文件中的对象都创建好,当用户发起请求时
就可以直接使用对象了
Servlet 初始化会执行 init() 方法,DispatcherServlet 在 init() 中 {
// 创建容器,读取配置文件
WebApplicationContext ctx = new ClassPathXmlApplication("spingmvc.xml");
// 把容器对象放入到 ServletContext 中
getServletContext().setAttribute()
}
启动 tomcat 报错:读取这个文件 /WEB-INF/springmvc-servlet.xml
springmvc 创建容器时,读取的配置文件默认是/WEB-INF/<servlet-name>-servlet.xml
-->
<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 启动后创建 Servlet 对象
load-on-start:表示 tomcat 启动后创建对象的顺序
它的值是一个整数,数值越小,tomcat创建对象的时间越早
-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>myweb</servlet-name>
<!--
使用框架时,url-pattern 可以使用两种值
1、使用扩展名的方式:语法 *.xxx, xxx 是自定义的扩展名,常用扩展名 *.do *.action *.mvc 等
http://localhost:8080/myweb/some.do
2、使用斜杠 "/"
-->
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>
创建 springmvc 配置文件
在 resources 文件夹下创建 springmvc 配置文件
项目结构
创建控制类
编写 index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<p>第一个spingmvc项目</p>
<p><a href="some.do">发起some.do请求</a> </p>
</body>
</html>
控制类
package com.an.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
/**
* @Controller:创建处理器对象,对象放在 springmvc 容器
*
* 位置:在类的上面
*
* 和 Spring 讲的 @Service ,@Componet
*/
@Controller
public class MyController {
/*
处理用户提交的请求,springmvc 中使用方法来处理
方法是自定义的,可以有多种返回值,多种参数,方法自定义名称
*/
/**
* 准备使用 doSome 方法来处理 some.do 的请求
* @RequestMapping 请求映射,作用是把一个请求地址和一个方法绑定在一起
* 一个请求指定一个方法处理
* 属性:1、value 是一个 String,表示请求的 url 地址的(some.do)
* value 值必须是惟一的,不能重复。在使用时,推荐地址以 "/"
*
* 位置:1、在方法上面,常用的
* 2、在类的上面
*
* 说明:使用 RequestMapping 修饰的方法叫做处理器方法或者控制器方法
* 使用 @RequestMapping 修饰的方法可以处理请求的,类似 Servlet 中的 doGet, doPost
* 返回值:ModelAndView 表示本次请求的处理结果
* Model:数据,请求处理完成后,要显示给用户的数据
* View:视图,比如 jsp 等等
*/
@RequestMapping(value="/some.do")
public ModelAndView doSome() { // doGet() -> service 请求处理
// 处理some.do请求了。相当于 Service 调用处理完成了
ModelAndView mv = new ModelAndView();
// 添加数据,框架在请求最后把数据放入到 request 作用域
mv.addObject("msg","欢迎使用mvc");
mv.addObject("fun","执行的是doSome方法");
// 指定视图,指定视图的完整路径
// 框架对视图执行的 forward 操作,request.getRequestDispatcher("/show.jsp").foward(...);
mv.setViewName("/show.jsp");
// 返回 mv
return mv;
}
}
创建 show.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h3>show.jsp从request作用域获取数据</h3> <br />
<h3>msg:数据${msg}</h3> <br />
<h3>fun:数据${fun}</h3>
</body>
</html>
开启组件扫描器
springmvc.xml
<?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.an.controller" />
</beans>
项目执行结果
以上是关于SpringMVC 学习日记的主要内容,如果未能解决你的问题,请参考以下文章