springMVC主题的使用心得

合集下载

SpringMVC+Spring+Hibernate框架整合原理,作用及使用方法

SpringMVC+Spring+Hibernate框架整合原理,作用及使用方法

SpringMVC+Spring+Hibernate框架整合原理,作⽤及使⽤⽅法SSM框架是spring MVC ,spring和mybatis框架的整合,是标准的MVC模式,将整个系统划分为表现层,controller层,service层,DAO层四层使⽤spring MVC负责请求的转发和视图管理spring实现业务对象管理,mybatis作为数据对象的持久化引擎原理:SpringMVC:1.客户端发送请求到DispacherServlet(分发器)2.由DispacherServlet控制器查询HanderMapping,找到处理请求的Controller3.Controller调⽤业务逻辑处理后,返回ModelAndView4.DispacherSerclet查询视图解析器,找到ModelAndView指定的视图5.视图负责将结果显⽰到客户端Spring:我们平时开发接触最多的估计就是IOC容器,它可以装载bean(也就是我们中的类,当然也包括service dao⾥⾯的),有了这个机制,我们就不⽤在每次使⽤这个类的时候为它初始化,很少看到关键字new。

另外spring的aop,事务管理等等都是我们经常⽤到的。

Mybatis:mybatis是对jdbc的封装,它让数据库底层操作变的透明。

mybatis的操作都是围绕⼀个sqlSessionFactory实例展开的。

mybatis通过配置⽂件关联到各实体类的Mapper⽂件,Mapper⽂件中配置了每个类对数据库所需进⾏的sql语句映射。

在每次与数据库交互时,通过sqlSessionFactory拿到⼀个sqlSession,再执⾏sql命令。

使⽤⽅法:要完成⼀个功能:1. 先写实体类entity,定义对象的属性,(可以参照数据库中表的字段来设置,数据库的设计应该在所有编码开始之前)。

2. 写Mapper.xml(Mybatis),其中定义你的功能,对应要对数据库进⾏的那些操作,⽐如 insert、selectAll、selectByKey、delete、update等。

Spring总结与思考

Spring总结与思考

Spring总结与思考1、Spring是什么?Spring是⼀个轻量级的控制反转(IoC)和⾯向切⾯(AOP)的容器(框架)。

它的主要⽬得是简化企业开发。

Spring 框架是⼀个分层架构,由 7 个定义良好的模块组成。

Spring 模块构建在核⼼容器之上,核⼼容器定义了创建、配置和管理 bean 的⽅式 .组成 Spring 框架的每个模块(或组件)都可以单独存在,或者与其他⼀个或多个模块联合实现。

每个模块的功能如下:核⼼容器Spring Core:核⼼容器提供 Spring 框架的基本功能。

核⼼容器的主要组件是BeanFactory,它是⼯⼚模式的实现。

BeanFactory 使⽤控制反转(IOC)模式将应⽤程序的配置和依赖性规范与实际的应⽤程序代码分开。

Spring 上下⽂Spring Context:Spring 上下⽂是⼀个配置⽂件,向 Spring 框架提供上下⽂信息。

Spring 上下⽂包括企业服务,例如 JNDI、EJB、电⼦邮件、国际化、校验和调度功能。

Spring AOP:通过配置管理特性,Spring AOP 模块直接将⾯向切⾯的编程功能 , 集成到了 Spring 框架中。

所以,可以很容易地使 Spring 框架管理任何⽀持 AOP的对象。

Spring AOP 模块为基于 Spring 的应⽤程序中的对象提供了事务管理服务。

通过使⽤ Spring AOP,不⽤依赖组件,就可以将声明性事务管理集成到应⽤程序中。

Spring DAO:对JDBC的抽象,简化了数据访问异常的处理;Spring ORM:对现有的ORM框架的⽀持;Spring Web 模块:提供了基本的⾯向Web的综合特性,例如多⽅⽂件上传;Spring MVC 框架:提供⾯向Web应⽤的Model-View-Controller实现。

2、Spring 的优点?(1)spring属于低侵⼊式设计,代码的污染极低;(2)spring的DI机制将对象之间的依赖关系交由框架处理,减低组件的耦合性;3)Spring提供了AOP技术,⽀持将⼀些通⽤任务,如安全、事务、⽇志、权限等进⾏集中式管理,从⽽提供更好的复⽤。

SpringMVC深入总结

SpringMVC深入总结

一、前言:大家好,Spring3 MVC是非常优秀的MVC框架,由其是在3.0版本发布后,现在有越来越多的团队选择了Spring3 MVC了。

Spring3 MVC结构简单,应了那句话简单就是美,而且他强大不失灵活,性能也很优秀。

官方的下载网址是:/download(本文使用是的Spring 3.0.5版本)Struts2也是比较优秀的MVC构架,优点非常多比如良好的结构。

但这里想说的是缺点,Struts2由于采用了值栈、OGNL表达式、struts2标签库等,会导致应用的性能下降。

Struts2的多层拦截器、多实例action性能都很好。

可以参考我写的一篇关于Spring MVC与Struts2与Servlet比较的文章/admin/blogs/698217Spring3 MVC的优点:1、Spring3 MVC的学习难度小于Struts2,Struts2用不上的多余功能太多。

呵呵,当然这不是决定因素。

2、Spring3 MVC很容易就可以写出性能优秀的程序,Struts2要处处小心才可以写出性能优秀的程序(指MVC部分)3、Spring3 MVC的灵活是你无法想像的,Spring的扩展性有口皆碑,Spring3 MVC当然也不会落后,不会因使用了MVC框架而感到有任何的限制。

Struts2的众多优点:略... (呵呵,是不是不公平?)众多文章开篇时总要吹些牛,吸引一下读者的眼球,把读者的胃口调起来,这样大家才有兴趣接着往后看。

本文也没能例外。

不过保证你看了之后不会后悔定有收获。

二、核心类与接口:先来了解一下,几个重要的接口与类。

现在不知道他们是干什么的没关系,先混个脸熟,为以后认识他们打个基础。

DispatcherServlet -- 前置控制器HandlerMapping接口-- 处理请求的映射HandlerMapping接口的实现类:SimpleUrlHandlerMapping 通过配置文件,把一个URL映射到Controller DefaultAnnotationHandlerMapping 通过注解,把一个URL映射到Controller类上HandlerAdapter接口-- 处理请求的映射AnnotationMethodHandlerAdapter类,通过注解,把一个URL映射到Controller类的方法上Controller接口-- 控制器由于我们使用了@Controller注解,添加了@Controller注解注解的类就可以担任控制器(Action)的职责,所以我们并没有用到这个接口。

spring mvc json使用心得

spring mvc json使用心得

spring mvc json使用心得使用 @RequestBody 注解前台只需要向 Controller 提交一段符合格式的JSON,Spring 会自动将其拼装成 bean。

1)在上面的项目中使用第一种方式处理返回JSON的基础上,增加如下方法:Java代码收藏代码@RequestMapping(value="/add",method=RequestMethod.POST, headers ={"content-type=application/json","content-type=application/xml"}) @ResponseBodypublic Object addUser(@RequestBody User user){System.out.println(user.getName() + " " + user.getAge()); return new HashMap<String, String>().put("success", "true"); }这里的POJO如下:Java代码收藏代码public class User {private String name;private String age;//getter setter}2)而在前台,我们可以用 jQuery 来处理 JSON。

从这里,我得到了一个 jQuery 的插件,可以将一个表单的数据返回成JSON对象:Js代码收藏代码$.fn.serializeObject = function(){var o = {};var a = this.serializeArray();$.each(a, function(){if (o[]) {if (!o[].push) {o[] = [o[]];}o[].push(this.value || '');}else {o[] = this.value || '';}});return o;};以下是使用 jQuery 接收、发送 JSON 的代码:Js代码收藏代码$(document).ready(function(){jQuery.ajax({type: 'GET',contentType: 'application/json',url: 'jsonfeed.do',dataType: 'json',success: function(data){if (data && data.status == "0") {$.each(data.data, function(i, item){$('#info').append("姓名:" + +",年龄:" +item.age);});}},error: function(){alert("error")}});$("#submit").click(function(){var jsonuserinfo =$.toJSON($('#form').serializeObject());jQuery.ajax({type: 'POST',contentType: 'application/json',url: 'add.do',data: jsonuserinfo,dataType: 'json',success: function(data){alert("新增成功!");},error: function(){alert("error")}});});});但是似乎用Spring这套东西真是个麻烦的事情,相对Jersey对RESTful的实现来看,确实有很多不简洁的地方。

java框架实训总结与体会

java框架实训总结与体会

java框架实训总结与体会
在进行Java框架实训后,我深刻体会到了框架的重要性和实际应用价值。

首先,通过实训我更加深入地理解了Spring、Spring MVC和MyBatis等框架的原理和使用方法。

这些框架为Java开发提供了丰富的工具和功能,能够大大提高开发效率和代码质量。

在实训中,我学会了如何使用Spring框架进行依赖注入和AOP编程,以及如何利用Spring MVC构建Web应用程序。

同时,通过MyBatis框架,我学会了如何简化数据库访问的过程,提高了数据持久层的开发效率。

其次,实训让我深刻认识到了框架的设计思想和模式对项目开发的重要性。

框架提倡的约定大于配置的理念,使得项目开发更加规范和高效。

同时,框架提供的模块化设计和可扩展性,使得项目具有更好的可维护性和可扩展性。

在实训中,我意识到了良好的框架设计能够极大地减少重复性工作,提高了代码的复用性和可维护性。

最后,通过实训我还深刻体会到了团队合作的重要性。

在实训过程中,我和同学们共同学习、讨论和解决问题,相互协作完成了项目任务。

这让我认识到了团队合作对于项目成功的关键性作用,
同时也提高了我的沟通和协作能力。

总的来说,Java框架实训让我受益匪浅,不仅提高了我的技术水平,也增强了我对团队合作和项目开发的认识。

我深信框架的应用将会在我的未来项目开发中发挥重要作用,提高项目的质量和效率。

MVC开发模式的个人心得体会

MVC开发模式的个人心得体会

MVC开发模式的个⼈⼼得体会
学习编程以来的第⼀篇博客,尽⼰所能地表达个⼈理解的MVC模式。

MVC的概念:MVC是软件⼯程中的⼀种软件架构模式,它将整个软件系统划分为模型层(Model)、视图层(View)、控制层(Controller),因此简称为MVC。

其中模型层(Model)包含了应⽤程序的业务逻辑和业务数据,视图层(View)提供了和⽤户进⾏交互的场地,控制层(Controller)处理接受⽤户的请求以及返回处理结果。

⾸次接触MVC模式,是在学校java web框架编程的课上,其实在学MVC之前做过⼀个简单的⽹站,但由于当时不懂MVC,简单地认为jsp就是将java代码写在html的页⾥,便将⼤量的java代码都写在jsp中,甚⾄包括了数据库的连接信息参数等,这样做的缺点很明显,代码的重复量太⼤,⽽且使得⼀个jsp⽂件⾥的代码量太⼤,如果出现了bug,找起来也不⽅便。

因此在寒假⾥,我决定尝试⽤MVC模式重新构建⼀下这个⽹站。

MVC的优点很明显地体现在:将显⽰层和功能层彻底分开,jsp⽂件⾥不再有业务逻辑,这样降低了耦合程度,同时也⼤⼤降低了后期维护的难度。

层与层之间的划分明确,更有利于合作开发。

但在运⽤MVC模式时也感觉到了⼀些缺点,因为层与层之间的以来降低是通过接⼝实现的,所以这样增加了结构的复杂性。

还有就是,视图层和控制器层虽然是分离的,但视图层若缺失了控制器的作⽤,起到作⽤极⼩,就⽆法进⾏再次利⽤。

SpringMVC学习总结

SpringMVC学习总结

SpringMVC学习总结
Spring MVC 学习总结
本例是做一个Login登录,输入username和password提交后,跳到login.html页面,并在login.html页面显示输入的username和password内容。

如下图:
一、IntelliJ idea(14.1.7)创建Maven项目
File –> New –> Project –> Maven –>勾上Create from archetype –>选择maven-archetype-webapp–> Next
输入GroupId和AtifactId -> Next
下一步,直接点Next
输入Project Name -> Finish
输入完成后,点击右上角的【Enable Auto-Import】
选择右边红框的Enable-Auto-Import,可以在每次修改pom.xml后,自动的下载并导入jar包,这一点在后面详述。

到这里为止,基本的框加已经搭建完成。

搭建完成后的目录
二、导入相关的Jar包
我建的是Maven项目,所以可以在pom.xml里配置,Maven就会自动导入相应的jar 包
需要以下的jar包,不是每一个都用到,可以先全部导入
org.springframework
spring-core
4.2.6.RELEASE。

spring学习心得

spring学习心得

控制反转(IoC):spring容器根据配置文件信息,负责创建某类实例,并为实例设置属性值——这种由spring 容器为对象设置属性的方式被称为控制反转Spring的核心机制:依赖注入当某个java实例需要其他java实例时,系统自动提供所需要的实例,无需程序显式获取使用依赖注入不仅可以为Bean注入普通的属性值,还可以注入其他Bean的引用所谓依赖注入,就是在在运行期间,有外部容器动态地将依赖对象注入到组件中(构造方法和set方法)不管是控制反转还是依赖注入,其含义完全相同:当某个java实例(调用者)需要另一个java实例(被调用者)时,在传统的程序设计过程中,在传统的程序设计当中,通常由调用者来创建被调用者的实例在依赖注入的模式下,创建被调用者的工作不再由调用者来完成,因此称为控制反转;创建被调用者实例的工作通常是由spring容器来完成,然后注入调用者,因此也称为依赖注入依赖注入通常有两种:1)设值注入:设值注入是指IoC容器使用属性的setter方法来注入被依赖的实例2)构造注入:这种利用构造器来设置依赖关系的方式,被称为构造注入两种注入方式的区别:创建Person实例中Axe属性的时机不同——设值注入是先通过无参数的构造器创建一个bean实例,然后调用对应的setter方法注入依赖关系;而构造注入则直接调用有参数的构造器,当bean实例创建完成后,已经完成了依赖关系的注入Spring提供的服务1)事物管理服务2)JMS服务(Java消息服务是基于java的消息中间件、是javaEE的一部分、用于在多个Java应用之间发送消息、该机制使得多个分布式应用可以异步通信、提高软件可靠性、降低耦合度)3)Spring core核心服务4)持久化服务ApplicationContext事件机制:Spring的事件机制与所有的事件机制都基本相似,它们都需要事件源、事件、事件监听器,此处的事件源是ApplicationContext,且事件必须有java程序显式触发Spring事件框架有两个重要成员:1)ApplicationEvent:容器事件,必须由ApplicationContext发布2)ApplicationListener:监听器,可由容器中的任何监听器bean担任通过ApplicationEvent类和ApplicationListener接口,可实现ApplicationContext的事件处理如果容器中有一个ApplicationListener Bean,每当ApplicationContext发布ApplicationEvent时,ApplicationListener Bean将自动被触发在默认情况下,当spring创建ApplicationContext容器时,Spring会自动预初始化容器中所有的singleton实例,如果我们不想让Spring容器预初始化某个singleton Bean,则可为该<bean…/>元素增加lazy-init属性,指定该属性为true,则Spring不会预初始化该Bean实例,如下面配置文件所示:<bean id=”bean2” class=”lee.Test2” lazy-init=”true”/>容器中Bean的作用域当通过Spring容器创建一个Bean实例时,不仅可以完成Bean实例的实例化,还可以为Bean指定特定的作用域,Spring支持如下的5种作用域1)singleton:单例模式,在整个Spring IoC容器中,使用singleton定义的Bean将只有一个实例2)prototype:原型模式,每次通过容器的getBean方法获取prototype定义的Beans时,都将产生一个新的Bean实例3)request:对于每次HTTP请求,使用request定义的Bean都将产生一个新实例,即每次HTTP请求都将会产生不同的Bean实例。

springboot学习心得

springboot学习心得

springboot学习心得SpringBoot 学习心得在完成对 SpringBoot 的学习之后,我深刻体会到了这个框架的强大和便利之处。

SpringBoot 是一个基于 Spring 框架的快速开发框架,通过自动配置和简化的约定,大大提高了开发效率。

下面是我对于 SpringBoot 学习的一些心得和总结。

一、简洁高效的开发体验使用 SpringBoot 可以极大地简化项目的配置和搭建过程。

通过使用 SpringBoot Starter 依赖,我们可以轻松地引入各种常用的依赖,而无需手动去配置。

同时,SpringBoot 的自动配置机制可以根据项目中引入的依赖,自动为我们配置相关的组件和功能。

这使得我们可以将更多的精力放在业务逻辑的实现上,而不需要过多关注繁琐的配置工作。

二、内嵌 Tomcat 使得部署更加方便SpringBoot 默认内嵌了 Tomcat 容器,这意味着我们可以将项目打包成一个独立的可运行的 JAR 文件,并直接通过命令行启动应用。

这种方式不仅方便了项目的部署,还减少了对外部服务器的依赖。

另外,SpringBoot 还支持通过 WAR 包的方式部署到外部容器中,这样可以更好地与传统的应用服务器集成。

三、强大的功能扩展能力SpringBoot 提供了大量的插件和扩展点,可以帮助开发者定制化自己的应用。

比如,我们可以通过自定义 Starter 来封装一些通用的组件和功能,方便之后的重复使用。

或者通过自定义 Starter 来封装一些通用的组件和功能,方便之后的重复使用。

或者通过自定义条件注解和条件类来实现一些特定环境下的自动配置。

这些功能扩展能力让我们在开发过程中能够更加灵活地满足自己的需求。

四、完善的监控和运维支持在生产环境中,监控和运维是非常重要的一环。

SpringBoot 提供了丰富的监控和运维支持,可以帮助我们更好地监控应用的运行状态和性能指标。

比如,我们可以通过 Actuator 模块来暴露应用的健康状态、运行信息和性能指标,方便运维人员进行监控和故障排查。

毕业设计spring mvc

毕业设计spring mvc

毕业设计spring mvc毕业设计Spring MVC一、引言在计算机科学与技术领域,毕业设计是学生在大学期间的重要任务之一。

作为一个软件开发项目,毕业设计旨在让学生将所学的理论知识应用到实际项目中,并通过实践来提升自己的技术能力和解决问题的能力。

本文将介绍一个常见的毕业设计主题,即使用Spring MVC框架进行开发。

二、Spring MVC简介Spring MVC是一个基于Java的Web应用开发框架,它采用了Model-View-Controller(MVC)的架构模式,用于构建灵活、可扩展和高效的Web应用程序。

Spring MVC提供了一套强大的功能,包括请求处理、视图解析、数据绑定、表单验证等,使得开发人员可以更加专注于业务逻辑的实现。

三、项目需求分析在进行毕业设计之前,首先需要进行项目需求分析。

这个阶段的目标是明确项目的功能和特性,以便后续的开发工作能够有一个明确的目标。

例如,一个简单的毕业设计项目可以是一个在线图书销售平台,其中包括用户注册、图书浏览、购买和评论等功能。

四、项目架构设计在确定了项目需求之后,接下来需要进行项目架构设计。

项目架构设计是指确定项目的整体结构和组织方式,包括模块划分、数据库设计、系统接口定义等。

在使用Spring MVC进行开发时,可以将项目划分为控制器层、服务层和数据访问层等模块,并使用Spring的依赖注入机制来管理各个模块之间的依赖关系。

五、数据库设计在进行数据库设计时,需要根据项目需求分析的结果来确定数据库的表结构和字段。

例如,在图书销售平台的项目中,可以设计一个用户表、图书表和订单表等。

同时,还需要考虑数据库的性能和安全性等方面的问题,例如使用索引来提高查询效率,使用密码加密算法来保护用户密码等。

六、前端设计在进行前端设计时,可以使用HTML、CSS和JavaScript等技术来实现用户界面。

Spring MVC提供了视图解析器的功能,可以将后端数据与前端页面进行绑定,从而实现动态的Web页面。

ssm总结

ssm总结

ssm总结SSM(Spring+SpringMVC+MyBatis)框架是一种企业级Java 开发框架,集成了Spring、SpringMVC和MyBatis三个主要组件,它们分别负责业务逻辑、Web请求处理和数据库操作。

SSM框架的诞生解决了传统Java开发中繁琐的配置和低效的开发方式,提供了一种更加便捷和高效的开发模式。

首先,SSM框架的核心组件之一是Spring框架。

Spring框架是Java应用程序开发中最常用的开发框架之一,它提供了面向切面编程(AOP)和控制反转(IOC)等强大的功能。

通过使用Spring框架,开发人员可以更好地解耦应用程序的各个模块,并且可以通过注解方式来声明依赖关系,简化了编码过程。

此外,Spring还提供了一系列的企业级开发功能,如事务管理、远程调用、(RMI、Hessian、Burlap、HTTP Invoker 等)、消息队列(JMS)、定时任务(Quartz)、缓存(EHCache、Redis)等。

其次,SSM框架的另一个核心组件是SpringMVC。

SpringMVC是基于MVC(Model-View-Controller)设计模式的Web框架。

它提供了一个强大的分离和组织应用程序逻辑的方式,使得开发人员可以更好地分工合作,并且可以将不同的模块独立开发、测试和维护。

SpringMVC还提供了一系列的Web开发功能,如表单处理、数据校验、文件上传、JSON/XML的数据支持、RESTful风格的URL映射等。

最后,SSM框架的第三个核心组件是MyBatis。

MyBatis是一种优秀的持久层框架,它简化了数据库操作的编码过程。

相比传统的JDBC操作,MyBatis通过使用XML或注解描述SQL语句,提供了更加便捷和灵活的数据库访问方式。

同时,MyBatis还具备分页查询、缓存管理、动态SQL等一系列高级功能,极大地提升了数据库操作的效率和开发人员的开发体验。

基于MVC模式的struts和spring框架的分析及整合

基于MVC模式的struts和spring框架的分析及整合

基于M V C模式能J St r ut s和Spr i ng框架的分析及整合任仁(同济大学软件学院上海200092)【攘要】简单介鲠[J2E E,详述州C模式中N odel,V i ew以及C ont r o l l er之间的关系。

对目前-eb应用开发中的两个流行框架st r u t s和spr i ng进行了分析。

针对这两个框架的优点和不足,提出一个将两种框架分层应用、整合形成的新框架。

新的框架充分利用St r u t s、Spr i ng框柴技术的各层的优点,弥补之前两个框架中的不足。

【关键词】J2E E i f fC模式St r u t s框架Spri ng框架整合中图分类号:TP3文献标识码:A文章编号;1671--7597(2008)I”0051--01一、J2E E胃介J2EE(J ava2E nt er pr i s e E di t i on)是建立在J ava2qz台上的企业级应用的解决方案。

J2E E技术的基础便是Jav a2平台,不但有J2SE平台的所有功能,同时还提供r对EJB,Ser v l et,JSp,xM L等技术的全面支持,其最终目标是成为一个支持企业级应用开发的体系结构,简化企业解决方案的开发,部署和管理等复杂问题。

事实上,J2EE已经成为企业级开发的工业标准和首选平台。

J2E E并非一个产品,而是~系列的标准。

=、M vC设计文式M V C英文即(M ode l一V i ew-C ont r ol l e r),即把一个应用的输入、处理、输出流程按照M o del、V i ew、C ont r ol l e r的方式进行分离,这样一个应用被分成三个层模型层、视图层、控制层。

视图(vi m代表用户交互界面,对于W eb应用来说,可以概括为H TM L界面。

但有可能为X H T M L、X M L和A ppl e t。

模型(M ode l)就是业务流程/状态的处理以及业务规则的制定。

前端开发实习总结范文大全

前端开发实习总结范文大全

前端开发实习总结范文大全前端开发实习总结范文大全随着Web应用的兴起,Web前端出现了翻天覆地的变化,网站前端开发的实习生怎么写总结呢?前端开发实习总结一还是感叹一下时间的飞逝,大学一直在寻找,自己将来到底要干嘛?好在虽然学校老师教得不多,安排的项目到是挺多,做过不同类型的项目,做过游戏,做过.net,其实也是,我只是普通人,无法在一开始就明确自己要做什么,还不是在一个个项目里面才发现自己擅长和喜欢的。

在2016年年初学习了有关前端的基本知识,隐隐约约感觉前端水很深啊,我第一感觉是基础最重要,得先把图切好,科学的还原.psd文件,自己用课余时间看书也看不出个名堂,所以在3月份就准备实习,刚好学校这学期专业课做项目的少了,假也好请,就请假出去实习了。

实习一(切图重构+Jquery效果实现):先感慨一下我的运气,再郑重感谢招我进来的leader,遇到了其他好学校里面优秀的人,leader很严格,因为我前端了解得少,才在课余时间看了几本书,视频都没看过(我也觉得神奇,当时都没想到看视频,看大牛的教程,但是看了估计就没胆量找实习了,哈哈),就给我一个星期试用,其中的压力就不再多说了。

实习了差不多3个月,学了很多,也上线了自己重构的网页,虽然只是静态,但我还是有点小激动,了解了大多数特效的原理并能用Jquery实现,无缝轮播,滚动,图集,这些,然后学校有事,就离开了。

以前没有基础很慌张,现在切得一手好图更慌张,咋感觉水还是那么深呢,那么多框架,他们之间有什么联系和区别啊,直接去学一个框架?感觉只是去用,会调API而已,我迷茫了。

实习二(前端MVC+SPA单页面+前端开发组件化+RESTful API):再次感慨我的运气,郑重感谢招我进来的leader和带我的前端大牛导师,这次实习让我真正上路了。

我运气好啊,进去半个月就有新项目,然后导师带我一起,他让我先自己写,自己根据低保真的需求去实现功能,然后再一边向我讲解一遍重构我的代码。

SpringMVC学习笔记

SpringMVC学习笔记

SpringMVC学习笔记作者:胡晟源。

QQ:1312837781配置spring提示:1 Spring Tool Suit (STS)2 Hibernate Tools对于JUNO版本的Eclipse 可以在help->Eclipse Marketplace 输入插件的名字在列表中选择插件安装就可以了。

SpringMvc原理图解:导入jar包一:springmvc工作流程。

①.servlet容器初始化一个request请求②.DispatcherServlet分发器负责发送请求到映射器.③.despatcherServlet把请求交给处理器映射Mapping,mapping来寻找需要执行的control④.处理器映射把请求分发给控制器Controler。

⑤.Controler执行完毕后返回ModelAndView(视图解析器)⑥.把ModelAndView返回给dispatcherServlet核心分发器⑦.由于DespatcherServlet不参与具体的处理,所以把modelAndView交给视图解析器。

⑧.视图解析器解析成一个真正的视图,再发给view然后response。

ParameterizableViewController(参数控制器)①.在springmvc-servlet.xml里面加上配置②.通过参数控制器访问页面流程解析:也可以直接在参数控制器里定义name属性,直接通过name属性地址来访问。

如下:但要注意的是:配置文件里必须有BeanNameUrlHandlerMapping情况下,默认映射将会被覆盖;以name属性;来访问将会失败。

命令控制器③.在springmvc里面有如下配置。

④.使用简单url进行访问,参数被封装进javabean。

http://localhost:8080/mysm/comm.do?id=1&userName=zhangsan&password=123&age=13 命令控制器①.首先:springMVC有三个映射器,如果不定义映射Mapping,那么就会使默认:●<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>也就是说:上面这个定义和不定义都是一样的。

spring框架心得体会

spring框架心得体会

spring框架心得体会Spring框架是一个非常流行的企业级Java应用程序开发框架,它具有良好的扩展性、灵活性和高效性。

通过使用Spring框架,我收获了以下几方面的体会和心得。

首先,Spring框架提供了一种基于IoC(控制反转)和AOP(面向切面编程)的开发模式。

这种模式使得应用程序的开发变得非常灵活,可以更加容易实现不同层之间的解耦和模块化。

通过IoC容器的帮助,我们可以将对象的创建和管理的责任转移到Spring框架中,从而降低了开发的复杂度和耦合度。

而通过AOP的支持,我们可以将横切关注点独立出来,实现业务逻辑和横切逻辑的分离,提高了代码的可维护性和可重用性。

其次,Spring框架具有非常丰富的功能和组件。

无论从数据访问、事务管理、Web开发、消息传递到安全性等方面,Spring框架都提供了各种各样的实现方式和配置选项。

例如,通过使用Spring的数据访问模块,我们可以非常方便地集成不同的数据源和ORM框架,实现对数据库的访问。

而使用Spring的事务管理功能,我们可以轻松地实现数据库事务的管理和控制。

使用Spring的Web开发模块,我们可以很容易地实现MVC架构,并且支持各种不同的Web框架和技术。

这些功能和组件的丰富性和可扩展性,使得开发人员可以根据自己的需求选择最适合自己项目的配置和实现方式。

此外,Spring框架还具有很好的可测试性。

在使用Spring框架的开发过程中,我们可以非常方便地使用单元测试和集成测试对应用程序进行测试。

通过使用Spring的依赖注入功能,我们可以很容易地将各个模块和组件进行解耦,把依赖关系交由Spring框架来管理。

这样,我们就可以方便地对每个模块和组件进行单独的测试,从而保证代码的质量和可靠性。

最后,Spring框架还提供了非常丰富的文档和社区支持。

在学习和使用Spring框架的过程中,我发现Spring官方文档详细全面,对框架的各个方面都有详细的介绍和示例代码。

Springmvc 组合jackson与fastjson使用心得

Springmvc 组合jackson与fastjson使用心得

Springmvc 组合jackson与fastjson使用心得1、解决方案可以将其中的main方法删掉。

测试用的。

我测试的结果是,jackson比fastjson 快。

fastjson是1.1.36jackson是2.2.3jdk是1.7.40,clientcpu是intel i32、主要代码package org.springframework.web.servlet.view.json;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.OutputStream;import java.io.StringReader;import java.io.StringWriter;import java.nio.charset.Charset;import java.util.ArrayList;import java.util.Collections;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.Set;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.util.CollectionUtils;import org.springframework.validation.BindingResult;import org.springframework.web.servlet.view.AbstractView;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.parser.Feature;import com.alibaba.fastjson.serializer.SerializerFeature;import com.fasterxml.jackson.core.JsonFactory;import com.fasterxml.jackson.core.JsonGenerator;import com.fasterxml.jackson.core.JsonParseException;import com.fasterxml.jackson.core.JsonProcessingException;import com.fasterxml.jackson.core.type.TypeReference;import com.fasterxml.jackson.databind.JsonMappingException;import com.fasterxml.jackson.databind.MappingIterator;import com.fasterxml.jackson.databind.ObjectMapper;import mon.collect.Lists;import mon.collect.Maps;import mon.collect.Sets;import er;public class MappingFastJsonView extends AbstractView {/*** Default content type: "application/json".* Overridable through {@link #setContentType}.*/public static final String DEFAULT_CONTENT_TYPE = "application/json"; private String encoding = "UTF-8";private String jsonPrefix;private Boolean prettyPrint;private Set<String> modelKeys;private boolean extractValueFromSingleKeyModel = false;private boolean disableCaching = true;private boolean updateContentLength = false;/*** Construct a new {@code MappingFastJsonView}, setting the content type to {@code application/json}.*/public MappingFastJsonView() {setContentType(DEFAULT_CONTENT_TYPE);setExposePathVariables(false);}public String getEncoding() {return encoding;}public void setEncoding(String encoding) {this.encoding = encoding;}/*** Specify a custom prefix to use for this view's JSON output.* Default is none.* @see #setPrefixJson*/public void setJsonPrefix(String jsonPrefix) {this.jsonPrefix = jsonPrefix;}/*** Indicates whether the JSON output by this view should be prefixed with <tt>"{} && "</tt>.* Default is {@code false}.* <p>Prefixing the JSON string in this manner is used to help prevent JSON Hijacking.* The prefix renders the string syntactically invalid as a script so that it cannot be hijacked.* This prefix does not affect the evaluation of JSON, but if JSON validation is performed* on the string, the prefix would need to be ignored.* @see #setJsonPrefix*/public void setPrefixJson(boolean prefixJson) {// if (prefixJson) {// if (jsonPrefix == null) {// jsonPrefix = "{} && ";// }// }this.jsonPrefix = (prefixJson ? "{} && " : null);}/*** Whether to use the default pretty printer when writing JSON. * This is a shortcut for setting up an {@code JSON}* <p>The default value is {@code false}.*/public void setPrettyPrint(boolean prettyPrint) {this.prettyPrint = prettyPrint;}/*** Set the attribute in the model that should be rendered by this view. * When set, all other model attributes will be ignored.*/public void setModelKey(String modelKey) {this.modelKeys = Collections.singleton(modelKey);}/*** Set the attributes in the model that should be rendered by this view.* When set, all other model attributes will be ignored.*/public void setModelKeys(Set<String> modelKeys) {this.modelKeys = modelKeys;}/*** Return the attributes in the model that should be rendered by this view.*/public final Set<String> getModelKeys() {return this.modelKeys;}/*** Set whether to serialize models containing a single attribute as a map or whether to* extract the single value from the model and serialize it directly. * <p>The effect of setting this flag is similar to using {@code MappingJacksonHttpMessageConverter}* with an {@code @ResponseBody} request-handling method.* <p>Default is {@code false}.*/public void setExtractValueFromSingleKeyModel(boolean extractValueFromSingleKeyModel) {this.extractValueFromSingleKeyModel = extractValueFromSingleKeyModel;}* Disables caching of the generated JSON.* <p>Default is {@code true}, which will prevent the client from caching the generated JSON.*/public void setDisableCaching(boolean disableCaching) {this.disableCaching = disableCaching;}/*** Whether to update the 'Content-Length' header of the response. When set to* {@code true}, the response is buffered in order to determine the content* length and set the 'Content-Length' header of the response.* <p>The default setting is {@code false}.*/public void setUpdateContentLength(boolean updateContentLength) { this.updateContentLength = updateContentLength;}@Overrideprotected void prepareResponse(HttpServletRequest request, HttpServletResponse response) {setResponseContentType(request, response);response.setCharacterEncoding(encoding);if (this.disableCaching) {response.addHeader("Pragma", "no-cache");response.addHeader("Cache-Control", "no-cache, no-store, max-age=0");response.addDateHeader("Expires", 1L);}}@Overrideprotected void renderMergedOutputModel(Map<String, Object> model, HttpServletRequest request, HttpServletResponse response)throws Exception {OutputStream stream = (this.updateContentLength ? createTemporaryOutputStream() : response.getOutputStream());Object value = filterModel(model);writeContent(stream, value, this.jsonPrefix);if (this.updateContentLength) {writeToResponse(response, (ByteArrayOutputStream) stream);}/*** Filter out undesired attributes from the given model.* The return value can be either another {@link Map} or a single value object.* <p>The default implementation removes {@link BindingResult} instances and entries* not included in the {@link #setRenderedAttributes renderedAttributes} property.* @param model the model, as passed on to {@link#renderMergedOutputModel}* @return the value to be rendered*/protected Object filterModel(Map<String, Object> model) {Map<String, Object> result = new HashMap<String,Object>(model.size());Set<String> renderedAttributes =(!CollectionUtils.isEmpty(this.modelKeys) ? this.modelKeys :model.keySet());for (Map.Entry<String, Object> entry : model.entrySet()) {if (!(entry.getValue() instanceof BindingResult) && renderedAttributes.contains(entry.getKey())) {result.put(entry.getKey(), entry.getValue());}}return (this.extractValueFromSingleKeyModel && result.size() == 1 ? result.values().iterator().next() : result);}/*** Write the actual JSON content to the stream.* @param stream the output stream to use* @param value the value to be rendered, as returned from {@link #filterModel}* @param jsonPrefix the prefix for this view's JSON output* (as indicated through {@link #setJsonPrefix}/{@link#setPrefixJson})* @throws IOException if writing failed*/protected void writeContent(OutputStream stream, Object value, String jsonPrefix) throws IOException {List<SerializerFeature> list = newArrayList<SerializerFeature>();if (prettyPrint != null && prettyPrint) {list.add(SerializerFeature.PrettyFormat);}SerializerFeature[] features = newSerializerFeature[list.size()];list.toArray(features);byte[] jsonBytes = JSON.toJSONBytes(value, features);if (jsonPrefix != null) {//此处亦可字符串相加,然后转成字节数组byte[] prefixBytes =jsonPrefix.getBytes(Charset.forName("UTF-8"));int prefixLength = prefixBytes.length;int jsonLength = jsonBytes.length;byte[] finalJsonBytes = new byte[prefixLength + jsonLength];System.arraycopy(prefixBytes, 0, finalJsonBytes, 0, prefixLength);System.arraycopy(jsonBytes, 0, finalJsonBytes, prefixLength, jsonLength);stream.write(finalJsonBytes);} else {stream.write(jsonBytes);}stream.flush();}public static void main(String[] args) {List<User> users = Lists.newArrayList();for (int j = 0; j < 10; j++) {User value = new User();value.setAddress("asdfjklasdjf");value.setAge(22);value.setGender(1);value.setPassword("jkljklj");value.setUserName("");List<String> strList = Lists.newArrayList();Map<String, String> strMap = Maps.newHashMap();Set<Integer> setInt = Sets.newHashSet();for (int i = 0; i < 10; i++) {strList.add("a" + i);strMap.put("a" + i, "a" + i);setInt.add(i);}value.setSetInt(setInt);value.setStrList(strList);value.setStrMap(strMap);users.add(value);}int times = 1;// long d = System.currentTimeMillis();// String jsonPrefix = "aaa{}";//// for (int i = 0; i < times; i++) {// byte[] jsonBytes = JSON.toJSONBytes(value);// byte[] prefixBytes =jsonPrefix.getBytes(Charset.forName("UTF-8"));// int prefixLength = prefixBytes.length;// int jsonLength = jsonBytes.length;// byte[] finalJsonBytes = new byte[prefixLength + jsonLength];//// System.arraycopy(prefixBytes, 0, finalJsonBytes, 0, prefixLength);// System.arraycopy(jsonBytes, 0, finalJsonBytes, prefixLength, jsonLength);// }// System.out.println(System.currentTimeMillis() - d);String json = "";String json2 = "";long d2 = System.currentTimeMillis();//String jsonPrefix2 = "aaa{}";for (int i = 0; i < times; i++) {json = JSON.toJSONString(users);// jsonBytes = jsonPrefix2 + jsonBytes;//// byte[] prefixBytes =jsonBytes.getBytes(Charset.forName("UTF-8"));}System.out.println("fastjson parser :" +(System.currentTimeMillis() - d2));ObjectMapper mapper = new ObjectMapper();//org.codehaus.jackson.map.ObjectMapper mapper = new org.codehaus.jackson.map.ObjectMapper();long d3 = System.currentTimeMillis();//String jsonPrefix3 = "aaa{}";for (int i = 0; i < times; i++) {//String jsonBytes = null;try {//StringWriter writer = new StringWriter();//JsonGenerator generator = newJsonFactory().createGenerator(writer);//mapper.writeValue(writer, value);//jsonBytes = writer.toString();json2 = mapper.writeValueAsString(users);//mapper.readValue(new StringReader(""), class1); } catch (Exception e) {e.printStackTrace();}// jsonBytes = jsonPrefix3 + jsonBytes;//// byte[] prefixBytes =jsonBytes.getBytes(Charset.forName("UTF-8"));}System.out.println("jackson parser :" +(System.currentTimeMillis() - d3));long d5 = System.currentTimeMillis();for (int i = 0; i < times; i++) {JSON.parseArray(json, User.class);}System.out.println("fastjson deserializer :" + (System.currentTimeMillis() - d5));long d4 = System.currentTimeMillis();for (int i = 0; i < times; i++) {try {//List<User> userList = Lists.newArrayList();mapper.readValue(json2, new TypeReference<List<User>>() {});// List<User> userList = Lists.newArrayList();// for (;iterator.hasNext();) {// userList.add(iterator.nextValue());// }//System.out.println(userList);} catch (JsonParseException e) {e.printStackTrace();} catch (JsonMappingException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}System.out.println("jackson deserializer :" +(System.currentTimeMillis() - d4));}}package com.test;import java.util.List;import java.util.Map;import java.util.Set;import javax.xml.bind.annotation.XmlRootElement;@XmlRootElementpublic class User {private String userName;private String address;private int age;private int gender;private String password;private List<String> strList;private Map<String, String> strMap;private Set<Integer> setInt;public String getUserName() {return userName;}public void setUserName(String userName) {erName = userName;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public int getGender() {return gender;}public void setGender(int gender) {this.gender = gender;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public List<String> getStrList() {return strList;}public void setStrList(List<String> strList) { this.strList = strList;}public Map<String, String> getStrMap() {return strMap;}public void setStrMap(Map<String, String> strMap) { this.strMap = strMap;}public Set<Integer> getSetInt() {return setInt;}public void setSetInt(Set<Integer> setInt) {this.setInt = setInt;}}。

spring框架心得体会

spring框架心得体会

spring框架心得体会Spring框架作为Java企业级应用开发的重要工具,具有轻量级、灵活性、可扩展性等优势。

在我使用Spring框架的过程中,我有以下一些心得体会。

首先,Spring框架提供了依赖注入(Dependency Injection)机制,使得对象之间的依赖关系不再硬编码在代码中,而是通过配置文件进行管理。

这样的设计可以让程序的耦合度大大降低,增加了代码的可维护性和可扩展性。

通过依赖注入,我们可以将组件的创建、装配和管理交由Spring容器去完成,大大简化了开发的工作量。

其次,Spring框架提供了面向切面编程(Aspect-Oriented Programming)的支持。

通过使用切面(Aspect)和切点(Pointcut),我们可以将与业务逻辑无关的横切关注点(如日志记录、事务管理等)从业务代码中提取出来,以此实现关注点的分离。

这样一来,我们可以在不修改原有业务逻辑代码的情况下,灵活地增加、删除和修改关注点,提高了代码的重用性和系统的灵活性。

另外,Spring框架也提供了丰富的模块化功能。

无论是Web开发、数据访问、安全认证还是消息队列等,Spring框架都提供了相应的模块,使得开发者可以根据项目的需要选择使用。

这样的模块化设计,不仅提高了开发效率,也降低了项目的复杂度。

此外,Spring框架还为开发者提供了方便的测试支持。

利用Spring的测试框架,我们可以很方便地进行单元测试、集成测试和系统测试。

通过集成Spring框架和JUnit等测试框架,我们可以实现对Spring组件的自动化测试,保证代码的可靠性和稳定性。

在使用Spring框架的过程中,我也发现了一些需要注意的点。

首先,由于Spring框架是一个功能相对较为庞大而复杂的框架,因此在学习和使用时需要有一定的时间和精力投入。

其次,由于Spring框架提供了很多可扩展和可配置的功能,因此在项目中需要谨慎选择和配置所需要的功能,避免增加项目的复杂度和不必要的开销。

spring项目个人工作总结

spring项目个人工作总结

一、前言随着我国互联网行业的快速发展,Java技术在国内应用越来越广泛。

Spring框架作为Java领域的主流技术之一,在众多项目中发挥着重要作用。

在过去的一年里,我有幸参与了一个Spring项目的开发,以下是我对此次项目的一些总结和感悟。

二、项目背景及目标该项目是一个基于Spring框架的B2C电商平台,旨在为用户提供便捷的购物体验。

项目主要包含以下功能模块:商品管理、订单管理、用户管理、支付接口等。

通过该项目,我深入了解Spring框架在业务开发中的应用,提高了自己的实际动手能力。

三、工作内容与成果1. 技术选型与框架搭建在项目初期,我负责技术选型与框架搭建。

经过对Spring、Spring MVC、MyBatis等框架的调研,最终确定了采用Spring Boot作为项目框架,以简化开发流程,提高开发效率。

2. 业务模块开发在业务模块开发过程中,我遵循SOLID原则,将业务逻辑封装成服务层,实现业务解耦。

以下是我参与开发的部分业务模块:(1)商品管理模块:负责商品信息的增删改查,包括商品分类、品牌、规格等。

(2)订单管理模块:实现订单的创建、修改、删除、查询等功能,包括订单状态、支付方式等。

(3)用户管理模块:实现用户注册、登录、信息修改、密码找回等功能。

(4)支付接口模块:集成第三方支付接口,实现订单支付功能。

3. 系统测试与优化在项目开发过程中,我注重单元测试和集成测试,确保代码质量。

针对测试过程中发现的问题,及时进行优化和修复。

同时,我还对项目性能进行了调优,提高了系统响应速度。

4. 项目部署与维护项目上线后,我负责系统的部署和维护工作。

包括监控系统运行状态、处理用户反馈、解决线上问题等。

四、个人收获与感悟1. 深入了解Spring框架:通过参与项目,我对Spring框架有了更深入的了解,掌握了Spring Boot、Spring MVC、MyBatis等技术的实际应用。

2. 提高编程能力:在项目开发过程中,我学会了如何将理论知识应用到实际项目中,提高了自己的编程能力。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

springMVC主题的使用心得
在实际开发中,经常会碰到这样一个问题,客户要求更换版面风格。

不一定是美工做的不好,也有可能是客户的视觉疲劳。


已在项目的开始阶段,最好就要考虑这些灵活的需求变化。

这个在网站程序中称为:主题(theme)
主题的实现原理:大概就是把网站版面的css样式表和图片之类的文件,和网站的程序进行解耦。

程序读取theme的持久化配置
,然后找到相应的css样式表和图片,配置网站版面。

本篇文章是翻译的springMVC的主题部分,希望大家以后构架项目的初期,就多考虑国际化、主题等需求。

一、主题的概述
采用springMVC的主题概念,我们可以控制程序的整体感官效果,从而概述用户的体验。

主题是影响程序视觉效果的样式表
、静态资源和图片等资源的集合。

二、定义主题
要在你的程序中使用主题,你必须设置一个
org.springframework.ui.context.ThemeSource接口的实现类。

WebApplicationContext 类本身是实现了该接口的,但是只是简单的把责任代理给了一个特定的实现。

默认情况下,这个代理
是org.springframework.ui.context.support.ResourceBundleThemeSource的一个实现,这个实现类从classpath根目录下载入
一个properties文件。

要定义一个自己的ThemeSource实现或者是设置ResourceBundleThemeSource的前缀字符,我们可以在application context
中注册一个名字为themeSource的bean,那么spring就会自动的寻找和使用这个bean了。

当我们使用ResourceBundleThemeSource时,主题被简单的定义到一个properties文件中,这个文件列出主题的组成资源:
e.g.
1.styleSheet=/themes/cool/style.css
2.background=/themes/cool/img/coolBg.jpg
properties文件中的key是,视图文件中元素的名称。

对应jsp文件,我们可以简单的通过spring:theme标签访问,就像使用
spring:message 标签。

下面的jsp代码片段使用了上面的主题定义:
e.g.
<%@ taglib prefix="spring" uri=””>
<html>
<head>
<link rel="stylesheet" href="<spring:theme code='styleSheet'/>" type="text/css"/>
</head>
<body style="background=<spring:theme code='background'/>">
...
</body>
</html>
默认情况,ResourceBundleThemeSource使用空的前缀名称。

所以,classpath 根目录下properties文件就会被载入。

因此我
们应该把cool.properties文件放到classpath根目录下。

例如, 在
/WEB-INF/classes目录下。

ResourceBundleThemeSource使
用标准的java resource bundle,这允许使用国际化的主题(应该是不同国家使用不同主题)。

例如,我们可以建立/WEB-
INF/classes/cool_nl.properties来设置荷兰人访问时的主题。

三、主题解析器
在我们定义了主题以后,DispatcherServlet将会找到一个名字叫做themeResolver的主题解析器,主题解析器的工作原理和
LocaleResolver很类似。

它检测对应一个请求应该使用的主题,并且可以动态的切换主题。

下面是spring提供的主题解析器:
Class description
FixedThemeResolver 选择一个固定的主题,通过defaultThemeName属性设定SessionThemeResolver 主题在用户的session中被管理,一个session只需设置一次,但不会被持久化。

CookieThemeResolver 主题选择被存储在客户端的cookie中
另外,spring提供一个ThemeChangeInterceptor,运行我们在request中设置要使用的主题。

xml配置实例:这个是我自己系统的配置实例
参数中设置themeName=XXX可以手动修改主题,通过下面的配置默认会找classthpath下面themes/cool.properties
1.<!-- theme解析器 -->
2.<bean id="themeChangeInterceptor"
3. class="org.springframework.web.servlet.theme.ThemeChangeInterc
eptor">
4. <property name="paramName" value="themeName"></property>
5.</bean>
6.<bean id="themeSource"
7. class="org.springframework.ui.context.support.ResourceBundleTh
emeSource">
8. <property name="basenamePrefix" value="themes/"></property>
9.</bean>
10.<bean id="themeResolver"
11. class="org.springframework.web.servlet.theme.CookieThemeResolv
er">
12. <property name="defaultThemeName" >
13. <value>cool</value>
14. </property>
15.</bean>。

相关文档
最新文档