一、框架显示层技术
-
Jsp
优点:1、功能强大,可以写java代码2、支持jsp标签(jsp tag)3、支持表达式语言(el)4、官方标准,用户群广,丰富的第三方jsp标签库5、性能良好。jsp编译成class文件执行,有很好的性能表现.
缺点:jsp没有明显缺点,非要挑点骨头那就是,由于可以编写java代码,如使用不当容易破坏mvc结构
-
Velocity
Velocity是较早出现的用于代替jsp的模板语言
优点:
1、不能编写java代码,可以实现严格的mvc分离
2、性能良好,据说比jsp性能还要好些
3、使用表达式语言,据说jsp的表达式语言就是学velocity的
缺点:
1、不是官方标准
2、用户群体和第三方标签库没有jsp多。
3、对jsp标签支持不够好
-
freemarker
优点:
1、不能编写java代码,可以实现严格的mvc分离
2、性能非常不错
3、对jsp标签支持良好
4、内置大量常用功能,使用非常方便
5、宏定义(类似jsp标签)非常方便
6、使用表达式语言
缺点:
1、不是官方标准
2、用户群体和第三方标签库没有jsp多
二、Velocity模板(VM)语言介绍
Velocity是一个基于java的模板引擎(template engine)。它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。
当Velocity应用于web开发时,界面设计人员可以和java程序开发人员同步开发一个遵循MVC架构的web站点,也就是说,页面设计人 员可以只关注页面的显示效果,而由java程序开发人员关注业务逻辑编码。
Velocity将java代码从web页面中分离出来,这样为web站点的长 期维护提供了便利,同时也为我们在JSP和PHP之外又提供了一种可选的方案。
三、SpringMVC项目与Velocity整合
整合过程:
- pom.xml(引入velocity的jar包)
- spring-mvc.xml(视图配置,配置velocity)
- velocity.properties(velocity配置文件)
(1)加入dependency
<!-- Velocity模板 -->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.5</version>
</dependency>
<dependency>
<groupId>velocity-tools</groupId>
<artifactId>velocity-tools-generic</artifactId>
<version>1.2</version>
</dependency>
(2)视图配置
<!-- 视图模式配置,velocity配置文件-->
<bean id="velocityConfig" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">
<property name="resourceLoaderPath" value="/WEB-INF/views" />
<property name="configLocation" value="classpath:properties/velocity.properties" />
</bean>
<!-- 配置后缀 -->
<bean id="velocityViewResolver"class="org.springframework.web.servlet.view.velocity.VelocityViewResolver">
<property name="suffix" value=".vm" />
</bean>
(3)velocity.properties配置文件
#encoding
input.encoding=UTF-8
output.encoding=UTF-8
#autoreload when vm changed
file.resource.loader.cache=false
file.resource.loader.modificationCheckInterval=2
velocimacro.library.autoreload=false
四、Velocity语法教程
五、Controller返回参数值:Controller中绑定、添加模型数据为视图页面展示时所使用
Controller中进行页面控制,执行业务逻辑,计算得到页面要展示的数据,需要将这些数据绑定到Model上,才能被显示层获取到,从而显示到页面上。
-
方式一:Controller返回类型为ModelAndView
@RequestMapping("index") public ModelAndView index(){ Map<String,Object> map= new HashMap<String,Object>(); map.put(String,Object); return ModelAndView(String <视图模板名>,map); }
-
方式二:在Controller方法中加Model参数,将数据绑定到Model上
@RequestMapping("checkLogin") public String checkLogin(Model model){ model.addAttribute(key,value); // 在视图模板文件中即可通过key获取value return "ok"; }
-
方式三:利用@ModelAttribute注解,可以将普通方法返回值、请求参数、Controller方法返回值放入Model中(具体参见Spring(4)——Spring MVC中对@ModelAttribute注解的介绍)
三种方法中,推荐使用第二种方法。
六、Controller如何获取Request参数
1、利用原有的Servlet方法,使用HttpServletRequest
2、利用@RequestParam注解
@RequestParam("username")String name
当username在request中不存在,会抛出异常,可以使用@RequestParam(value="username" required=false default=" 默认值")这样请求有值就取,没有值就不取。3、使用实体类封装
将实体类(需要具有setter,getter方法)作为Controller方法的参数,请求参数与实体类的属性保持一致,则会完成自动绑定,将请求参数自动绑定到这个实体类上,方法直接使用即可。