SpringMVC&Freemarker静态化页面的处理思路
- 格式:doc
- 大小:44.50 KB
- 文档页数:6
spring MVC原理及配置springmvc原理及配置springmvc原理及配置1.springmvc详述:springmvc就是spring提供更多的一个强悍而有效率的web框架。
借助注释,springmvc提供更多了几乎就是pojo的研发模式,使控制器的研发和测试更加直观。
这些控制器通常不轻易处置命令,而是将其委托给spring上下文中的其他bean,通过spring的倚赖转化成功能,这些bean被转化成至控制器中。
springmvc主要由dispatcherservlet、处理器映射、处理器(控制器)、视图解析器、视图组成。
他的两个核心是两个核心:处理器映射:选择使用哪个控制器来处理请求视图解析器:选择结果应该如何渲染通过以上两点,springmvc确保了如何挑选掌控处置命令和如何挑选视图展现出输入之间的松耦合。
2.springmvc运行原理这里写图片描述(2)找寻处理器:由dispatcherservlet控制器查阅一个或多个handlermapping,找出处置命令的controller。
(3)调用处理器:dispatcherservlet将请求提交到controller。
(4)(5)调用业务处置和回到结果:controller调用业务逻辑处置后,回到modelandview。
3.springmvc接口解释(1)dispatcherservlet接口:spring提供的前端控制器,所有的请求都有经过它来统一分发。
在dispatcherservlet将请求分发给springcontroller 之前,需要借助于spring提供的handlermapping定位到具体的controller。
(2)handlermappingUSB:能够完成客户请求到controller映射。
(3)controller接口:须要为mammalian用户处置上述命令,因此同时实现controllerUSB时,必须确保线程安全并且可以器重。
Spring MVC和Spring Boot都是基于Spring框架的Web应用开发框架。
它们有很多相似之处,但也有一些明显的不同点。
以下是它们的对比:
●构建方式:Spring MVC是一个模板引擎,需要手动编写HTML和
JSP页面,并使用注解来将页面和控制器连接起来。
而Spring Boot 是一个基于Spring框架的应用程序框架,它提供了许多自动配置和starter包,可以更加快速地构建应用程序。
●开发方式:Spring MVC需要更多的手动配置和代码,包括页面布
局、模板引擎、控制器、注解等。
而Spring Boot提供了更多的自动配置和API,可以更加快速地开发应用程序。
●启动方式:Spring MVC需要在类中手动配置DispatcherServlet,
并将其注册到Web应用程序上下文中。
而Spring Boot提供了一个方便的命令行工具,可以自动创建和启动应用程序。
●应用程序大小:Spring MVC的应用程序通常比Spring Boot的应
用程序大,因为它需要更多的库和配置文件。
这也意味着Spring MVC的应用程序可能需要更多的时间来编译和部署。
●社区支持:Spring MVC是一个成熟的框架,已经有很多年的历史,
并且有着广泛的社区支持和文档。
Spring Boot是一个相对较新的框架,但是由于它基于Spring框架,因此也有着良好的社区支持和文档。
总的来说,Spring Boot更加方便快捷,适合快速开发和部署应用程
序,而Spring MVC更加灵活和可定制,适合对于复杂应用程序的需求。
spring mvc学习教程(一)-入门实例引言1.MVC:Model-View-Control框架性质的C层要完成的主要工作:封装web请求为一个数据对象、调用业务逻辑层来处理数据对象、返回处理数据结果及相应的视图给用户。
2.简要概述springmvcSpring C 层框架的核心是DispatcherServlet,它的作用是将请求分发给不同的后端处理器,也即使用了一种被称为Front Controller 的模式(后面对此模式有简要说明)。
Spring 的C 层框架使用了后端控制器来、映射处理器和视图解析器来共同完成C 层框架的主要工作。
并且spring 的C 层框架还真正地把业务层处理的数据结果和相应的视图拼成一个对象,即我们后面会经常用到的ModelAndView 对象。
一、入门实例1. 搭建环境在spring的官方API文档中,给出所有包的作用概述,现列举常用的包及相关作用:org.springframework.aop-3.0.5.RELEASE.jar:与Aop编程相关的包org.springframework.beans-3.0.5.RELEASE.jar:提供了简捷操作bean的接口org.springframework.context-3.0.5.RELEASE.jar:构建在beans包基础上,用来处理资源文件及国际化。
org.springframework.core-3.0.5.RELEASE.jar:spring核心包org.springframework.web-3.0.5.RELEASE.jar:web核心包,提供了web层接口org.springframework.web.servlet-3.0.5.RELEASE.jar:web 层的一个具体实包,DispatcherServlet也位于此包中。
后文全部在spring3.0 版本中进行,为了方便,建议在搭建环境中导入spring3.0 的所有jar 包(所有jar 包位于dist 目录下)。
spring、springmvc、springboot的区别是什么?spring和springMvc:1. spring是⼀个⼀站式的轻量级的java开发框架,核⼼是控制反转(IOC)和⾯向切⾯(AOP),针对于开发的WEB层(springMvc)、业务层(Ioc)、持久层(jdbcTemplate)等都提供了多种配置解决⽅案;2. springMvc是spring基础之上的⼀个MVC框架,主要处理web开发的路径映射和视图渲染,属于spring框架中WEB层开发的⼀部分;springMvc和springBoot:1、springMvc属于⼀个企业WEB开发的MVC框架,涵盖⾯包括前端视图开发、⽂件配置、后台接⼝逻辑开发等,XML、config等配置相对⽐较繁琐复杂;2、springBoot框架相对于springMvc框架来说,更专注于开发微服务后台接⼝,不开发前端视图,同时遵循默认优于配置,简化了插件配置流程,不需要配置xml,相对springmvc,⼤⼤简化了配置流程;总结:1、Spring 框架就像⼀个家族,有众多衍⽣产品例如 boot、security、jpa等等。
但他们的基础都是Spring的ioc、aop等. ioc 提供了依赖注⼊的容器, aop解决了⾯向横切⾯编程,然后在此两者的基础上实现了其他延伸产品的⾼级功能;2、springMvc主要解决WEB开发的问题,是基于Servlet 的⼀个MVC框架,通过XML配置,统⼀开发前端视图和后端逻辑;3、由于Spring的配置⾮常复杂,各种XML、JavaConfig、servlet处理起来⽐较繁琐,为了简化开发者的使⽤,从⽽创造性地推出了springBoot框架,默认优于配置,简化了springMvc的配置流程;但区别于springMvc的是,springBoot专注于单体微服务接⼝开发,和前端解耦,虽然springBoot也可以做成springMvc前后台⼀起开发,但是这就有点不符合springBoot框架的初衷了;。
Java中的Web开发框架有哪些在Java中,有多种用于Web开发的框架。
这些框架提供了一套工具和结构,帮助开发人员快速构建可靠、高效的Web应用程序。
本文将介绍几种常用的Java Web开发框架。
一、Spring MVCSpring MVC是一个基于Java的轻量级Web框架,它是Spring框架的一部分。
Spring MVC通过使用模型-视图-控制器(MVC)的设计模式,将应用程序的不同组件分离开来。
它提供了灵活的配置选项和强大的功能,包括请求映射、表单处理、数据验证和视图解析等。
Spring MVC也支持RESTful风格的Web服务开发。
二、StrutsStruts是另一个受欢迎的Java Web框架,它遵循MVC设计模式。
Struts框架提供了一种结构化的方法来构建Web应用程序。
它使用Struts配置文件来管理请求和处理逻辑,同时提供了多种标签库和表单验证机制。
Struts还支持国际化和本地化,使得开发多语言应用程序更加简便。
三、JSFJavaServer Faces(JSF)是Java EE的一部分,它是一种用于构建用户界面的Web框架。
相比于其他框架,JSF更加面向组件。
它提供了一系列可重用的UI组件,开发人员可以通过简单地组合这些组件来构建复杂的用户界面。
JSF还具有良好的可扩展性和集成性,可以轻松地与其他Java技术和框架进行集成。
四、Play框架Play框架是一个用于构建Web应用程序的响应式全栈框架。
它采用了基于Actor模型的异步编程模型,这使得Play应用程序能够处理高并发和高吞吐量的请求。
Play框架还提供了内置的开发工具和自动重新加载功能,使得开发变得更加高效。
此外,Play还支持多种数据库和模板引擎,开发人员可以根据自己的需求进行选择。
五、Spring BootSpring Boot是一个用于简化Spring应用程序开发的框架。
它提供了一种约定优于配置的方式,通过自动配置和快速启动器,可以快速构建独立运行的、生产级别的Spring应用程序。
springmvc经典面试题Spring MVC是一个基于Java的轻量级Web框架,广泛应用于Java 开发领域。
在Spring MVC的面试中,经常会问到一些经典的问题。
本文将围绕这些经典的面试题展开讨论,帮助读者更好地理解和掌握Spring MVC。
一、Spring MVC的核心组件Spring MVC的核心组件包括控制器(Controller)、视图(View)和模型(Model)。
控制器处理用户请求并返回相应的视图,视图展示最终的页面内容,模型封装请求和响应的数据。
二、请求的处理流程1. 用户发送HTTP请求到Spring DispatcherServlet。
2. DispatcherServlet根据请求URL选择合适的处理器映射器(Handler Mapping)来映射处理器(Controller)。
3. 处理器处理请求,并将处理结果封装到ModelAndView对象中。
4. DispatcherServlet选择合适的视图解析器(View Resolver)来解析视图。
5. 视图展示处理结果,并返回给用户。
三、常见的请求映射方式1. @RequestMapping注解:用于将请求URL映射到具体的处理器方法上。
2. @PathVariable注解:用于获取URL中的参数值。
3. @RequestParam注解:用于获取请求参数的值。
4. @GetMapping、@PostMapping等注解:用于指定GET、POST等请求方法。
四、常见的数据绑定方式1. 表单数据绑定:通过@RequestParam注解获取请求参数的值。
2. 请求体数据绑定:通过@RequestBody注解将请求体中的JSON 或XML数据绑定到方法参数上。
3. 文件上传:通过@RequestParam注解获取MultipartFile类型的文件参数。
五、常见的视图解析器1. InternalResourceViewResolver:用于解析JSP视图。
什么是SpringMVC?⼀、什么是SpringMVC?1.SpringMVC 是⼀种基于 Java 的实现 MVC 设计模型的请求驱动类型的轻量级 Web 框架,属于SpringFrameWork的后续产品,已经融合在Spring Web Flow 中。
2.SpringMVC = Spring +MVCspring mvc类似于struts的⼀个MVC开框架,其实都是属于spring,spring mvc需要有spring的架包作为⽀撑才能跑起来.spring是⼀个⼀站式的框架,提供了表现层(springmvc)到业务层(spring)再到数据层(springdata)的全套解决⽅案;spring的两⼤核⼼IOC(控制反转)和AOP(⾯向切⾯编程)更是给我们的程序解耦和代码的简介提供了⽀持。
Spring框架图:从Spring的结构图可以看出,springMVC位于spring web端的⼀个框架,是⼀种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使⽤了MVC架构模式的思想,将web层进⾏职责解耦。
附:基于请求驱动指的就是使⽤请求-响应模型。
从名字上就可以窥探出,Spring>SpringMVC,那么事实上,spring和SpringMVC是⼀种⽗⼦关系。
SpringMVC是spring扩展出的⼀个应⽤于web端的框架。
在这⾥需要注意的⼀点,就是到底什么是⽗⼦容器关系:spring主要的作⽤是黏合其他模块组件,进⾏统⼀管理,springmvc则主要是负责web端。
那么,我们都知道,我们在应⽤spring的时候,可以使⽤注⼊。
这个时候,如果我们的web端是⽤的SpringMVC,这个时候,controller理论上是通过SpringMVC去注⼊,但是,使⽤spring注⼊,同样是可⾏的。
同理,service等层,使⽤SpringMVC配置的统⼀扫描装配也是可以的。
1、什么是SpringMvc?答:SpringMvc是spring的一个模块,基于MVC的一个框架,无需中间整合层来整合。
2、Spring MVC的优点:答:1)它是基于组件技术的.全部的应用对象,无论控制器和视图,还是业务对象之类的都是java 组件.并且和Spring提供的其他基础结构紧密集成.2)不依赖于Servlet API(目标虽是如此,但是在实现的时候确实是依赖于Servlet的)3)可以任意使用各种视图技术,而不仅仅局限于JSP4)支持各种请求资源的映射策略5)它应是易于扩展的3、SpringMVC工作原理?答:1)客户端发送请求到DispatcherServlet2)DispatcherServlet查询handlerMapping找到处理请求的Controller3)Controller调用业务逻辑后,返回ModelAndView4)DispatcherServlet查询ModelAndView,找到指定视图5)视图将结果返回到客户端4、SpringMVC流程?答:1)用户发送请求至前端控制器DispatcherServlet。
2)DispatcherServlet收到请求调用HandlerMapping处理器映射器。
3)处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
4)DispatcherServlet调用HandlerAdapter处理器适配器。
5)HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。
6)Controller执行完成返回ModelAndView。
7)HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。
8)DispatcherServlet将ModelAndView传给ViewReslover视图解析器。
SpringMVC目录结构配置SpringMVC是一种常见的Java Web框架,它遵循MVC(Model-View-Controller)设计模式,用于构建灵活可扩展的Web应用程序。
SpringMVC的目录结构对于项目的开发和维护非常重要,下面会详细介绍SpringMVC的标准目录结构以及配置方式。
1.标准目录结构1.1 src/main/java:主要用于存放Java源代码。
1.2 src/main/resources:主要用于存放配置文件和资源文件。
1.3 src/main/webapp:主要用于存放Web应用的静态资源。
1.4 src/test/java:主要用于存放测试用例的Java源代码。
1.5 src/test/resources:主要用于存放测试用例的配置文件和资源文件。
2.详细解析2.1 src/main/java目录src/main/java目录是存放Java源代码的默认目录,它包括以下几个子目录:- config:用于存放Spring配置类,如配置数据库连接、配置事务管理等。
- interceptor:用于存放SpringMVC的拦截器。
- model:用于存放数据模型相关的实体类。
- util:用于存放工具类。
- web:用于存放SpringMVC的控制器。
2.2 src/main/resources目录src/main/resources目录是存放配置文件和资源文件的默认目录,它包括以下几个子目录:- static:用于存放静态资源文件,如CSS、JavaScript、图片等。
- templates:用于存放模板文件,如HTML、Thymeleaf模板等。
- application.properties:存放项目的配置信息,如数据库配置、端口配置等。
- logback.xml:存放日志配置,如日志级别、输出路径等。
- mapper:存放MyBatis的Mapper.xml文件。
这里对freemarker的代码进行了修改,效果:1,请求.do的URL时直接生成对应的.htm文件,并将请求转发到该htm文件2,自由控制某个页面是否需要静态化原理:对org.springframework.web.servlet.view.freemarker.FreeMarkerView类进行扩展第一步:在web.xml中将*.do请求交给SpringMVCXML code<servlet><servlet-name>demo</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServle t</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/demo-servlet.xml</param-value> </init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>demo</servlet-name><url-pattern>*.do</url-pattern></servlet-mapping>第二步:配置/WEB-INF/demo-servlet.xmlXML code<!--freemarker页面解析器 --><bean id="viewResolver"class="org.springframework.web.servlet.view.freemarker.FreeMark erViewResolver"><property name="suffix" value=".ftl"></property><property name="contentType"value="text/html;charset=UTF-8"/><!-- <property name="viewClass"value="org.springframework.web.servlet.view.freemarker.FreeMark erView" /> --><!-- 将Spring的FreeMarkerView改成我们扩展的View --><property name="viewClass"value="com.myview.MyFreeMarkerView"/><property name="exposeRequestAttributes"value="true"/><property name="exposeSessionAttributes"value="true"/><property name="exposeSpringMacroHelpers" value="true"/></bean><bean id="fmXmlEscape"class="freemarker.template.utility.XmlEscape"/><!--配置Freemarker --><bean id="freemarkerConfigurer"class="org.springframework.web.servlet.view.freemarker.FreeMark erConfigurer"><property name="templateLoaderPath"value="/WEB-INF/freemarker/"></property><property name="freemarkerVariables"><map><entry key="xml_escape" value-ref="fmXmlEscape"/></map></property><property name="freemarkerSettings"><props><prop key="template_update_delay">1</prop><prop key="defaultEncoding">UTF-8</prop></props></property></bean>第三步:新建package,com.myview,新建一个MyFreeMarkerView,继承自org.springframework.web.servlet.view.freemarker.FreeMarkerView,在这里对原类进行扩展Java codepackage com.myview;import java.io.BufferedWriter;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStreamWriter;import java.io.Writer;import java.util.Locale;import java.util.Map;import javax.servlet.ServletException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;importorg.springframework.web.servlet.support.RequestContextUtils; importorg.springframework.web.servlet.view.freemarker.FreeMarkerView;import freemarker.template.SimpleHash;import freemarker.template.Template;import freemarker.template.TemplateException;public class MyFreeMarkerView extends FreeMarkerView{@Overrideprotected void doRender(Map<String, Object> model,HttpServletRequest request, HttpServletResponse response)throws Exception {// Expose model to JSP tags (as request attributes).exposeModelAsRequestAttributes(model, request);// Expose all standard FreeMarker hash models.SimpleHash fmModel = buildTemplateModel(model, request, response);if (logger.isDebugEnabled()) {logger.debug("Rendering FreeMarker template [" + getUrl() + "] in FreeMarkerView '" + getBeanName() + "'");}// Grab the locale-specific version of the template.Locale locale = RequestContextUtils.getLocale(request);/** 默认生成静态文件,除非在编写ModelAndView时指定CREATE_HTML = false,* 这样对静态文件生成的粒度控制更细一点* 例如:ModelAndView mav = new ModelAndView("search"); * mav.addObject("CREATE_HTML", false);*/if(Boolean.FALSE.equals(model.get("CREATE_HTML"))){processTemplate(getTemplate(locale), fmModel, response);}else{createHTML(getTemplate(locale), fmModel, request, response);}}public void createHTML(Template template, SimpleHash model,HttpServletRequest request,HttpServletResponse response) throws IOException, TemplateException, ServletException {//站点根目录的绝对路径String basePath =request.getSession().getServletContext().getRealPath("/");String requestHTML = this.getRequestHTML(request);//静态页面绝对路径String htmlPath = basePath + requestHTML;File htmlFile = new File(htmlPath);if(!htmlFile.getParentFile().exists()){htmlFile.getParentFile().mkdirs();}if(!htmlFile.exists()){htmlFile.createNewFile();}Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(htmlFile), "UTF-8"));//处理模版template.process(model, out);out.flush();out.close();/*将请求转发到生成的htm文件*/request.getRequestDispatcher(requestHTML).forward(request,response);}/*** 计算要生成的静态文件相对路径* 因为大家在调试的时候一般在Tomcat的webapps下面新建站点目录的,* 但在实际应用时直接布署到ROOT目录里面,这里要保证路径的一致性。