Web技术基础教程 14_第1页
Web技术基础教程 14_第2页
Web技术基础教程 14_第3页
Web技术基础教程 14_第4页
Web技术基础教程 14_第5页
已阅读5页,还剩74页未读 继续免费阅读

下载本文档

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

文档简介

JavaWeb开发技术与案例教程第13章JavaWeb框架第13章知识结构13.1JavaWeb框架原理13.2案例学习:SpringMVC框架的应用•13.2.1引入依赖•13.2.2配置SpringMVC•13.2.3创建Controller类•13.2.4创建View页面•13.2.5运行应用13.3案例学习:SpringMVC整合MyBatis•13.3.1引入依赖•13.3.2配置SpringMVC•13.3.3创建Model类•13.3.4创建Mapper接口•13.3.5创建Service类•13.3.6创建Controller类•13.3.7创建视图•13.3.8运行应用13.4案例学习:SpringBoot框架的应用•13.4.1创建项目•13.4.2引入依赖•13.4.3配置路径•13.4.4编写控制器•13.4.5启动服务•13.4.6运行应用13.5本章小结1第13章课程导入

JavaWeb框架是Java语言在Web开发领域的一种重要应用,它提供了一套完整的解决方案,用于构建基于Java技术的Web应用程序。这些框架通常包括MVC架构的实现、数据库访问、安全性、会话管理等功能,旨在提高开发效率、降低维护成本。通过集成MVC架构、对象关系映射(Object-RelationalMapping,ORM)、安全机制等核心模块,显著提升开发效率与系统可维护性。其核心架构遵循分层设计:Controller层处理HTTP请求并与Service层交互,Model层通过MyBatis等持久层框架完成数据访问,View层依赖JSP/Thymeleaf渲染动态页面。典型框架如SpringBoot通过自动配置和依赖注入简化开发流程,这些框架通过约定优于配置的原则,使开发者能专注于业务逻辑实现,同时通过热部署、单元测试支持等功能缩短迭代周期,是构建企业级高并发、高可用Web系统的基石。本章通过案例学习常见的框架,包括SpringMVC框架、SpringMVC整合MyBatis、SpringBoot框架等。2第13章课程导入◆本章要点•理解MVC架构中模型(Model)、视图(View)和控制器(Controller)的分层职责。•掌握SpringMVC框架的核心配置(SpringInitializer)和基于注解的控制器(@Controller,@RequestMapping)的使用。•掌握SpringMVC整合MyBatis的配置方法,特别是SqlSessionFactory和@MapperScan的配置。•理解SpringBoot“约定大于配置”的核心理念和starter依赖的作用。•掌握使用IntelliJIDEA创建SpringBoot项目,并编写@RestController快速开发WebAPI。3第13章课程导入◆素养目标•深化架构思维,理解分层设计价值:通过SpringMVC三层架构案例,掌握“高内聚、低耦合”的设计原则。•践行依赖注入理念,提升代码可测试性:在SpringBean的@Autowired注解使用中,理解控制反转对模块解耦的作用。•推动技术标准化,促进团队协作:通过SpringBoot的starter依赖机制,理解“约定优于配置”理念。•弘扬创新精神,拥抱生态变革:结合SpringCloud微服务架构演进,理解技术选型对业务发展的支撑作用。413.1JavaWeb框架原理(1)在JavaWeb开发的历程中,Spring系列框架的出现极大地简化了企业级应用的开发模式。随着业务需求的日益复杂和用户规模的爆发式增长,Web开发架构经历了从早期分散的Servlet/JSP,到高度集成的SpringMVC,再到如今提倡“约定大于配置”的SpringBoot的重要演进。当前,互联网应用架构正处于从单体架构(Monolithic)向微服务架构(Microservices)全面转型的节点上。SpringCloud作为微服务架构的工业级标准,其核心正是建立在SpringBoot基础之上的。理解SpringBoot的自动配置机制和MVC请求处理流程,是进一步掌握SpringCloud微服务治理(如服务发现、配置中心、负载均衡及网关过滤)的先决条件。本章的学习不仅能帮助读者高效完成单体Web项目的开发,更为未来顺畅过渡到微服务架构演进打下坚实的基础。513.1JavaWeb框架原理(2)这种架构演进虽然改变了系统的部署方式,但其底层核心思想——“关注点分离”始终未变。MVC架构作为JavaWeb框架中最基础的核心思想,正是通过将应用程序划分为模型(Model)、视图(View)和控制器(Controller)三个层次,实现了业务逻辑、数据与界面展示的深度解耦。其中,Model(模型)代表一个存取数据的对象或简单的Java对象,模型本身也可以带有逻辑,在数据变化时更新控制器;View(视图)代表模型包含的数据的可视化;Controller(控制器)作用于模型和视图上,它控制数据流向模型对象,并在数据变化时更新视图,使视图与模型分离开。MVC运行逻辑原理如图13-1所示,模型层负责业务逻辑和数据访问,视图层负责用户界面展示,控制器层负责接收用户请求、调用模型层处理业务逻辑,并将处理结果返回到视图层。这种分层架构带来显著优势:通过关注点分离降低系统耦合度,各组件可独立开发、测试与维护,提升了系统的可扩展性;但同时也需注意,对于简单项目可能因引入额外分层而增加开发复杂度,若实现不当还可能引发性能瓶颈。613.1JavaWeb框架原理(3)依赖注入(DependencyInjection)和控制反转(InversionofControl)是JavaWeb框架中常用的设计模式,旨在降低组件之间的耦合度,提高代码的可维护性和复用性。通过依赖注入,框架可以自动将所需的依赖项注入到组件中,而无需在组件内部进行手动创建和配置。控制反转则允许组件在运行时动态地决定其依赖项,而不是在编译时静态地确定。在JavaWeb框架中,AOP通常用于实现横切关注点(如安全性、事务管理等)的分离,从而提高代码的可读性和可维护性。AOP是一种编程范式,可以说是面向对象编程(Object-OrientedProgramming,OOP)的补充和完善。它允许开发者在不修改原有代码结构的情况下,向程序中的特定点(如方法执行前后、异常抛出时等)添加额外的行为(如日志记录、事务管理等)。713.2案例学习:SpringMVC框架的应用

Spring是一个开源的Java、JakartaEE全功能栈(FullStack)的应用程序框架,由RodJohnson创建。Spring框架为基于Java的企业应用开发提供了一种轻量级的解决方案。Spring框架的核心功能包括依赖注入、AOP、数据访问、WebMVC等。它还可以与其他JakartaEE技术(如Servlet、JSP和JSTL等)无缝集成,共同构建功能强大的Web应用程序,使得开发人员能够更轻松地构建和管理企业级Web应用程序。

SpringMVC是Spring框架中的一个模块,实现了MVC架构的Web应用程序。SpringMVC提供了丰富的功能,如请求映射、视图解析、数据绑定、异常处理等。通过使用SpringMVC,开发者可以轻松地构建出结构清晰、易于维护的Web应用程序。SpringMVC可以采用XML配置或者Java注解的方法配置,本书以注解的方法讲解SpringMVC的详细使用方法。813.2.1引入依赖(清单13-1pom.xml)1/2创建基于Maven的JakartaEE项目ch13_1,在此基础上配置SpringMVC,添加清单13-1所示的依赖信息。...<dependencies><dependency><groupId>jakarta.servlet</groupId><artifactId>jakarta.servlet-api</artifactId><version>6.1.0</version><scope>provided</scope></dependency><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId><version>${junit.version}</version><scope>test</scope></dependency><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-engine</artifactId><version>${junit.version}</version><scope>test</scope></dependency><dependency><groupId>org.springframework</groupId>913.2.1引入依赖(清单13-1pom.xml)2/2<artifactId>spring-webmvc</artifactId><version>6.2.0</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>6.2.0</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>6.2.0</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>6.2.0</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>6.2.0</version></dependency><dependency><groupId>org.glassfish.web</groupId><artifactId>jakarta.servlet.jsp.jstl</artifactId><version>3.0.1</version></dependency></dependencies>...1013.2.2配置SpringMVC在项目中,创建Java包com.example.ch13_1.springmvc,在该包中创建SpringInitializer、SpringRootConfig和SpringWebConfig三个Java类。其中,清单13-2所示的代码是SpringMVC应用的初始化配置类,通过继承AbstractAnnotationConfigDispatcherServletInitializer来配置根上下文、Web上下文、DispatcherServlet映射路径和字符编码过滤器,为SpringMVC应用提供完整的初始化设置。1113.2.2配置SpringMVC(清单13-2SpringInitializer.java)1/3packagecom.example.ch13_1.springmvc;importjakarta.servlet.Filter;importorg.springframework.core.annotation.Order;importorg.springframework.web.filter.CharacterEncodingFilter;importorg.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;/***SpringMVC初始化器*继承自AbstractAnnotationConfigDispatcherServletInitializer*用于配置SpringMVC的核心组件和上下文*/publicclassSpringInitializerextendsAbstractAnnotationConfigDispatcherServletInitializer{/***配置Spring根上下文(RootContext)*根上下文包含跨多个Servlet共享的Bean(如数据源、事务管理等)*/@OverrideprotectedClass<?>[]getRootConfigClasses(){returnnewClass[]{SpringRootConfig.class};}/***配置SpringWeb上下文(WebContext)*Web上下文包含与Web相关的Bean(如控制器、视图解析器等)◆SpringInitializer类1213.2.2配置SpringMVC(清单13-2SpringInitializer.java)2/3*/@OverrideprotectedClass<?>[]getServletConfigClasses(){returnnewClass[]{SpringWebConfig.class};}/***配置DispatcherServlet的映射路径*"/"表示处理所有请求(相当于web.xml中的<url-pattern>/</url-pattern>)*/@OverrideprotectedString[]getServletMappings(){returnnewString[]{"/"};}/***配置Spring相关的过滤器(Filter)*这里添加字符编码过滤器解决中文乱码问题*/@OverrideprotectedFilter[]getServletFilters(){//创建字符编码过滤器实例CharacterEncodingFiltercharacterEncodingFilter=newCharacterEncodingFilter();//设置统一使用UTF-8编码1313.2.2配置SpringMVC(清单13-2SpringInitializer.java)3/3characterEncodingFilter.setEncoding("UTF-8");//强制请求(request)和响应(response)都使用UTF-8编码characterEncodingFilter.setForceEncoding(true);returnnewFilter[]{characterEncodingFilter};}}1413.2.2配置SpringMVC◆SpringRootConfig类清单13-3所示的代码是Spring根上下文配置类,通过注解启用基于类的AOP代理和声明式事务管理功能,为业务层和服务层组件提供切面编程和事务管理支持。1513.2.2配置SpringMVC(清单13-3SpringRootConfig.java)packagecom.example.ch13_1.springmvc;importorg.springframework.context.annotation.EnableAspectJAutoProxy;importorg.springframework.transaction.annotation.EnableTransactionManagement;@EnableAspectJAutoProxy(proxyTargetClass=true)@EnableTransactionManagementpublicclassSpringRootConfig{}1613.2.2配置SpringMVC◆SpringWebConfig类清单13-4所示的代码是SpringMVC的Web配置类,通过注解配置组件扫描、启用MVC功能并定义JSP视图解析器,自动将控制器返回的视图名解析为WEB-INF/views目录下的对应JSP文件。1713.2.2配置SpringMVC(清单13-4SpringWebConfig.java)1/2packagecom.example.ch13_1.springmvc;//导入Spring框架相关类importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.ComponentScan;importorg.springframework.context.annotation.Configuration;importorg.springframework.web.servlet.ViewResolver;importorg.springframework.web.servlet.config.annotation.EnableWebMvc;importorg.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;importorg.springframework.web.servlet.view.InternalResourceViewResolver;/***SpringMVC配置类(替代传统xml配置)*@ComponentScan指定组件扫描的基础包路径*@EnableWebMvc启用SpringMVC配置*@Configuration声明这是一个配置类*/@ComponentScan(basePackages="com.example.ch13_1")//自动扫描指定包下的组件@EnableWebMvc//启用SpringMVC注解驱动@Configuration//标识为配置类publicclassSpringWebConfigextendsWebMvcConfigurationSupport{/***配置视图解析器(ViewResolver)*@Bean注解表示该方法会生成一个由Spring管理的Bean1813.2.2配置SpringMVC(清单13-4SpringWebConfig.java)2/2*InternalResourceViewResolver用于解析JSP视图*/@BeanpublicViewResolverviewResolver(){System.out.println("viewResolver()...");//调试输出//创建JSP视图解析器实例InternalResourceViewResolverresolver=newInternalResourceViewResolver();//设置视图文件的前缀路径(对应WEB-INF/views/目录)resolver.setPrefix("/views/");//设置视图文件的后缀名(对应.jsp文件)resolver.setSuffix(".jsp");//假设控制器返回"hello"时,实际解析为/views/hello.jspreturnresolver;}}1913.2.3创建Controller类创建Java包com.example.ch13_2.controller,并在该包中创建名称为HelloController的Java类。清单13-5所示的代码是基于注解的SpringMVC控制器,通过@RequestMapping映射"/show"请求到showText方法,方法返回ModelAndView对象包含消息数据和"hello"视图名,最终由视图解析器转换为具体的JSP页面。2013.2.3创建Controller类(清单13-5HelloController.java)1/2packagecom.example.ch13_1.controller;importorg.springframework.stereotype.Controller;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.servlet.ModelAndView;/***HelloController是一个基于注解的控制器,可以同时处理多个请求动作,并且无须实现任何接口。*org.springframework.stereotype.Controller注解用于指示该类是一个控制器。*/@ControllerpublicclassHelloController{/***org.springframework.web.bind.annotation.RequestMapping注解*用来映射请求的的URL和请求的方法等。实例用来映射"/show",showText()是一个普通方法。*该方法返回一个包含视图路径或视图路径和模型的ModelAndView对象。*/@RequestMapping(value="/show")publicModelAndViewshowText(){System.out.println("showText()...");//创建准备返回的ModelAndView对象,该对象通常包含了返回视图的路径、模型的名称以及模型对象2113.2.3创建Controller类(清单13-5HelloController.java)2/2ModelAndViewmodelAndView=newModelAndView();modelAndView.addObject("message","show:hello");//设置逻辑视图名,视图解析器会根据该名字解析到具体的视图页面modelAndView.setViewName("hello");//返回ModelAndView对象。returnmodelAndView;}}2213.2.4创建View页面(清单13-6hello.jsp)在项目的webapp目录下,创建文件夹views,并在该文件夹中创建一个名称为hello.jsp的JSP页面,代码如清单13-6所示。<%@pagecontentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%><%@tagliburi="jakarta.tags.core"prefix="c"%><!DOCTYPEhtml><html><head><title>ShowText</title></head><body><c:outvalue="${message}"/></body></html>2313.2.4创建View页面上述实例创建了一个Controller类处理用户登录请求。同时,还利用类配置了视图解析器和注册DispatcherServlet。整个项目的目录如图13-2所示。图13-2SpringMVC项目结构2413.2.5运行应用如图13-3所示,当用户访问hello时,DispatcherServlet会将请求转发给Controller中showText()方法进行处理。处理完毕后,根据结果返回相应的视图名称("hello"),并由视图解析器解析为实际的JSP页面进行展示。这种利用Java类配置的好处是,开发者不需要进行复杂的XML配置,而能够快速搭建框架。http://localhost:8080/ch13_1/show图13-3SpringMVC项目运行结果2513.3案例学习:SpringMVC整合MyBatis

MyBatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集的工作。MyBatis可以使用简单的XML或注解配置和映射原生信息,将接口和Java的POJOs映射成数据库中的记录。在SpringMVC项目中使用MyBatis是一种常见的做法,它结合了SpringMVC的控制器和视图管理功能以及MyBatis的持久层数据访问功能。下面实例将讲解如何在SpringMVC项目的基础上添加MyBatis模块,以帮助读者在SpringMVC项目中集成MyBatis。2613.3.1引入依赖参照上节学习的内容,创建一个SpringMVC项目,名称为ch13_2,在pom.xml文件中添加SpringMVC、MyBatis、JDBC和JSTL等依赖,版本可以根据适配情况选择。完整的依赖信息如清单13-7所示。2713.3.1引入依赖(清单13-7pom.xml)1/5...<dependencies><dependency><groupId>jakarta.servlet</groupId><artifactId>jakarta.servlet-api</artifactId><version>6.1.0</version><scope>provided</scope></dependency><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId><version>${junit.version}</version><scope>test</scope></dependency><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-engine</artifactId><version>${junit.version}</version><scope>test</scope></dependency><!--Springdependencies--><dependency>2813.3.1引入依赖(清单13-7pom.xml)2/5<groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>6.2.0</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>6.2.0</version></dependency><!--SpringTransactionManagement--><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>6.2.0</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>6.2.0</version></dependency><dependency><groupId>org.springframework</groupId>2913.3.1引入依赖(清单13-7pom.xml)3/5

<artifactId>spring-aop</artifactId><version>6.2.0</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>6.2.0</version></dependency><!--MyBatisdependencies--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.16</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>3.0.3</version></dependency><!--JDBCdependencies--><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId>3013.3.1引入依赖(清单13-7pom.xml)4/5

<version>8.0.33</version></dependency><dependency><groupId>com.mchange</groupId><artifactId>c3p0</artifactId><version>0.10.1</version></dependency><dependency><groupId>org.glassfish.web</groupId><artifactId>jakarta.servlet.jsp.jstl</artifactId><version>3.0.1</version></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version></version><scope>runtime</scope></dependency>3113.3.1引入依赖(清单13-7pom.xml)5/5<dependency><groupId>org.aspectj</groupId><artifactId>aspectjrt</artifactId><version></version><scope>runtime</scope></dependency></dependencies>...3213.3.2配置SpringMVC在项目中,创建Java包com.example.ch13_2.springmvc,在该包中创建SpringInitializer、SpringRootConfig和SpringWebConfig三个Java类。这三个Java类的作用参考上节学习的案例。代码见清单13-8、清单13-9和清单13-10。3313.3.2配置SpringMVC(清单13-8SpringInitializer.java)1/2packagecom.example.ch13_2.springmvc;importjakarta.servlet.Filter;importorg.springframework.core.annotation.Order;importorg.springframework.web.filter.CharacterEncodingFilter;importorg.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;publicclassSpringInitializerextendsAbstractAnnotationConfigDispatcherServletInitializer{@OverrideprotectedClass<?>[]getRootConfigClasses(){returnnewClass[]{SpringRootConfig.class};}@OverrideprotectedClass<?>[]getServletConfigClasses(){returnnewClass[]{SpringWebConfig.class};}@OverrideprotectedString[]getServletMappings(){returnnewString[]{"/"};}◆SpringInitializer类3413.3.2配置SpringMVC(清单13-8SpringInitializer.java)2/2@OverrideprotectedFilter[]getServletFilters(){CharacterEncodingFiltercharacterEncodingFilter=newCharacterEncodingFilter();characterEncodingFilter.setEncoding("UTF-8");characterEncodingFilter.setForceEncoding(true);returnnewFilter[]{characterEncodingFilter};}}3513.3.2配置SpringMVC(清单13-9SpringRootConfig.java)◆SpringRootConfig类packagecom.example.ch13_2.springmvc;importorg.springframework.context.annotation.EnableAspectJAutoProxy;importorg.springframework.transaction.annotation.EnableTransactionManagement;@EnableAspectJAutoProxy(proxyTargetClass=true)@EnableTransactionManagementpublicclassSpringRootConfig{}3613.3.2配置SpringMVC(清单13-10SpringWebConfig.java)1/4◆SpringWebConfig类packagecom.example.ch13_2.springmvc;//Spring与MyBatis整合所需的核心类importorg.apache.ibatis.session.SqlSessionFactory;importorg.mybatis.spring.SqlSessionFactoryBean;importorg.mybatis.spring.annotation.MapperScan;importorg.springframework.beans.factory.annotation.Value;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.ComponentScan;importorg.springframework.context.annotation.Configuration;importorg.springframework.jdbc.datasource.DataSourceTransactionManager;importorg.springframework.jdbc.datasource.DriverManagerDataSource;importorg.springframework.web.servlet.ViewResolver;importorg.springframework.web.servlet.config.annotation.EnableWebMvc;importorg.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;importorg.springframework.web.servlet.view.InternalResourceViewResolver;importjavax.sql.DataSource;/***SpringMVC配置类(Java配置方式)*@ComponentScan指定Spring组件扫描的基础包*@MapperScan指定MyBatis接口扫描的基础包*@EnableWebMvc启用SpringMVC注解驱动*@Configuration声明为配置类3713.3.2配置SpringMVC(清单13-10SpringWebConfig.java)2/4*/@ComponentScan(basePackages="com.example.ch13_2")//自动扫描控制器、服务组件等@MapperScan(basePackages="com.example.ch13_2.mapper")//自动扫描MyBatis的Mapper接口@EnableWebMvc//启用SpringMVC配置@Configuration//声明这是一个配置类publicclassSpringWebConfigextendsWebMvcConfigurationSupport{//从配置文件注入数据库连接参数,这里为方便演示,直接将参数值写入注解中//配置文件设置方法见SpringBoot案例@Value("com.mysql.cj.jdbc.Driver")privateStringdriverClass;//JDBC驱动类@Value("root")privateStringusername;//数据库用户名@Value("root")privateStringpassword;//数据库密码@Value("jdbc:mysql://localhost:3306/university")privateStringjdbcUrl;//数据库连接URL/***配置数据源(使用Spring内置的DriverManagerDataSource)*注意:生产环境建议使用连接池(如HikariCP)*/@BeanpublicDataSourcedataSource(){3813.3.2配置SpringMVC(清单13-10SpringWebConfig.java)3/4DriverManagerDataSourcedataSource=newDriverManagerDataSource();dataSource.setDriverClassName(driverClass);//设置数据库驱动dataSource.setUsername(username);//设置用户名dataSource.setPassword(password);//设置密码dataSource.setUrl(jdbcUrl);//设置连接URLreturndataSource;}/***配置JSP视图解析器*示例:返回视图名"user/list"会解析为/views/user/list.jsp*/@BeanpublicViewResolverviewResolver(){System.out.println("viewResolver()...");InternalResourceViewResolverresolver=newInternalResourceViewResolver();resolver.setPrefix("/views/");//设置视图文件前缀路径resolver.setSuffix(".jsp");//设置视图文件后缀名returnresolver;}/***配置事务管理器(基于数据源的事务管理)*使用DataSourceTransactionManager实现声明式事务3913.3.2配置SpringMVC(清单13-10SpringWebConfig.java)4/4*/@BeanpublicDataSourceTransactionManagertransactionManager(){returnnewDataSourceTransactionManager(dataSource());}/***配置MyBatis的SqlSessionFactory*用于创建MyBatis的SQL会话工厂,集成Spring管理*/@BeanpublicSqlSessionFactorysqlSessionFactory()throwsException{SqlSessionFactoryBeansessionFactory=newSqlSessionFactoryBean();sessionFactory.setDataSource(dataSource());//设置数据源returnsessionFactory.getObject();//获取SqlSessionFactory实例}}4013.3.2配置SpringMVC【注意】上述三个配置类中,SpringInitializer和SpringRootConfig与上一节ch13_1项目的主要代码是一样的,只有SpringWebConfig有所不同,主要添加了与MyBatis和JDBC相关的配置。另外javax.sql.DataSource是一个特例,它不需要也不能被更改为jakarta命名空间。原因是javax.sql.DataSource接口是JavaSE(Java标准版)的一部分,它包含在核心的JDBCAPI(java.sql模块)中,而不是JavaEE迁移的部分,所以它的包名保持javax.sql不变。4113.3.3创建Model类(清单13-11User.java)1/2在项目中,创建Java包com.example.ch13_2.model,并创建一个User类。代码如清单13-11所示。packagecom.example.ch13_2.model;importjava.io.Serializable;publicclassUserimplementsSerializable{privateStringstudent_id;privateStringname;privateStringgender;publicStringgetStudent_id(){returnstudent_id;}publicvoidsetStudent_id(Stringstudent_id){this.student_id=student_id;}publicStringgetName(){returnname;}publicvoidsetName(Stringname){=name;4213.3.3创建Model类(清单13-11User.java)2/2}publicStringgetGender(){returngender;}publicvoidsetGender(Stringgender){this.gender=gender;}}4313.3.4创建Mapper接口创建Java包com.example.ch13_2.mapper,在此包中创建一个Mapper接口。清单13-12所示的代码是MyBatis映射器接口,通过@Select注解定义查询方法,使用SQL语句从students表中检索所有用户数据并返回User对象列表,实现了数据访问层的简单查询功能。4413.3.4创建Mapper接口(清单13-12UserMapper.java)packagecom.example.ch13_2.mapper;importcom.example.ch13_2.model.User;importorg.apache.ibatis.annotations.Select;importjava.util.List;publicinterfaceUserMapper{@Select("select*fromstudents")List<User>findAll();}4513.3.5创建Service类创建Java包com.example.ch13_2.service,在此包中创建一个名称为UserService的接口。清单13-13所示的代码是一个用户服务接口,定义了获取所有用户数据的抽象方法,为业务逻辑层提供统一的数据访问契约。4613.3.5创建Service类(清单13-13UserService.java)packagecom.example.ch13_2.service;importcom.example.ch13_2.model.User;importjava.util.List;publicinterfaceUserService{List<User>findAll();}4713.3.5创建Service类创建UserService接口对应的实现类UserServiceImpl。清单13-14所示的代码是一个Spring服务层实现类,通过@Autowired自动注入MyBatis映射器,实现了查询所有用户信息的业务方法,作为控制器和数据访问层之间的桥梁。4813.3.5创建Service类(清单13-14UserServiceImpl.java)1/2packagecom.example.ch13_2.service;importcom.example.ch13_2.mapper.UserMapper;importcom.example.ch13_2.model.User;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Service;importjava.util.List;/***用户服务实现类*@Service注解表示这是一个Spring管理的服务层组件*实现UserService接口,提供具体的业务逻辑实现*/@ServicepublicclassUserServiceImplimplementsUserService{/***自动注入MyBatis的Mapper接口*@Autowired注解让Spring自动装配UserMapper实例*UserMapper是MyBatis的Mapper接口,用于数据库操作*/@AutowiredprivateUserMapperuserMapper;/***查询所有用户信息4913.3.5创建Service类(清单13-14UserServiceImpl.java)2/2*@return包含所有用户对象的List集合*方法说明:*1.调用UserMapper的findAll方法*2.返回数据库查询结果*3.实际业务中可能需要添加分页、缓存等逻辑*/publicList<User>findAll(){returnuserMapper.findAll();}}5013.3.5创建Service类在该类中,使用@Autowired注解注入一个private的UserMapper实例。这里,UserMapper只是一个接口,它提供了User对象的各种操作方法,@Autowired注解将创建一个UserMapper实例对象userMapper,并注入到UserServiceImpl中。要使实现类UserMapperImpl被扫描到,必须在类中使用@Service注解。5113.3.6创建Controller类创建Java包com.example.ch13_2.controller,在此包中创建一个Controller类处理HTTP请求。清单13-15所示的代码是SpringMVC用户控制器,通过自动注入用户服务并映射“/showAllStudent”请求,调用服务层获取所有用户数据后返回包含用户列表和“userlist”视图的ModelAndView对象。5213.3.6创建Controller类(清单13-15UserController.java)1/2packagecom.example.ch13_2.controller;importcom.example.ch13_2.model.User;importcom.example.ch13_2.service.UserService;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Controller;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.servlet.ModelAndView;importjava.util.List;@ControllerpublicclassUserController{@AutowiredprivateUserServiceuserService;@RequestMapping(value="/showAllStudent")publicModelAndViewshowAll(){System.out.println("showAll()...");//创建准备返回的ModelAndView对象,该对象通常包含了返回视图的路径、模型的名称以及模型对象ModelAndViewmodelAndView=newModelAndView();//添加模型数据可以是任意的POJO对象5313.3.6创建Controller类(清单13-15UserController.java)2/2List<User>users=userService.findAll();modelAndView.addObject("users",users);//设置逻辑视图名,视图解析器会根据该名字解析到具体的视图页面modelAndView.setViewName("userlist");//返回ModelAndView对象。returnmodelAndView;}}5413.3.6创建Controller类上述JSP视图负责展示数据。它通过JSTL的<c:forEach>标签来遍历UserController中modelAndView.addObject("users",users)存入的模型数据。${users}会自动从request作用域中获取users(一个List<User>)对象。var="user"将列表中的每一项(一个User对象)赋给user变量。最后,使用EL表达式如${}(或更安全的<c:outvalue="${}"/>),JSP会自动调用user.getName()方法来获取并显示属性值。5513.3.7创建视图在webapp/views目录下创建一个JSP页面文件,清单13-16所示的代码是一个使用JSTL标签显示用户列表的JSP页面,通过forEach循环遍历用户数据并以表格形式展示学号、姓名和性别信息,采用红色边框样式美化表格显示效果。5613.3.7创建视图(清单13-16userlist.jsp)1/2<%@pagecontentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%><%@tagliburi="jakarta.tags.core"prefix="c"%><!DOCTYPEhtml><html><head><title>UserList</title><style>td{border:1pxsolidblack;width:80px;}</style></head><body><table><tr><th>ID</th><th>Name</th><th>Gender</th></tr><c:forEachitems="${users}"var="user"varStatus="status"><tr>5713.3.7创建视图(清单13-16userlist.jsp)2/2<td><c:outvalue="${user.student_id}"/></td><td><c:outvalue="${}"/></td><td><c:outvalue="${user.gender}"/></td></tr></c:forEach></table></body></html>5813.3.8运行应用整个项目的结构如图13-4所示。图13-4SpringMVC整合MyBatis项目结构5913.3.8运行应用运行Tomcat,在浏览器

温馨提示

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

最新文档

评论

0/150

提交评论