Java Web 开发从入门到实战 课件 第14章 Spring MVC框架基础_第1页
Java Web 开发从入门到实战 课件 第14章 Spring MVC框架基础_第2页
Java Web 开发从入门到实战 课件 第14章 Spring MVC框架基础_第3页
Java Web 开发从入门到实战 课件 第14章 Spring MVC框架基础_第4页
Java Web 开发从入门到实战 课件 第14章 Spring MVC框架基础_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第14章SpringMVC框架基础学习目的与要求本章重点讲解SpringMVC的工作原理、控制器、数据绑定以及数据库编程。通过本章的学习,了解Spring

MVC的工作原理,掌握Spring

MVC应用的开发步骤。《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

目录14.1SpringMVC的工作原理14.2SpringMVC的工作环境14.3基于注解的控制器14.4Spring的数据库编程14.5基于SpringMVC框架的注册与登录《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

14.1SpringMVC的工作原理SpringMVC框架主要由DispatcherServlet、处理器映射、控制器、视图解析器、视图组成,其工作原理,如图14.1所示。从图14.1可总结出Spring

MVC的工作流程如下:1.客户端请求提交到DispatcherServlet;2.由DispatcherServlet控制器寻找一个或多个HandlerMapping,找到处理请求的Controller;3.DispatcherServlet将请求提交到Controller;4.Controller调用业务逻辑处理后,返回ModelAndView;5.DispatcherServlet寻找一个或多个ViewResoler视图解析器,找到ModelAndView指定的视图;6.视图负责将结果显示到客户端。《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

14.1SpringMVC的工作原理图14.1中包含4个Spring

MVC接口:DispatcherServlet、HandlerMapping、Controller和ViewResoler。Spring

MVC所有的请求都经过DispatcherServlet来统一分发。DispatcherServlet将请求分发给Controller之前,需要借助于Spring

MVC提供的HandlerMapping定位到具体的Controller。HandlerMapping接口负责完成客户请求到Controller映射。Controller接口将处理用户请求,这和Java

Servlet扮演的角色是一致的。一旦Controller处理完用户请求,则返回ModelAndView对象给DispatcherServlet前端控制器,ModelAndView中包含了模型(Model)和视图(View)。从宏观角度考虑,DispatcherServlet是整个Web应用的控制器;从微观考虑,Controller是单个Http请求处理过程中的控制器,而ModelAndView是Http请求过程中返回的模型(Model)和视图(View)。ViewResolver接口(视图解析器)在Web应用中负责查找View对象,从而将相应结果渲染给客户。《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

目录14.1SpringMVC的工作原理14.2SpringMVC的工作环境14.3基于注解的控制器14.4Spring的数据库编程14.5基于SpringMVC框架的注册与登录《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

14.2SpringMVC的工作环境在第2章Java

Web开发环境的基础上,导入Spring

MVC的相关JAR包,即可开发Spring

MVC应用。《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

14.2.1Spring的下载使用Spring框架开发应用程序时,需要引用Spring框架自身的JAR包。Spring

Framework

6.0.0的JAR包可以从Maven

中央库获得。Spring的JAR包中,有四个基础包:spring-core-6.0.0.jar、spring-beans-6.0.0.jar、spring-context-6.0.0.jar和spring-expression-6.0.0.jar,分别对应Spring核心容器的四个模块:Spring-core模块、Spring-beans模块、Spring-context模块和Spring-expression模块。对于Spring框架的初学者,开发Spring应用时,只需要将Spring的四个基础包和Spring

Commons

Logging

Bridge对应的JAR包spring-jcl-6.0.0.jar复制到Web应用的WEB-INF/lib目录下即可。对于Spring

MVC框架的初学者,开发Spring

MVC应用时,只需要将Spring的4个基础JAR包、Spring

Commons

Logging

Bridge对应的JAR包spring-jcl-6.0.0.jar、AOP实现JAR包spring-aop-6.0.0.jar以及两个Web相关的JAR包(spring-web-6.0.0.jar和spring-webmvc-6.0.0.jar)复制到Web应用的WEB-INF/lib目录下即可。《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

14.2.1Spring的下载Tomcat

10运行Spring

MVC

6.0应用时,DispatcherServlet接口依赖性能监控micrometer-observation和micrometer-commons两个包进行请求分发。因此,Spring

MVC应用所添加的JAR包如图14.2所示。《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

14.2.2使用Eclipse开发SpringMVC的Web应用1.创建Web应用并导入JAR包按照1.2.2节的操作步骤,在Eclipse中,创建一个Web项目ch14_1,将如图14.2所示的JAR包添加到ch14_1的WEB-INF/lib目录中。2.在web.xml文件中部署DispatcherServlet在开发Spring

MVC应用时,需要在web.xml(webapp/WEB-INF/)中部署DispatcherServlet。《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

14.2.2使用Eclipse开发SpringMVC的Web应用3.创建Web应用首页在ch14_1应用的webapp目录下,创建应用的首页面index.jsp。4.创建Controller类在应用的src目录下,创建包controller,并在该包中创建基于注解的名为“IndexController”的控制器类,该类中有两个处理请求方法,分别处理首页中“注册”和“登录”超链接请求。《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

14.2.2使用Eclipse开发SpringMVC的Web应用5.创建SpringMVC的配置文件在Spring

MVC中,使用扫描机制找到应用中所有基于注解的控制器类。所以,为了让控制器类被Spring

MVC框架扫描到,需要在配置文件中声明spring-context,并使用<context:component-scan/>元素指定控制器类的基本包(请确保所有控制器类都在基本包及其子包下)。另外,需要在配置文件中定义Spring

MVC的视图解析器(ViewResolver)6.应用的其他页面IndexController控制器的register方法处理成功后,跳转到“/WEB-INF/jsp/register.jsp”视图;IndexController控制器的login方法处理成功后,跳转到“/WEB-INF/jsp/login.jsp”视图。因此,应用的“/WEB-INF/jsp”目录下应有“register.jsp”和“login.jsp”页面,此两个JSP页面代码略。7.发布并运行Spring

MVC应用在Eclipse中第一次运行Spring

MVC应用时,需要参考2.2.2节将应用发布到Tomcat。《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

14.2.2使用Eclipse开发SpringMVC的Web应用7.发布并运行Spring

MVC应用在Eclipse中第一次运行Spring

MVC应用时,需要将应用发布到Tomcat。例如,运行ch14_1应用时,可以选中应用名称ch14_1单击右键,选择【Run

As】/【Run

on

Server】打开如图14.3所示的对话框,在对话框中单击【Finish】即完成发布并运行。《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

目录14.1SpringMVC的工作原理14.2SpringMVC的工作环境14.3基于注解的控制器14.4Spring的数据库编程14.5基于SpringMVC框架的注册与登录《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

14.3基于注解的控制器使用基于注解的控制器,具有如下两个优点:1.在基于注解的控制器类中,可以编写多个处理方法,进而可以处理多个请求(动作)。这就允许将相关的操作编写在同一个控制器类中,从而减少控制器类的数量,方便以后的维护。2.基于注解的控制器不需要在配置文件中部署映射,仅需要使用RequestMapping注解类型注解一个方法进行请求处理。在SpringMVC中,最重要的两个注解类型是Controller和RequestMapping。《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

14.3.1Controller注解类型在SpringMVC中,使用org.springframework.stereotype.Controller注解类型声明某类的实例是一个控制器。例如,在应用的src/main/java目录下,创建controller

包,并在该包中创建Controller注解的控制器类IndexController。/**“@Controller”表示IndexController的实例是一个控制器*@Controller相当于@Controller("indexController")或@Controller(value="indexController")*/@ControllerpublicclassIndexController{ //处理请求的方法}《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

14.3.2RequestMapping注解类型需要使用RequestMapping注解类型将请求与处理方法一一对应。1.方法级别注解@RequestMapping(value="/index/login")publicStringlogin(){

return"login";}2.类级别注解@RequestMapping("/index")publicclassIndexController{

@RequestMapping("/login") publicStringlogin(){ return"login"; }《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

14.3.2RequestMapping注解类型为方便程序维护,建议开发者采用类级别注解,将相关处理放在同一个控制器类中,例如,对商品的增、删、改、查处理方法都可以放在GoodsOperate控制类中。@RequestMapping注解的value属性表示请求路径;method属性表示请求方式。如果方法上的@RequestMapping注解没有设置method属性,则get和post请求都可以访问;如果方法上的@RequestMapping注解设置了method属性,则只能是相应的请求方式可以访问。@RequestMapping还有特定于HTTP请求方式的组合注解。《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

(1)@GetMapping相当于@RequestMapping(method=RequestMethod.GET),处理get请求。使用@RequestMapping编写是@RequestMapping(value="requestpath",method=RequestMethod.GET);使用@GetMapping可简写为@GetMapping("requestpath")。通常在查询数据时使用。《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

(2)@PostMapping相当于@RequestMapping(method=HttpMethod.POST),处理post请求。使用@RequestMapping编写是@RequestMapping(value="requestpath",method=RequestMethod.POST);使用@PostMapping可简写为@PostMapping("requestpath")。通常在新增数据时使用。《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

(3)@PutMapping、@PatchMapping相当于@RequestMapping(method=RequestMethod.PUT/PATCH),处理put和patch请求。使用@RequestMapping编写是@RequestMapping(value="requestpath",method=RequestMethod.PUT/PATCH);使用@PutMapping可简写为@PutMapping("requestpath")。两者都是更新,@PutMapping为全局更新,@PatchMapping是对put方式的一种补充,put是对整体的更新,patch是对局部的更新。通常在更新数据时使用。《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

(4)@DeleteMapping相当于@RequestMapping(method=RequestMethod.DELETE),处理delete请求。使用@RequestMapping编写是@RequestMapping(value="requestpath",method=RequestMethod.DELETE);使用@PutMapping可简写为@DeleteMapping("requestpath")。通常在删除数据时使用。《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

14.3.3编写请求处理方法在控制器类中每个请求处理方法可以有多个不同类型的参数,以及一个多种类型的返回结果。如果需要在请求处理方法中使用ServletAPI类型,那么可以将这些类型作为请求处理方法的参数类型。除了ServletAPI参数类型外,还有输入输出流、表单实体类、注解类型、与Spring框架相关的类型等等。但特别重要的类型是org.springframework.ui.Model类型,该类型是一个包含Map的Spring框架类型。每次调用请求处理方法时,SpringMVC都将创建org.springframework.ui.Model对象。最常见的返回类型,就是代表逻辑视图名称的String类型。除了String类型外,还有Model、View以及其他任意的Java类型。《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

14.3.4Controller接收请求参数的常见方式Controller接收请求参数的方式有很多种,有的适合get请求方式,有的适合post请求方式,有的两者都适合。下面介绍几个常用的方式,读者可根据实际情况选择合适的接收方式。《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

1.通过实体bean接收请求参数通过一个实体bean来接收请求参数,适用于get和post提交请求方式。需要注意的是,bean的属性名称必须与请求参数名称相同。下面通过完善应用ch14_1,讲解“通过实体bean接收请求参数”。《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

(1)完善视图文件<formaction="user/register"method="post"name="registForm"> <inputtype="text"name="uname"value="${user.uname}"/> <inputtype="password"name="upass"/> <inputtype="password"name="reupass"/> <inputtype="submit"value="注册"/></form>《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

(2)创建POJO实体类publicclassUserForm{ privateStringuname;//与请求参数名称相同

privateStringupass; privateStringreupass; //省略getter和setter方法}《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

(3)创建控制器类@RequestMapping("/user")publicclassUserController{ @PostMapping("/register") publicStringregister(UserFormuser,Modelmodel){ if("zhangsan".equals(user.getUname()) &&"123456".equals(user.getUpass())){

return"login";//注册成功,跳转到login.jsp }else{

model.addAttribute("uname",user.getUname()); return"register";//返回register.jsp } }}《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

2.通过处理方法的形参接收请求参数通过处理方法的形参接收请求参数,也就是直接把表单参数写在控制器类相应方法的形参中,即形参名称与请求参数名称完全相同。该接收参数方式适用于get和post提交请求方式。@PostMapping("/register")publicStringregister(Stringuname,Stringupass,Modelmodel){

if("zhangsan".equals(uname)

&&"123456".equals(upass)){

}}《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

3.通过@RequestParam接收请求参数通过@RequestParam接收请求参数,适用于get和post提交请求方式。@PostMapping("/register")publicStringregister(@RequestParamStringuname,@RequestParamStringupass,Modelmodel){

if("zhangsan".equals(uname)

&&"123456".equals(upass)){}}通过@RequestParam接收请求参数与“通过处理方法的形参接收请求参数”的区别是:当请求参数与接收参数名不一致时,“通过处理方法的形参接收请求参数”不会报400错误,而“通过@RequestParam接收请求参数”会400错误。《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

4.通过@ModelAttribute接收请求参数@ModelAttribute注解放在处理方法的形参上时,用于将多个请求参数封装到一个实体对象,从而简化数据绑定流程,而且自动暴露为模型数据用于视图页面展示时使用。而“通过实体bean接收请求参数”只是将多个请求参数封装到一个实体对象,并不能暴露为模型数据。通过@ModelAttribute注解接收请求参数,适用于get和post提交请求方式。@RequestMapping("/register")publicStringregister(@ModelAttribute("user")UserFormuser){

if("zhangsan".equals(user.getUname())

&&"123456".equals(user.getUpass())){}}使用@ModelAttribute(“user”)与model.addAttribute(“user”,user)功能相同,在页面上可以使用EL表达式${user.uname}取出ModelAttribute的uname值。《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

14.3.5重定向与转发重定向是将用户从当前处理请求定向到另一个视图(如JSP)或处理请求,以前的请求(request)中存放的信息全部失效,并进入一个新的request作用域;转发是将用户对当前处理的请求转发给另一个视图或处理请求,以前的request中存放的信息不会失效。转发是服务器行为,重定向是客户端行为。在SpringMVC框架中,控制器类中处理方法的return语句默认就是转发实现,只不过实现的是转发到视图。《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

14.3.5重定向与转发//转发到一个请求方法(同一个控制器类中,可省略/index/)return"forward:/index/isLogin";//重定向到一个请求方法(同一个控制器类中,可省略/index/)return"redirect:/index/isRegister";//转发到一个视图return"register";在SpringMVC框架中,不管重定向或转发,都需要符合视图解析器的配置,如果直接转发到一个不需要DispatcherServlet的资源,如:return"redirect:/html/my.html";需要使用mvc:resources配置,示例代码如下。<mvc:resourceslocation="/html/"mapping="/html/**"></mvc:resources>《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

14.3.6应用@Autowired进行依赖注入在前面学习的控制器中,并没有体现MVC的M层,这是因为控制器即充当C层,又充当M层。这样设计程序的系统结构很不合理,应该将M层从控制器中分离出来。SpringMVC框架本身就是一个非常优秀的MVC框架,它具有一个依赖注入的优点。可以通过Autowired注解类型将依赖注入到一个属性(成员变量)或方法,示例如下。@AutowiredpublicUserServiceuserService;在SpringMVC中,为了能被作为依赖注入,Service类可以使用Service注解类型注明为@Service(一个服务)。另外,还需要在配置文件中使用<context:component-scanbase-package="基本包"/>元素来扫描依赖基本包。《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

14.3.7@ModelAttribute通过ModelAttribute注解类型,可实现如下两个功能。1.绑定请求参数到实体对象(表单的命令对象)绑定请求参数到实体对象,该用法如14.3.4节内容。publicStringregister(@ModelAttribute("user")UserFormuser)上述代码中“@ModelAttribute("user")UserFormuser”语句的功能有两个,一是将请求参数的输入封装到user对象中;一是创建UserForm实例,以“user”为键值存储在Model对象中,与“model.addAttribute("user",user)”语句功能一样。如果没有指定键值,即“@ModelAttributeUserFormuser”,那么创建UserForm实例时,以“userForm”为键值存储在Model对象中,与“model.addAttribute("userForm",user)”语句功能一样。

《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

2.注解一个非请求处理方法被@ModelAttribute注解的方法,将在每次调用该控制器类的请求处理方法前被调用。这种特性可以用来控制登录权限,当然控制登录权限的方法很多,例如拦截器、过滤器等。publicclassBaseController{

@ModelAttributepublicvoidisLogin(HttpSessionsession)throwsException{if(session.getAttribute("user")==null){}}}@Controller@RequestMapping("/admin")publicclassModelAttributeControllerextendsBaseController{ @RequestMapping("/add") publicStringadd(){} @RequestMapping("/update") publicStringupdate(){} @RequestMapping("/delete") publicStringdelete(){}}上述ModelAttributeController类中的add、update、delete请求处理方法执行时,首先执行父类BaseController中的isLogin方法判断登录权限。《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

目录14.1SpringMVC的工作原理14.2SpringMVC的工作环境14.3基于注解的控制器14.4Spring的数据库编程14.5基于SpringMVC框架的注册与登录《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

14.4Spring的数据库编程数据库编程是互联网编程的基础,Spring框架为开发者提供了JDBC模板模式,即jdbcTemplate,它可以简化许多代码,但在实际应用中jdbcTemplate并不常用。工作更多的时候,用的是Hibernate框架和MyBatis框架进行数据库编程。本节仅简要介绍Spring

jdbcTemplate的使用方法,而MyBatis框架的相关内容,读者可学习作者的另一本教程《Java

EE框架整合开发入门到实战——Spring+Spring

MVC+MyBatis》。《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

14.4.1SpringJDBC的配置本节Spring数据库编程主要使用SpringJDBC模块的core和dataSource包。core包是JDBC的核心功能包,包括常用的JdbcTemplate类;dataSource包是访问数据源的工具类包。使用SpringJDBC操作数据库,需要对其进行配置。《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

14.4.1SpringJDBC的配置<!--配置数据源--><beanid="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <!--MySQL数据库驱动--> <propertyname="driverClassName"value="com.mysql.cj.jdbc.Driver"/> <!--连接数据库的URL--> <propertyname="url"value="jdbc:mysql://:3306/springtest?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=GMT%2B8"/> <!--连接数据库的用户名--> <propertyname="username"value="root"/> <!--连接数据库的密码--> <propertyname="password"value="root"/></bean><!--配置JDBC模板--><beanid="jdbcTemplate"class="org.springframework.jdbc.core.JdbcTemplate"> <propertyname="dataSource"ref="dataSource"/></bean>《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

14.4.1SpringJDBC的配置上述示例代码中,配置JDBC模板时,需要将dataSource注入到jdbcTemplate,而在数据访问层(Dao类)需要使用jdbcTemplate时,也需要将jdbcTemplate注入到对应的bean中。……@Repository("testDao")publicclassTestDaoImplimplementsTestDao{ @Autowired //使用配置文件中的JDBC模板

privateJdbcTemplatejdbcTemplate; ……}《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

14.4.2SpringJdbcTemplate的常用方法

publicintupdate(Stringsql,Objectargs[])该方法可以对数据表进行增加、修改、删除等操作。使用args[]设置SQL语句中的参数,并返回更新的行数。示例代码如下:StringinsertSql="insertintouservalues(null,?,?)";Objectparam1[]={"chenheng1","男"};jdbcTemplate.update(insertSql,param1);

publicList<T>query(Stringsql,RowMapper<T>rowMapper,Objectargs[])该方法可以对数据表进行查询操作。rowMapper将结果集映射到用户自定义的类中(前提是自定义类中的属性与数据表的字段对应)。示例代码如下:StringselectSql="select*fromuser";RowMapper<MyUser>rowMapper=newBeanPropertyRowMapper<MyUser>(MyUser.class);List<MyUser>list=jdbcTemplate.query(selectSql,rowMapper,null);通过一个实例演示SpringJDBC的使用过程。《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

1.导入JAR包将MySQL数据库的驱动JAR包mysql-connector-java-8.0.29.jar、Spring

JDBC的JAR包spring-jdbc-6.0.0.jar以及Spring事务处理的JAR包spring-tx-6.0.0.jar复制到ch14_1应用的/WEB-INF/lib目录。《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

2.完善配置文件ch14_1的配置文件中,添加如下配置代码:<!--配置数据源--><beanid="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <!--MySQL数据库驱动--> <propertyname="driverClassName"value="com.mysql.cj.jdbc.Driver"/> <!--连接数据库的URL--> <propertyname="url"value="jdbc:mysql://:3306/springtest?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=GMT%2B8"/> <!--连接数据库的用户名--> <propertyname="username"value="root"/> <!--连接数据库的密码--> <propertyname="password"value="root"/></bean><!--配置JDBC模板--><beanid="jdbcTemplate"class="org.springframework.jdbc.core.JdbcTemplate"> <propertyname="dataSource"ref="dataSource"/></bean>《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

3.创建实体类在应用ch14_1的包pojo中创建实体类MyUser。该类的属性与数据表usertable的字段一致。packagepojo;publicclassMyUser{ privateStringuname; privateStringupwd; //此处省略setter和getter方法

publicStringtoString(){ return"myUser[uname="+uname+",upwd="+upwd+"]"; }}《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

4.创建数据访问层Dao在应用ch14_1的src目录中,创建一个名为dao的包,并在该包中创建TestDao接口和TestDaoImpl实现类。在实现类TestDaoImpl中使用JDBC模块JdbcTemplate访问数据库,并将该类注解为@Repository("testDao")。在配置文件中添加<context:component-scanbase-package="dao"/>语句使注解生效。《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

5.创建测试类在应用ch14_1的controller包中,创建控制器类TestSpringJDBC。@ControllerpublicclassTestSpringJDBC{

@Autowired privateTestDaotestDao; @RequestMapping("/jdbcTest") publicStringtest(){ StringinsertSql="insertintousertablevalues(?,?)";《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

14.4.3基于@Transactional注解的声明式事务管理@Transactional注解可以作用于接口、接口方法、类以及类方法上。当作用于类上时,该类的所有public方法将都具有该类型的事务属性,同时,也可以在方法级别使用该注解来覆盖类级别的定义。虽然@Transactional注解可以作用于接口、接口方法、类以及类方法上,但是Spring小组建议不要在接口或者接口方法上使用该注解,因为这只有在使用基于接口的代理时它才会生效。@Transactional注解使用步骤如下:《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

1.为数据源添加事务管理器<!--为数据源添加事务管理器--><beanid="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <propertyname="dataSource"ref="dataSource"/></bean><!--为事务管理器注册注解驱动--><tx:annotation-driventransaction-manager="txManager"/>《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

2.为Service层添加@Transactional注解在SpringMVC中,通常通过Service层进行事务管理,因此需要为Service层添加@Transactional注解。添加@Transactional注解的示例代码如下:......@Service("testService")@Transactional//加上注解@Transactional,就可以指定这个类需要受Spring的事务管理//注意@Transactional只能针对public属性范围内的方法添加publicclassTestServiceImplimplementsTestService{}......《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

目录14.1SpringMVC的工作原理14.2SpringMVC的工作环境14.3基于注解的控制器14.4Spring的数据库编程14.5基于SpringMVC框架的注册与登录《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

14.5.1JSON数据转换为实现浏览器与控制器类之间的JSON数据交互,Spring

MVC提供了MappingJackson2HttpMessageConverter实现类默认处理JSON格式请求响应。该实现类利用Jackson开源包读写JSON数据,将Java对象转换为JSON对象和XML文档,同时也可以将JSON对象和XML文档转换为Java对象。Jackson开源包及其描述如下所示。

jackson-annotations.jar:JSON转换注解包。

jackson-core.jar:JSON转换核心包。

jackson-databind.jar:JSON转换的数据绑定包。以上3个Jackson的开源包在编写本书时,最新版本是2.14.1,读者可通过地址“http:///artifact/com.fasterxml.jackson.core”下载得到。在使用注解开发时,需要用到两个重要的JSON格式转换注解,分别是@RequestBody和@ResponseBody。

@RequestBody:用于将请求体中的数据绑定到方法的形参中,该注解应用在方法的形参上。

@ResponseBody:用于直接返回JSON对象,该注解应用在方法上。《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

14.5.2注册与登录创建SpringMVC应用ch14_2,实现以下功能:1.未注册用户请运行注册页面进行注册,注册时检查用户名是否已注册(要求使用Ajax异步提交检查);2.已注册的用户运行登录页面进行登录,登录成功的用户,可以查看所有用户姓名。《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

1.创建应用ch14_2,并导入相关JAR文件除了导入ch14_1应用所需要的JAR文件,还需要导入JSTL和JSON需要的JAR文件。《JavaWeb开发从入门到实战(第2版·微课视频版)》陈恒

主编,清华大学出版社,2024

2.创建相关JSP文件应用中需要的js和图片,请参见提供的源代码

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论