spring mvc & velocity 配置备忘

简介:

  Spring里面最重要的概念是IOC和AOP,还有两项很重要的模块是事务和MVC,对于IOC和AOP,我们要深究其源码实现,对于事务,我们务必理解。对于MVC,Spring MVC提供的功能很多、很先进,但我们一般只要用其中的一小部分就可以满足我们的开发需求,另外,我们并不建议你排斥Struts2,因为它也是经过无数公司验证过的优秀的框架。本文给出spring mvc简单配置和部分代码举例。

 

WEB-INF/web.xml

Xml代码   收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <web-app xmlns="http://java.sun.com/xml/ns/javaee"  
  3.          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.          xsi:schemaLocation="http://java.sun.com/xml/ns/javaee  
  5.                       http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"  
  6.          version="3.0"  
  7.          metadata-complete="true">  
  8.   
  9.     <display-name>ixhong-admin-web</display-name>  
  10.   
  11.     <context-param>  
  12.         <param-name>contextConfigLocation</param-name>  
  13.         <param-value>classpath:spring-context.xml</param-value>  
  14.     </context-param>  
  15.     <listener>  
  16.         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  17.     </listener>  
  18.   
  19.     <filter>  
  20.         <filter-name>characterEncodingFilter</filter-name>  
  21.         <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  
  22.         <init-param>  
  23.             <param-name>encoding</param-name>  
  24.             <param-value>UTF-8</param-value>  
  25.         </init-param>  
  26.         <init-param>  
  27.             <param-name>forceEncoding</param-name>  
  28.             <param-value>true</param-value>  
  29.         </init-param>  
  30.     </filter>  
  31.   
  32.     <filter-mapping>  
  33.         <filter-name>characterEncodingFilter</filter-name>  
  34.         <url-pattern>/*</url-pattern>  
  35.     </filter-mapping>  
  36.   
  37.     <servlet>  
  38.         <servlet-name>spring-mvc</servlet-name>  
  39.         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
  40.         <init-param>  
  41.             <param-name>contextConfigLocation</param-name>  
  42.             <param-value>classpath:spring-velocity.xml</param-value>  
  43.         </init-param>  
  44.         <load-on-startup>1</load-on-startup>  
  45.     </servlet>  
  46.   
  47.     <servlet-mapping>  
  48.         <servlet-name>spring-mvc</servlet-name>  
  49.         <url-pattern>*.xyz</url-pattern>  
  50.     </servlet-mapping>  
  51.   
  52.     <welcome-file-list>  
  53.         <welcome-file>/index.html</welcome-file>  
  54.     </welcome-file-list>  
  55.     <error-page>  
  56.         <error-code>404</error-code>  
  57.         <location>/404_error.html</location>  
  58.     </error-page>  
  59. </web-app>  

 

WEB-INF/velocity-tools.xml

Xml代码   收藏代码
  1. <toolbox>  
  2.     <tool>  
  3.         <key>stringUtils</key>  
  4.         <scope>application</scope>  
  5.         <class>org.apache.commons.lang.StringUtils</class>  
  6.     </tool>  
  7.     <tool>  
  8.         <key>dateFormatUtils</key>  
  9.         <scope>application</scope>  
  10.         <class>org.apache.commons.lang.time.DateFormatUtils</class>  
  11.     </tool>  
  12.     <tool>  
  13.         <key>escapeUtils</key>  
  14.         <scope>application</scope>  
  15.         <class>org.apache.commons.lang.StringEscapeUtils</class>  
  16.     </tool>  
  17. </toolbox>  

 

spring-velocity.xml

Xml代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.        xmlns:mvc="http://www.springframework.org/schema/mvc"  
  4.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  5.        xmlns:context="http://www.springframework.org/schema/context"  
  6.   
  7.        xsi:schemaLocation="http://www.springframework.org/schema/beans  
  8.                            http://www.springframework.org/schema/beans/spring-beans-3.2.xsd  
  9.                            http://www.springframework.org/schema/mvc  
  10.                            http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd  
  11.                            http://www.springframework.org/schema/context  
  12.                            http://www.springframework.org/schema/context/spring-context-3.2.xsd"  
  13.        default-autowire="byName">  
  14.     <!-- -->  
  15.     <mvc:annotation-driven>  
  16.         <mvc:message-converters>  
  17.             <bean class="org.springframework.http.converter.StringHttpMessageConverter">  
  18.                 <property name = "supportedMediaTypes">  
  19.                     <list>  
  20.                         <value>text/plain;charset=UTF-8</value>  
  21.                         <value>text/html;charset=UTF-8</value>  
  22.                     </list>  
  23.                 </property>  
  24.             </bean>  
  25.   
  26.         </mvc:message-converters>  
  27.     </mvc:annotation-driven>  
  28.   
  29.     <context:component-scan base-package="com.architectj.admin.web.controller"/>  
  30.   
  31.     <bean id="velocityConfig" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">  
  32.         <property name="resourceLoaderPath" value="/WEB-INF/vm"/>  
  33.         <property name="configLocation" value="classpath:velocity.properties"/>  
  34.     </bean>  
  35.   
  36.     <!-- 上传数据大小 -->  
  37.     <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">  
  38.         <property name="maxUploadSize" value="5242880"/><!-- 最大5M -->  
  39.     </bean>  
  40.   
  41.     <bean id="handlerMapping" class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">  
  42.     </bean>  
  43.   
  44.     <bean id="exceptionResolver" class="com.architectj.admin.web.ExceptionHandler"/>  
  45.   
  46.     <bean id="viewResolver" class="org.springframework.web.servlet.view.velocity.VelocityLayoutViewResolver">  
  47.         <property name="suffix" value=".vm"/>  
  48.         <property name="layoutUrl" value="layout/default.vm"/>  
  49.         <!-- 使用springMacro、使用servlet的对象 -->  
  50.         <property name="exposeSpringMacroHelpers" value="true"/>  
  51.         <property name="exposeRequestAttributes" value="true"/>  
  52.         <property name="exposeSessionAttributes" value="true"/>  
  53.         <property name="contentType" value="text/html;charset=UTF-8"/>  
  54.         <!-- spring的日期格式化 -->  
  55.         <property name="dateToolAttribute" value="dateTool"/>  
  56.         <property name="toolboxConfigLocation" value="/WEB-INF/velocity-tools.xml"/>  
  57.         <property name="attributesMap">  
  58.             <map>  
  59.             </map>  
  60.         </property>  
  61.     </bean>  
  62.     <mvc:interceptors>  
  63.         <mvc:interceptor>  
  64.             <mvc:mapping path="/user/**" />  
  65.             <mvc:mapping path="/teacher/**"/>  
  66.             <bean class="com.architectj.admin.web.interceptor.LoginInterceptor" />  
  67.         </mvc:interceptor>  
  68.         <mvc:interceptor>  
  69.             <mvc:mapping path="/user/**" />  
  70.             <mvc:mapping path="/teacher/**"/>  
  71.             <bean class="com.architectj.admin.web.interceptor.SecurityInterceptor" />  
  72.         </mvc:interceptor>  
  73.         <mvc:interceptor>  
  74.             <mvc:mapping path="/user/**"/>  
  75.             <mvc:mapping path="/teacher/**"/>  
  76.             <bean class="com.architectj.admin.web.interceptor.PermissionInterceptor"/>  
  77.         </mvc:interceptor>  
  78.     </mvc:interceptors>  
  79. </beans>  

 

 velocity.properties

Xml代码   收藏代码
  1. #encoding    
  2. input.encoding=UTF-8  
  3. output.encoding=UTF-8  
  4. contentType=text/html;charset=UTF-8  
  5. #autoreload when vm changed  
  6. resource.loader=file  
  7. file.resource.loader.class=org.apache.velocity.runtime.resource.loader.FileResourceLoader  
  8. file.resource.loader.cache=false  
  9. file.resource.loader.modificationCheckInterval=1  
  10. velocimacro.library.autoreload=true  
  11. velocimacro.library=macro.vm  

 

 macro.vm

Xml代码   收藏代码
  1. #macro(pagination $targetUrl $queryResult)  
  2. <div id="kkpager"></div>  
  3. <script type="text/javascript" src="/lib/kkpager.min.js"></script>  
  4. <script type="text/javascript">  
  5.     //init  
  6.     $(function(){  
  7.         //生成分页  
  8.         //有些参数是可选的,比如lang,若不传有默认值  
  9.         kkpager.generPageHtml({  
  10.             //当前页码  
  11.             pno : $!{query.currentPage},  
  12.             //总页码  
  13.             total : $!{queryResult.totalPage},  
  14.             //总数据条数  
  15.             totalRecords : $!{queryResult.amount},  
  16.             //链接前部  
  17.             hrefFormer : '$targetUrl',  
  18.             //链接尾部  
  19.             hrefLatter : '',  
  20.             getLink : function(n){  
  21.                 if (n == 1){  
  22.                     return this.hrefFormer;  
  23.                 }  
  24.                 return this.hrefFormer + "&page="+n;  
  25.             }  
  26.         });  
  27.     });  
  28. </script>  
  29. #end  

 

 LoginInterceptor

Java代码   收藏代码
  1. public class LoginInterceptor implements HandlerInterceptor{  
  2.   
  3.     @Override  
  4.     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {  
  5.          // 解析cookie得到source  
  6.         UserDO user = this.decoder(source);  
  7.         LoginContext context = new LoginContext();  
  8.         context.setUser(user);  
  9.         LoginContextHolder.set(context);  
  10.         return true;  
  11.     }  
  12.   
  13.     @Override  
  14.     public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {  
  15.         if(modelAndView != null) {  
  16.             modelAndView.addObject("xxx",LoginContextHolder.getLoginUser());  
  17.         }  
  18.     }  
  19.   
  20.     @Override  
  21.     public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {  
  22.         LoginContextHolder.clear();  
  23.     }  
  24.   
  25.   
  26.     protected UserDO decoder(String content){  
  27.         // ...  
  28.         return user;  
  29.     }  
  30.   
  31.   
  32. }  

 

 SecurityInterceptor

Java代码   收藏代码
  1. public class SecurityInterceptor implements HandlerInterceptor{  
  2.   
  3.     @Override  
  4.     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {  
  5.         LoginContext loginContext = LoginContextHolder.get();  
  6.         if(loginContext != null && loginContext.getUser() != null) {  
  7.             return true;  
  8.         }  
  9.         response.sendRedirect("/login.xyz");//登陆  
  10.         return false;  
  11.     }  
  12.   
  13.     @Override  
  14.     public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {  
  15.   
  16.     }  
  17.   
  18.     @Override  
  19.     public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {  
  20.   
  21.     }  
  22. }  

 

 Controller

Java代码   收藏代码
  1. @Controller  
  2. public class IndexController extends BaseController{  
  3.   
  4.     @Autowired  
  5.     private AdminService adminService;  
  6.   
  7.     @RequestMapping("/login")  
  8.     public ModelAndView login(HttpServletRequest request,HttpServletResponse response) {  
  9.         ModelAndView mav = new ModelAndView();  
  10.         if (LoginContextHolder.getLoginUser() != null){  
  11.             mav.setViewName("redirect:/yyy/list.xyz");  
  12.         }  
  13.         return mav;  
  14.     }  
  15.   
  16.     @RequestMapping(value = "xxxxxx", method = {RequestMethod.POST, RequestMethod.GET})  
  17.     @ResponseBody  
  18.     public String loginAction(@RequestParam("name") String name, @RequestParam("password") String password,  
  19.                               @RequestParam("code") String code,  
  20.                               HttpServletRequest request,HttpServletResponse response) {  
  21.   
  22.         if(LoginContextHolder.getLoginUser() != null){  
  23.             Result result = new Result();  
  24.             result.setSuccess(true);  
  25.             return ResultHelper.renderAsJson(result);  
  26.         }  
  27.   
  28.         //验证码校验  
  29.         // ...  
  30.   
  31.         Result result = this.adminService.login(name.trim(), password);  
  32.         // ...  
  33.         return ResultHelper.renderAsJson(result);  
  34.     }  
  35.   
  36. }  

 附:velocity注释是 ##  注释掉的东西不会再html源码里显示,而<!--会显示,模版引擎/编译器会做忽略的事情,HTML的注释不会忽略



原文链接:[http://wely.iteye.com/blog/2278604]

相关文章
|
24天前
|
负载均衡 监控 Java
Spring Cloud Gateway 全解析:路由配置、断言规则与过滤器实战指南
本文详细介绍了 Spring Cloud Gateway 的核心功能与实践配置。首先讲解了网关模块的创建流程,包括依赖引入(gateway、nacos 服务发现、负载均衡)、端口与服务发现配置,以及路由规则的设置(需注意路径前缀重复与优先级 order)。接着深入解析路由断言,涵盖 After、Before、Path 等 12 种内置断言的参数、作用及配置示例,并说明了自定义断言的实现方法。随后重点阐述过滤器机制,区分路由过滤器(如 AddRequestHeader、RewritePath、RequestRateLimiter 等)与全局过滤器的作用范围与配置方式,提
Spring Cloud Gateway 全解析:路由配置、断言规则与过滤器实战指南
|
16天前
|
Java 关系型数据库 MySQL
Spring Boot自动配置:魔法背后的秘密
Spring Boot 自动配置揭秘:只需简单配置即可启动项目,背后依赖“约定大于配置”与条件化装配。核心在于 `@EnableAutoConfiguration` 注解与 `@Conditional` 系列条件判断,通过 `spring.factories` 或 `AutoConfiguration.imports` 加载配置类,实现按需自动装配 Bean。
|
17天前
|
人工智能 Java 开发者
【Spring】原理解析:Spring Boot 自动配置
Spring Boot通过“约定优于配置”的设计理念,自动检测项目依赖并根据这些依赖自动装配相应的Bean,从而解放开发者从繁琐的配置工作中解脱出来,专注于业务逻辑实现。
|
2月前
|
Java Spring
Spring Boot配置的优先级?
在Spring Boot项目中,配置可通过配置文件和外部配置实现。支持的配置文件包括application.properties、application.yml和application.yaml,优先级依次降低。外部配置常用方式有Java系统属性(如-Dserver.port=9001)和命令行参数(如--server.port=10010),其中命令行参数优先级高于系统属性。整体优先级顺序为:命令行参数 &gt; Java系统属性 &gt; application.properties &gt; application.yml &gt; application.yaml。
563 0
|
10天前
|
缓存 Java 应用服务中间件
Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
本文详解Spring Boot十大核心配置优化技巧,涵盖Tomcat连接池、数据库连接池、Jackson时区、日志管理、缓存策略、异步线程池等关键配置,结合代码示例与通俗解释,助你轻松掌握高并发场景下的性能调优方法,适用于实际项目落地。
160 4
|
17天前
|
传感器 Java 数据库
探索Spring Boot的@Conditional注解的上下文配置
Spring Boot 的 `@Conditional` 注解可根据不同条件动态控制 Bean 的加载,提升应用的灵活性与可配置性。本文深入解析其用法与优势,并结合实例展示如何通过自定义条件类实现环境适配的智能配置。
探索Spring Boot的@Conditional注解的上下文配置
|
1月前
|
安全 算法 Java
在Spring Boot中应用Jasypt以加密配置信息。
通过以上步骤,可以在Spring Boot应用中有效地利用Jasypt对配置信息进行加密,这样即使配置文件被泄露,其中的敏感信息也不会直接暴露给攻击者。这是一种在不牺牲操作复杂度的情况下提升应用安全性的简便方法。
680 10
|
2月前
|
前端开发 Java API
Spring Cloud Gateway Server Web MVC报错“Unsupported transfer encoding: chunked”解决
本文解析了Spring Cloud Gateway中出现“Unsupported transfer encoding: chunked”错误的原因,指出该问题源于Feign依赖的HTTP客户端与服务端的`chunked`传输编码不兼容,并提供了具体的解决方案。通过规范Feign客户端接口的返回类型,可有效避免该异常,提升系统兼容性与稳定性。
189 0
|
2月前
|
SQL Java 数据库连接
Spring、SpringMVC 与 MyBatis 核心知识点解析
我梳理的这些内容,涵盖了 Spring、SpringMVC 和 MyBatis 的核心知识点。 在 Spring 中,我了解到 IOC 是控制反转,把对象控制权交容器;DI 是依赖注入,有三种实现方式。Bean 有五种作用域,单例 bean 的线程安全问题及自动装配方式也清晰了。事务基于数据库和 AOP,有失效场景和七种传播行为。AOP 是面向切面编程,动态代理有 JDK 和 CGLIB 两种。 SpringMVC 的 11 步执行流程我烂熟于心,还有那些常用注解的用法。 MyBatis 里,#{} 和 ${} 的区别很关键,获取主键、处理字段与属性名不匹配的方法也掌握了。多表查询、动态
113 0
|
2月前
|
JSON 前端开发 Java
第05课:Spring Boot中的MVC支持
第05课:Spring Boot中的MVC支持
168 0