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 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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 让容器管理更轻松!