哔哩哔哩视频链接
笔记参考链接
可以理解为,springMVC就是spring,只不过是专门用于web开发的spring框架。能够使用spring的IOC和AOP,方便整合strtus,MyBatis,Hiberate,JPA等其他框架。
1、打开IDEA,选择“Create a new project”,选择"Empty Project",点击next,再下一步我们选择项目工作路径为“F:\follow DongLi learn SpringMVC”,这时项目自动命名,再点击Finish即可。
2、项目打开即进入Project Structure,左栏选择Modules,点上面的“+”号,选择“New Module”。
我们要做的是web应用,左侧选择“Maven”,勾选“Create from archetype”,找到“Maven-archetype-webapp”,点击next。
更改项目名,并存储到刚刚创立的文件夹中,并更改组id即GroupId为com.bjpowernode。
点击next,然后勾选第一个Override,点击Finish,然后点击OK即可。
创建成功,点击右下角"Auto Import”自动导入功能,创建成功后出现:
1、在main文件下右键新建Directory,新建java目录和resources目录。注意:选中java文件夹,右键“Mark Directory as”,选择“source Root”,选中的java文件夹变蓝了才行。
2、接下来修改pom.xml文件
(1)
(2)这里我们将jdk版本改成1.8的:
(3)这是加载单元测试:
(4)
3、接下来修改WEB-INF下面的web.xml文件
(1)我们可以看到自带的web.xml文件的dtd版本很低,那么怎么改呢?
点击右上角的“Project Structure”,点击web,点击右边的-号,删掉这个默认文件,再点击右边的+号,点击“web.xml”,这时弹出这个web.xml的文件名,改为1web.xml,并更改版本为4.0,点击OK。
然后我们要将这个1web.xml文件重命名为web.xml文件,这样就改好了。
(2)在里面声明一下注册springmvc的核心对象DispatcherServlet。然后在resource文件下右键新建文件,命名为springmvc.xml。
回到web.xml文件,自定义springmvc.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对象的实例呢?
因为在DispatcherServlet创建过程中,会同时创建springmvc容器对象,
读取springmvc的配置文件,把这个配置文件中的对象都配置好,
当用户发起请求时就可以直接使用对象了。
servlet的初始化会执行init()方法,DispatcherServlet在init()中{
//创建容器,读取配置文件
webApplicationContext ctx = new ClassPathXmlApplicationContext("springmvc.xml");
//把容器对象放入到ServletContext中
getServletContext().setAttribute(key,ctx);
}
-->
<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对象
数字表示启动后创建对象的顺序,数值越小,tomcat创建对象越早,要求大于等于0的整数
-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>myweb</servlet-name>
<!--
使用框架的时候,url-pattern可以使用两种值
1.使用扩展名方式,语法 *.xxxx , xxxx时自定义扩展名。常用的方式 *.do, *.action, *.mvc等等
http://localhost:8080/myweb/some.do
http://localhost:8080/myweb/other.do
2.使用斜杠"/"
-->
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>
4、创建一个发起请求的页面index.jsp
因为可能出现编码问题,所以我们先将原webapp下的index.jsp删除,新建一个jsp文件命名为index.jsp。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<p>第一个springmvc项目</p>
<p><a href="some.do">发起some.do的请求</a></p>
</body>
</html>
5、创建控制器类(处理器类)MyController.class
在java文件处右键新建Java class,命名为com.bjpowernode.controller.MyController。
package com.bjpowernode.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
/*
* @Controller:创建处理器对象,对象放在springmvc容器中
*
* 能处理请求的都是控制器(处理器):MyController能处理请求,
* 叫做后端控制器(back controller)
* */
@Controller
public class MyController {
/*
* 处理用户提交的请求,springmvc中是使用方法来处理的。
* 方法是自定义的,可以有多种返回值,多种参数,方法名称也可以自定义,比如下面自定义方法名为dosome()
* */
/*
* 准备使用doSome方法处理some.do请求。
* @RequestMapping:请求映射,作用是把一个请求地址和一个方法绑定在一起。
* 一个请求指定一个方法处理。
* 属性:1. value是一个String类型,表示请求的uri地址(这里是:some.do)
* value值是唯一的,不能重复
* 说明:使用@RequestMapping修饰的方法叫做处理器方法或者控制器方法
* 可以处理请求,类似servlet中的doGet,doPost
* */
/*
* 返回值 ModelAndView 表示本次请求的处理结果
* model:数据,请求处理完后,要显示给用户的数据
* view:视图,比如jsp等
* */
@RequestMapping(value="/some.do")
public ModelAndView doSome(){
//处理some.do请求,相当于service调用处理完成
ModelAndView mv = new ModelAndView();
//添加数据,框架在请求的最后把数据放入到request作用域
//request.setAttribute("msg","欢迎使用...");
mv.addObject("msg","欢迎使用springmvc做web开发");
mv.addObject("fun","执行的是doSome方法");
//指定视图,指定视图的完整路径
//框架对视图执行的forward操作,request.getRequestDispather("/show.jsp").forward(...)
mv.setViewName("/show.jsp");
return mv;
}
}
6、创建一个作为结果的jsp即show.jsp
在webapp文件夹下新建一个jsp文件,命名为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>
<h3>fun数据:${fun}</h3>
</body>
</html>
7、springmvc配置文件
前面使用了controller注解,那么就需要在resource文件夹下的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.bjpowernode.controller"/>
</beans>
8、发布项目
点击右上方“Add Configuration”,打开左边的“Templates”折叠板,找到"Tomcat Server",选择下面的“Local”。如果上方有黄色感叹号提醒,点击上面的“Create configuration”,命名为MyTomcat,取消“After launch”前面的勾选,并为Application server选择一个本地的Tomcat。
然后到“Deployment”菜单下,点击右边的+号,选择“Artif…”,找到“ch01 hello springmvc:war exploded”,点击OK。在下面的Application context把名字改短一点:
点击OK即可。
这时即可直接点击运行按钮发布程序了。
浏览器访问:http://localhost:80/ch01_hello_springmvc/(如果不知道访问路径是啥,单击上方的MyTomcat,选择“Edit Configuration”,看到上面的URL写的是啥就知道了)
跑起来后:
单击该超链接:
首先,扫描web.xml文件,根据servlet-mapping中的*do请求找到对应的servlet-name是myweb,再根据myweb找到相应的servlet(因为这两个的servlet-name相同),找到中央处理器DispatcherServlet,跟着这个找到下面的自定义文件springmvc.xml。根据springmvc.xml找到@controller注解从而找到MyControl类里面定义的doSome()方法,里面通过ModelAndServlet对消息进行处理并转发到show.jsp。