JavaWeb-14-SpringMVC的简介和Helloword

    技术2026-02-27  5

    Table of Contents

    一:springMVC简介

    1:是Spring实现web模块的;简化web开发的

    2:传统的MVC

    3:springMVC下的MVC

     二:springMVC的HelloWorld

    1:普通web模式下

    1.1:选择spring模块

    1.2:选择项目位置 

    1.3:系统自动下载jar包 

    1.4:加入jar包依赖

    1.5:配置tomcat(也可以不配置,一会自己加)

    1.6:修改web.XML

     1.7:springMVC的配置

    1.8:写一个controller 

    1.9:部署项目

    2:使用maven工具

    2.1:创建项目

    2.2:添加依赖

    2.3:添加框架支持

    2.4:修改web.XML

     2.5:springMVC的配置

    2.6:写一个controller 

    2.7:部署项目

    3:总结springmvc的HelloWord

    1:导包:

    2:写配置:

     1)web.xml可能要写什么

    2):框架自身可能要写什么(springmvc的前端控制器的配置)

    3: 测试

    4:helloworld原理和细节

    4.1:helloword流程

    4.2:一个方法一个请求

    5:RequestMapping属性详解

    5.1:method:限定请求方式、

    5.2:params:规定请求参数

    5.3:规定请求头;也和params一样能写简单的表达式

    5.4:consumes:只接受内容类型是哪种的请求,规定请求头中的Content-Type

    5.5:produces:告诉浏览器返回的内容类型是什么,给响应头中加上Content-Type:text/html;charset=utf-8

    6:@RequestMapping模糊匹配功能

    7:@PathVariable 路径占位符


    一:springMVC简介

    1:是Spring实现web模块的;简化web开发的

     

    SpringMVC==Spring的web模块;

    2:传统的MVC

    3:springMVC下的MVC

     二:springMVC的HelloWorld

    1:普通web模式下

    1.1:选择spring模块

    1.2:选择项目位置 

    1.3:系统自动下载jar包 

    1.4:加入jar包依赖

    1.5:配置tomcat(也可以不配置,一会自己加)

    1.6:修改web.XML

     1.7:springMVC的配置

    在dispatcher-servlet.xml配置spring mvc相关的。如:扫描的基包、页面访问位置及后缀。

    如果你的取得名字是HelloMVC,那么与其对应的servlet名字必须是:HelloMVC-servlet.xml。格式是:自定义名称-servlet.xml

    HelloMVC-servlet内容如下:

    需要说明的是:先引入context及mvc之后,下面就可以联想出来了。

    1.8:写一个controller 

    1.9:部署项目

     启动:

    注:如果有的报错:记得修复Artifacts(目的就是将lib下的jar包,加入web-info下)

    2:使用maven工具

    2.1:创建项目

    2.2:添加依赖

    我们打开其中的pom.xml,添加我们的依赖。这里我把我的依赖全部放出来,复制到你的pom.xml的dependencies标签之间就可以了,pom文件中也会给你一个示例。

    我们今天做最简单的helloworld,只需要导入webmvc即可

    <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.2.6.RELEASE</version> </dependency> </dependencies>

    2.3:添加框架支持

    配置完pom.xml之后,我们在idea中要添加一下框架的支持。右击我们的项目文件夹,选择add framework support

    将下图中的Spring和Spring下的Spring MVC都勾上,之前配置pom.xml文件时,已经自动下载了spring相关文件,所以这里就直接用之前下载好的就可以了,OK。(注意:点了Add framework support之后,在下图中有可能会找不到Spring,解决办法在下图的下方  

    如果在Add framework support中找不到Spring,那是因为项目中可能已经存在Spring相关文件,但不一定是完善的。因此我们要将已经存在的Spring给删掉,重新添加,方法如下:

    点击File,选择Project Structure,(快捷键ctrl+shift+alt+s)选择Facets,就会看到有一个Spring啦,右击它,点删除就行啦,然后再回到上面第3步重新Add framework support,Spring就会出现啦。

     可以看到新增了两个xml文件,并且我也调整了一下包结构

     

    2.4:修改web.XML

     2.5:springMVC的配置

    在dispatcher-servlet.xml配置spring mvc相关的。如:扫描的基包、页面访问位置及后缀。

    如果你的取得名字是HelloMVC,那么与其对应的servlet名字必须是:HelloMVC-servlet.xml。格式是:自定义名称-servlet.xml

    HelloMVC-servlet内容如下:

    需要说明的是:先引入context及mvc之后,下面就可以联想出来了。

    2.6:写一个controller 

    2.7:部署项目

     启动:

    3:总结springmvc的HelloWord

    1:导包:

    commons-logging-1.1.3.jar

    spring-aop-4.0.0.RELEASE.jar

    spring-beans-4.0.0.RELEASE.jar

    spring-context-4.0.0.RELEASE.jar

    spring-core-4.0.0.RELEASE.jar

    spring-expression-4.0.0.RELEASE.jar

    spring-web-4.0.0.RELEASE.jar

    spring-webmvc-4.0.0.RELEASE.jar

    2:写配置:

     

     1)web.xml可能要写什么

              配置springmvc的前端控制器,指定springmvc配置文件位置

    <?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"> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <!--contextConfigLocation:spring本身的框架配置--> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/applicationContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!--在dispatcher-servlet.xml配置spring mvc相关的。如:扫描的基包、页面访问位置及后缀。 如果你的取得名字是HelloMVC,那么与其对应的servlet名字必须是:HelloMVC-servlet.xml。 格式是:自定义名称-servlet.xml--> <!--<init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param>--> <!-- servlet启动加载,servlet原本是第一次访问创建对象; load-on-startup:服务器启动的时候创建对象;值越小优先级越高,越先创建对象; --> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <!-- /*和/都是拦截所有请求; /:会拦截所有请求,但是不会拦截*.jsp;能保证jsp访问正常; /*的范围更大;还会拦截到*.jsp这些请求;一但拦截jsp页面就不能显示了; --> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>

    去掉注释就是这样:

    <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>

    2):框架自身可能要写什么(springmvc的前端控制器的配置)

    在dispatcher-servlet.xml配置spring mvc相关的。如:扫描的基包、页面访问位置及后缀。

    如果你在web.xml中取得名字是HelloMVC,那么与其对应的servlet名字必须是:HelloMVC-servlet.xml。 格式是:自定义名称-servlet.xml,这样就可以在web.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 http://www.springframework.org/schema/context/spring-context-4.0.xsd"> <!--扫描包--> <context:component-scan base-package="com.wkl"></context:component-scan> <!--指定视图解析器的前后缀--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver"> <property name="prefix" value="/WEB-INF/pages/"/> <property name="suffix" value=".jsp"/> </bean> </beans>

     

    3: 测试

    @Controller public class HelloController { @RequestMapping("/hello") public String hello(){ System.out.println("请求了。。。。。"); return "success"; } }

    4:helloworld原理和细节

    4.1:helloword流程

     

    *      1)、客户端点击链接会发送 http://localhost:8080/hello 请求

     *      2)、来到tomcat服务器;

     *      3)、SpringMVC的前端控制器收到所有请求;

     *      4)、来看请求地址和@RequestMapping标注的哪个匹配,来找到到底使用那个类的哪个方法来处理

     *      5)、前端控制器找到了目标处理器类和目标方法,直接利用返回执行目标方法;

     *      6)、方法执行完成以后会有一个返回值;SpringMVC认为这个返回值就是要去的页面地址

     *      7)、拿到方法返回值以后;用视图解析器进行拼串得到完整的页面地址;

     *      8)、拿到页面地址,前端控制器帮我们转发到页面;

    4.2:一个方法一个请求

     

    1:@RequestMapping("/hello")  *      就是告诉SpringMVC;这个方法用来处理什么请求;  *      这个/是可以省略,即使省略了,也是默认从当前项目下开始;  *      习惯加上比较好    /hello  /hello            /:拦截所有请求,不拦截jsp页面,*.jsp请求         /*:拦截所有请求,拦截jsp页面,*.jsp请求                     处理*.jsp是tomcat做的事;所有项目的小web.xml都是继承于大web.xml         DefaultServlet是Tomcat中处理静态资源的?             除过jsp,和servlet外剩下的都是静态资源;             index.html:静态资源,tomcat就会在服务器下找到这个资源并返回;             我们前端控制器的/禁用了tomcat服务器中的DefaultServlet                                      1)服务器的大web.xml中有一个DefaultServlet是url-pattern=/         2)我们的配置中前端控制器 url-pattern=/                 静态资源会来到DispatcherServlet(前端控制器)看那个方法的RequestMapping是这个index.html         3)为什么jsp又能访问;因为我们没有覆盖服务器中的JspServlet的配置         4) /*  直接就是拦截所有请求;我们写/;也是为了迎合后来Rest风格的URL地址  

    5:RequestMapping属性详解

    5.1:method:限定请求方式、

     

    HTTP协议中的所有请求方式:

         *          【GET】, HEAD, 【POST】, PUT, PATCH, DELETE, OPTIONS, TRACE

     

          method=RequestMethod.POST:只接受这种类型的请求,默认是什么都可以;

    5.2:params:规定请求参数

     

    params 和 headers支持简单的表达式:           

         *     param1: 表示请求必须包含名为 param1 的请求参数

         *          eg:params={"username"}:

         *              发送请求的时候必须带上一个名为username的参数;没带都会404

         *

         *      !param1: 表示请求不能包含名为 param1 的请求参数

         *          eg:params={"!username"}

         *              发送请求的时候必须不携带上一个名为username的参数;带了都会404

         *      param1 != value1: 表示请求包含名为 param1 的请求参数,但其值不能为 value1

         *          eg:params={"username!=123"}

         *              发送请求的时候;携带的username值必须不是123(不带username或者username不是123)

         *

         *      {“param1=value1”, “param2”}: 请求必须包含名为 param1 和param2 的两个请求参数,且 param1 参数的值必须为 value1

         *          eg:params={"username!=123","pwd","!age"}

         *              请求参数必须满足以上规则;

         *              请求的username不能是123,必须有pwd的值,不能有age

    5.3:规定请求头;也和params一样能写简单的表达式

     

    5.4:consumes:只接受内容类型是哪种的请求,规定请求头中的Content-Type

     

    5.5:produces:告诉浏览器返回的内容类型是什么,给响应头中加上Content-Type:text/html;charset=utf-8

     

    6:@RequestMapping模糊匹配功能

     

    URL地址可以写模糊的通配符:   ?:能替代任意一个字符   *:能替代任意多个字符,和一层路径   **:能替代多层路径     注: 模糊和精确多个匹配情况下,精确优先

    7:@PathVariable 路径占位符

    //路径上可以有占位符: 占位符 语法就是可以在任意路径的地方写一个{变量名} // /user/admin /user/leifengyang // 路径上的占位符只能占一层路径 @RequestMapping("/user/{id}") public String pathVariableTest(@PathVariable("id")String id){ System.out.println("路径上的占位符的值"+id); return "success"; }

     

     

     

     

     

     

     

     

     

     

     

     

     

    Processed: 0.009, SQL: 9