1、modelAndView.setViewName(viewName);modelAndView.addObject(需要放到 model 中的属性名称,对应的属性值,它是一个对象);return modelAndView;,控制器Controller,1、使用 RequestParam 绑定 HttpServletRequest 请求参数到控制器方法参数2、使用 CookieValue 绑定 cookie 的值到 Controller 方法参数3、使用 RequestHeader 注解绑定 HttpServletRequest 头信息到 Controller 方法参数,控制器Controlle
2、r,RequestMapping(value=testParams,params=param1=value1,param2,!param3)public String testParams()System.out.println(test Params.);return testParams;,RequestMapping(value=testMethod,method=RequestMethod.GET,RequestMethod.DELETE)public String testMethod()return method;,支持参数,(1)HttpServlet 对象,主要包括HttpSe
3、rvletRequest、HttpServletResponse 和HttpSession 对象(2)Spring 自己的WebRequest 对象。使用该对象可以访问到存放在HttpServletRequest 和HttpSession 中的属性值。(3)InputStream、OutputStream、Reader 和Writer(4)使用PathVariable、RequestParam、CookieValue 和RequestHeader 标记的参数。(5)使用ModelAttribute 标记的参数。(6)java.util.Map、Spring 封装的Model 和ModelMap
4、。(7)实体类。可以用来接收上传的参数。(8)Spring 封装的MultipartFile。用来接收上传文件的。(9)Spring 封装的Errors 和BindingResult 对象,支持返回类型,(1)一个包含模型和视图的ModelAndView 对象。(2)一个模型对象,这主要包括Spring 封装好的Model 和ModelMap,以及java.util.Map。(3)一个View 对象。这个时候如果在渲染视图的过程中模型的话就可以给处理器方法定义一个模型参数,然后在方法体里面往模型中添加值。(4)一个String 字符串。(5)返回值是void。(6)如果处理器方法被注解Resp
5、onseBody 标记,类型转换器,Controller RequestMapping(/myTest)public class MyController InitBinder public void dataBinder(WebDataBinder binder)DateFormat dateFormat=new SimpleDateFormat(yyyyMMdd);PropertyEditor propertyEditor=new CustomDateEditor(dateFormat,true);binder.registerCustomEditor(Date.class,propert
6、yEditor);RequestMapping(dataBinder/date)public void testDate(PathVariable Date date,Writer writer)throws IOException writer.write(String.valueOf(date.getTime();,数据校验,对于任何一个应用而言在客户端做的数据有效性验证都不是安全有效的,这时候就要求我们在开发的时候在服务端也对数据的有效性进行验证。SpringMVC自身对数据在服务端的校验有一个比较好的支持,它能将我们提交到服务端的数据按照我们事先的约定进行数据有效性验证,对于不合格的数
7、据信息SpringMVC会把它保存在错误对象中,这些错误信息我们也可以通过SpringMVC提供的标签在前端JSP页面上进行展示。在SpringMVC中提供了一个Validator接口,我们可以通过该接口来定义我们自己对实体对象的验证。,视图解析器,SpringMVC用于处理视图最重要的两个接口是ViewResolver和View。ViewResolver的主要作用是把一个逻辑上的视图名称解析为一个真正的视图,SpringMVC中用于把View对象呈现给客户端的是View对象本身,而ViewResolver只是把逻辑视图名称解析为对象的View对象。View接口的主要作用是用于处理视图,然后返
8、回给客户端。,拦截器,SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理。比如通过它来进行权限验证,或者是来判断用户是否登陆,或者是像12306 那样子判断当前时间是否是购票时间。,上传文件,CommonsMultipartResolver允许设置的属性有:defaultEncoding:表示用来解析request请求的默认编码格式,当没有指定的时候根据Servlet规范会使用默认值ISO-8859-1。当request自己指明了它的编码格式的时候就会忽略这里指定的defaultEncoding。uploadTempDi
9、r:设置上传文件时的临时目录,默认是Servlet容器的临时目录。maxUploadSize:设置允许上传的最大文件大小,以字节为单位计算。当设为-1时表示无限制,默认是-1。maxInMemorySize:设置在文件上传时允许写到内存中的最大值,以字节为单位计算,默认是10240。,异常处理,springMVC提供的异常处理主要有两种方式:一种是直接实现自己的HandlerExceptionResolver,当然这也包括使用Spring已经为我们提供好的SimpleMappingExceptionResolver和DefaultHandlerExceptionResolver。另一种是使用注
10、解的方式实现一个专门用于处理异常的ControllerExceptionHandler。,MyBatis,工作原理,(1)加载配置并初始化(2)接收调用请求处理过程:将请求传递给下层的请求处理层进行处理。(3)处理操作请求 触发条件:API接口层传递请求过来处理过程:(A)根据SQL的ID查找对应的MappedStatement对象。(B)根据传入参数对象解析MappedStatement对象,得到最终要执行的SQL和执行传入参数。(C)获取数据库连接,根据得到的最终SQL语句和执行传入参数到数据库执行,并得到执行结果。(D)根据MappedStatement对象中的结果映射配置对得到的执行结
11、果进行转换处理,并得到最终的处理结果。(E)释放连接资源。(4)返回处理结果将最终的处理结果返回。,功能结构,功能结构,API接口层:提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。数据处理层:负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。它主要的目的是根据调用的请求完成一次数据库操作。基础支撑层:负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是共用的东西,将他们抽取出来作为最基础的组件。为上层的数据处理层提供最基础的支撑。,框架结构,sqlMapConfig.xml
12、:(是mybatis的全局配置文件,名称不固定的)配置了数据源、事务等mybatis运行环境mapper.xml:配置sql语句SqlSessionFactory:(会话工厂),根据配置文件创建工厂作用:创建SqlSessionSqlSession(会话),是一个接口,面向用户(程序员)的接口作用:操作数据库(发出sql增、删、改、查)Executor(执行器),是一个接口(基本执行器、缓存执行器)作用:SqlSession内部通过执行器操作数据库mapped statement(底层封装对象)作用:对操作数据库存储封装,包括 sql语句,输入参数、输出结果类型。,动态sql,ifchoose
13、(when,otherwise)trimwheresetforeach,select*from t_blog where id in#key,#value,注意事项,示例1:执行SQL:Select*fromempwherename=#employeeName 参数:employeeName=Smith 解析后执行的SQL:Select*fromempwherename=?=Select*fromempwherename=Simith 执行SQL:Select*fromempwherename=$employeeName 参数:employeeName传入值为:Smith 解析后执行的SQL:Select*fromempwherename=Smith#会生成preparedStatement.预编译SQL语句,这样比较安全,防止SQL注入,而且传入的值是字符串类型$:相当
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1