SpringMVC
2022-11-18 08:49:16 0 举报
AI智能生成
SpringMVC知识点
作者其他创作
大纲/内容
入门概述
是什么
一种轻量级的、基于MVC的Web应用框架,偏前端而不是业务逻辑层
springmvc在spring体系中的定位
能干嘛
天生与Spring框架集成(如IoC容器、AOP等)
支持Restful风格
进行更简洁的Web层的开发
支持灵活的URL到页面控制器的映射
非常容易与其他视图技术集成,如Velocity、FreeMarker等等,
因为模型数据不放在特定的API里,而是放在一个Model里(Map数据结构实现,因此很容易被其他框架使用)
非常灵活的数据验证、格式化和数据绑定机制,能使用任何对象进行数据绑定,不必实现特定框架的API
更加简单、强大的异常处理
对静态资源的支持
支持灵活的本地化、主题等解析
。。。。。。
去哪下
spring4的jar包:
招聘看看
怎么玩
将web层进行了职责解耦,也就和struts2一样,请用请求-响应模型
常用主要组件:
DispatcherServlet:前端控制器
Controller:处理器/页面控制器,做的是MVC中的C的事情,但控制逻辑转移到前端控制器了,用于对请求进行处理;
HandlerMapping:请求映射到处理器,找谁来处理,如果映射成功返回一个HandlerExecutionChain对象
(包含一个Handler处理器(页面控制器)对象、多个HandlerInterceptor拦截器)对象
HandlerAdapter:把处理器包装为适配器,用来支持多种类型的处理器
ViewResolver:视图解析器,找谁来处理返回的页面。把逻辑视图名解析为具体的View,
通过这种策略模式,很容易更换其他视图技术;如InternalResourceViewResolver将逻辑视图名映射为jsp视图
LocalResolver:本地化、国际化
MultipartResolver:文件上传解析器
HandlerExceptionResolver:异常处理器
。。。。。。
永远的HelloWorld
新建JavaWeb工程并添加jar包
建工程+添jar包+改配置
配置web.xml文件添加Springmvc能够正常工作的Servlet: /
web.xml文件中Alt+/ dispatcherServlet
WEB-INF下新建springmvc配置文件,springDispatcherServlet-servlet.xml
配置springDispatcherServlet-servlet.xml文件
HelloWorld
index.jsp提交访问地址
HelloworldController接受并映射处理,返回结果页面
ok.jsp结果页面展现
易错点
访问路径错误
方法名上的路径错误
类名上和方法上的RequestMapping的使用配合
HellWorld深度解析
springmvc.xml配置文件的另一种形式
注解、模型数据与数据绑定
@RequestMapping
在哪几个位置
就近?
协作?
常用方法:method=RequestMethod.GET/method=RequestMethod.POST
RequestMapping中限定请求参数映射:params
RequestMapping中限定请求头映射:headers
URL路径映射
HTTP协议查看
普通URL映射
Ant风格URL映射
? 匹配一个字符
* 匹配零个或多个字符
** 匹配零个或多个路径
@PathVariable占位符URL映射
@RequestMapping(value="/users/{userId}")
@RequestMapping(value=“/users/{userId}/create”)
@RequestMapping(value="/users/{userId}/topics/{topicId}")
@PathVariable可以提取URI模板模式中的{×××}中的×××变量。
REST风格
是什么
增-POST
method=RequestMethod.POST
删-DELETE
method=RequestMethod.DELETE
改-PUT
method=RequestMethod.PUT
查-GET
method=RequestMethod.GET
注意
Restful适配
web.xml里配置过滤器
HiddenHttpMethodFilter
_method的隐藏域
Delete
Put
HiddenHttpMethodFilter-debug
映射请求参数
@RequestParam
普通
带3属性
value
required
defaultValue
多个值
@PathVariable,见之前复习一下
@RequestHeader,获得请求头的值
@CookieValue
POJO对象作为入参
使用Servlet的原生API作为参数绑定
HttpServletRequest/HttpServletResponse
debug
结论
换为Writer介绍一下
处理模型数据
ModelAndView
案例见 public ModelAndView testModelAndView()
debug
结论
Map+Model+ModelMap
接口:java.util.Map
接口:org.springframework.ui.Model
类: org.springframework.ui.ModelMap
结论
BindingAwareModelMap
你在工作中选择使用哪一个?
@SessionAttributes
该注解只能放在类上面
案例:public String testSessionAttributes(Map m1)
value
type
代码
@ModelAttribute(模拟form表单提交修改)
可能出现异常:Session attribute 'user' required - not found in session
案例,模拟提交不修改无password的form表单
debug
HandlerMethodInvoker--->resolveHandlerArguments
HandlerMethodInvoker--->resolveModelAttribute方法
结论
视图及视图解析器
概述
1 都统一变为ModelAndView,见PPT
2debug看看当前我们在用的是什么view ,出厂设置
3 查看View接口并讲解
JSTLView
看看添加了jstl和stand的jar包的“化学”反应
i18n.properties
i18n_zh_CN.properties
i18n_en_US.properties
结果页面(ok.jsp)添加标签
修改springmvc.xml配置下面的选项:
ResourceBundleMessageSource
运行并修改IE的语言设置项看效果
mvc:view-controller标签
穿越火线
在不需要Controller处理request的情况,转向到设置的View
交给相应的视图解析器直接解析为视图
再看看之前的配置如何?
如何破
mvc:annotation-driven
自定义视图
新建专门的view包:com.atguigu.springmvc.views
编写一个实现了View接口的实现类
BeanNameViewResolver配置进springmvc配置文件,顺带讲解源代码(顺序+bean)
查看BeanNameViewResolver的order顺序(private int order = Integer.MAX_VALUE;),
编写自己的order值,order值越小表示优先级越高
测试,找到自己的helloView
请求转发+重定向
CRUD小例子
springmvc表单标签
处理静态资源
环境准备
建工程+添jar包+改web
配置web.xml
HiddenHttpMethodFilter,RESTFUL风格配置post提交处理put/delete
dispatcherServlet-servlet.xml配置文件
WEB-INF目录下新建springdispatcherServlet-servlet.xml
WEB-INF目录下新建views文件夹
拷贝dao+entity
查询
新增
Neither BindingResult nor plain target object for bean name 'command' available as request attribute
报错原因
解决方法:new entity作为承载bean
form标签添加同名实体
常见错误代码
删除
delete是超链接,换成jquery处理,
jquery-1.9.1.min.js静态资源导入
前台页面的form表单提交hidden,
点取得多个class和单独id取得
修改
有ID的是修改,没有ID的是新增
@ModelAttribute解决lastName不能修改的问题
0 条评论
下一页