SSM3.3【Spring:SpringMVC组件解析】

SpringMVC的执行流程(组件角度)

 

 

 SpringMVC的组件解析

 

 

 SpringMVC的注解解析

复制代码
 1 package com.haifei.controller;
 2 
 3 import org.springframework.stereotype.Controller;
 4 import org.springframework.web.bind.annotation.RequestMapping;
 5 import org.springframework.web.bind.annotation.RequestMethod;
 6 
 7 
 8 @Controller
 9 @RequestMapping("user") //若注解中只有一个属性,且该属性是value,则可以省略不写value,直接写其值即可
10 public class UserController1 {
11 
12 //    @RequestMapping(value = "/save") //请求映射地址http://localhost:8080/ssm3/user/save
13 //    @RequestMapping(value = "/save", method = RequestMethod.POST) //配置请求方式后,只有post才能访问到该方法
14     @RequestMapping(value = "/save", method = RequestMethod.GET, params = {"username"})
15     public String save() {
16         System.out.println("UserController save...");
17 //        return "success.jsp"; //设置@RequestMapping("user")时,会找不到网页报404,因为默认从http://localhost:8080/ssm3下找资源
18         return "/success.jsp"; //前加/表示从当前web应用(ssm3/user)下找资源,ok
19 
20         /*
21         未配置method = RequestMethod.POST之前
22 
23             访问:http://localhost:8080/ssm3/user/save
24             页面:success!
25             控制台:UserController save...
26 
27         浏览器地址栏访问默认get,设置为RequestMethod.GET或者不设置,可访问
28          */
29 
30         /*
31         配置method = RequestMethod.POST之后
32 
33             访问:http://localhost:8080/ssm3/user/save
34             页面:405 - Request method 'GET' not supported
35             控制台:[WARNING] Request method 'GET' not supported
36          */
37 
38         /*
39         配置params = {"username"}后
40 
41             访问:http://localhost:8080/ssm3/user/save
42             页面:400 - Parameter conditions "username" not met for actual request parameters
43 
44             访问:http://localhost:8080/ssm3/user/save?username=zhangsan
45                    或http://localhost:8080/ssm3/user/save?username
46             页面:success!
47             控制台:UserController save...
48          */
49     }
50 }
复制代码

复制代码
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4        xmlns:context="http://www.springframework.org/schema/context"
 5        xsi:schemaLocation="
 6         http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
 7         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
 8     <!--配置context命名空间及其约束-->
 9 
10 
11 
12     <!--配置Controller的组件扫描-->
13     <!--PS:之前在spring的核心配置文件applicationContext.xml中配置context:component-scan进行组件扫描,其实在此也是可以生效的;
14         但是,在结合了SpringMVC框架之后,习惯将组件扫描交给SpringMVC来做,其核心配置文件习惯上命名为spring-mvc.xml
15         分开的原则:单一职责原则
16         此处SringMVC仅负责扫描controller层,其他层应由spring来扫,业务要区分开-->
17     <!--<context:component-scan base-package="com.haifei.controller" />-->
18 
19 
20     <!--也可以这样设置-->
21     <context:component-scan base-package="com.haifei">
22         <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" />
23         <!--<context:exclude-filter type="" expression="" />-->
24     </context:component-scan>
25     <!--include-filter即包括那些-->
26     <!--exclude-filter即不包括那些-->
27     <!--上述设置意义:扫描注解(annotation)类型的,expression值为Controller注解的全包名(右键 copy reference),即只扫描Controller这个注解-->
28 
29 </beans>
复制代码

SpringMVC的XML配置解析

 查看springMVC中视图解析器(ViewResolver)的源码

 

复制代码
 1 package com.haifei.controller;
 2 
 3 import org.springframework.stereotype.Controller;
 4 import org.springframework.web.bind.annotation.RequestMapping;
 5 import org.springframework.web.bind.annotation.RequestMethod;
 6 
 7 @Controller
 8 @RequestMapping("user2")
 9 public class UserController2 {
10 
11     @RequestMapping("/save")
12     public String save() {
13         System.out.println("UserController save...");
14 
15 //        return "/success.jsp";
16 //        return "forward:/success.jsp"; //上行=本行,实质为转发(默认),springMVC帮忙封装了,可以省略forward:
17         return "redirect:/success.jsp"; //指定为重定向
18     }
19 
20     /*
21     return "/success.jsp"; 或 return "forward:/success.jsp";
22     地址栏访问http://localhost:8080/ssm3/user2/save
23     回车后地址栏不变
24 
25     页面:success!
26     控制台:UserController save...
27      */
28 
29     /*
30     return "redirect:/success.jsp";
31     地址栏访问http://localhost:8080/ssm3/user2/save
32     回车后地址栏变为http://localhost:8080/ssm3/success.jsp
33 
34     页面:success!
35     控制台:UserController save...
36      */
37 }
复制代码

复制代码
 1 spring-mvc.xml
 2 
 3 +
 4 
 5 
 6 <!--配置内部资源视图解析器-->
 7     <bean id="myViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
 8         <property name="prefix" value="/jsp/"></property>  <!--自定义前缀,默认视图根路径为webapp文件夹-->
 9         <property name="suffix" value=".jsp"></property>   <!--自定义后缀-->
10     </bean>
复制代码
复制代码
 1 <%--
 2   Created by IntelliJ IDEA.
 3   User: yubaby
 4   Date: 2021/7/16
 5   Time: 13:33
 6   To change this template use File | Settings | File Templates.
 7 --%>
 8 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
 9 <html>
10 <head>
11     <title>jsp/success.jsp</title>
12 </head>
13 <body>
14     <h1>jsp/success.jsp</h1>
15 </body>
16 </html>
复制代码

复制代码
 1 package com.haifei.controller;
 2 
 3 import org.springframework.stereotype.Controller;
 4 import org.springframework.web.bind.annotation.RequestMapping;
 5 import org.springframework.web.bind.annotation.RequestMethod;
 6 
 7 @Controller
 8 @RequestMapping("user3")
 9 public class UserController3 {
10 
11     @RequestMapping("/save")
12     public String save() {
13         System.out.println("UserController save...");
14 //        return "/success.jsp";
15 //        return "forward:/success.jsp"; //上行=本行,实质为转发(默认),springMVC帮忙封装了,可以省略forward:
16 //        return "redirect:/success.jsp"; //指定为重定向
17 
18 //        return "/jsp/success.jsp";
19         return "success"; //在自定义配置内部资源视图解析器后,该行=上行
20         /*
21         注意:
22             如果直接使用视图解析器的配置开发,那么必须保证视图解析器前缀目录下面有对应的页面文件才能跳转,否则报错
23             默认页面跳转也只能使用请求转发跳转,不能使用重定向
24          */
25     }
26 }
复制代码

 

posted @   yub4by  阅读(58)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示