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]

相关文章
|
1月前
|
Java 开发者 微服务
手写模拟Spring Boot自动配置功能
【11月更文挑战第19天】随着微服务架构的兴起,Spring Boot作为一种快速开发框架,因其简化了Spring应用的初始搭建和开发过程,受到了广大开发者的青睐。自动配置作为Spring Boot的核心特性之一,大大减少了手动配置的工作量,提高了开发效率。
50 0
|
2月前
|
Java API 数据库
Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐
本文通过在线图书管理系统案例,详细介绍如何使用Spring Boot构建RESTful API。从项目基础环境搭建、实体类与数据访问层定义,到业务逻辑实现和控制器编写,逐步展示了Spring Boot的简洁配置和强大功能。最后,通过Postman测试API,并介绍了如何添加安全性和异常处理,确保API的稳定性和安全性。
44 0
|
5天前
|
NoSQL Java Redis
Spring Boot 自动配置机制:从原理到自定义
Spring Boot 的自动配置机制通过 `spring.factories` 文件和 `@EnableAutoConfiguration` 注解,根据类路径中的依赖和条件注解自动配置所需的 Bean,大大简化了开发过程。本文深入探讨了自动配置的原理、条件化配置、自定义自动配置以及实际应用案例,帮助开发者更好地理解和利用这一强大特性。
43 14
|
2天前
|
XML Java 数据格式
Spring容器Bean之XML配置方式
通过对以上内容的掌握,开发人员可以灵活地使用Spring的XML配置方式来管理应用程序的Bean,提高代码的模块化和可维护性。
18 6
|
4天前
|
XML Java 数据格式
🌱 深入Spring的心脏:Bean配置的艺术与实践 🌟
本文深入探讨了Spring框架中Bean配置的奥秘,从基本概念到XML配置文件的使用,再到静态工厂方式实例化Bean的详细步骤,通过实际代码示例帮助读者更好地理解和应用Spring的Bean配置。希望对你的Spring开发之旅有所助益。
31 3
|
5天前
|
设计模式 前端开发 Java
步步深入SpringMvc DispatcherServlet源码掌握springmvc全流程原理
通过对 `DispatcherServlet`源码的深入剖析,我们了解了SpringMVC请求处理的全流程。`DispatcherServlet`作为前端控制器,负责请求的接收和分发,处理器映射和适配负责将请求分派到具体的处理器方法,视图解析器负责生成和渲染视图。理解这些核心组件及其交互原理,有助于开发者更好地使用和扩展SpringMVC框架。
22 4
|
2月前
|
Java API Spring
在 Spring 配置文件中配置 Filter 的步骤
【10月更文挑战第21天】在 Spring 配置文件中配置 Filter 是实现请求过滤的重要手段。通过合理的配置,可以灵活地对请求进行处理,满足各种应用需求。还可以根据具体的项目要求和实际情况,进一步深入研究和优化 Filter 的配置,以提高应用的性能和安全性。
|
23天前
|
前端开发 Java 开发者
Spring MVC中的请求映射:@RequestMapping注解深度解析
在Spring MVC框架中,`@RequestMapping`注解是实现请求映射的关键,它将HTTP请求映射到相应的处理器方法上。本文将深入探讨`@RequestMapping`注解的工作原理、使用方法以及最佳实践,为开发者提供一份详尽的技术干货。
69 2
|
1月前
|
Java Spring
[Spring]aop的配置与使用
本文介绍了AOP(面向切面编程)的基本概念和核心思想。AOP是Spring框架的核心功能之一,通过动态代理在不修改原代码的情况下注入新功能。文章详细解释了连接点、切入点、通知、切面等关键概念,并列举了前置通知、后置通知、最终通知、异常通知和环绕通知五种通知类型。
37 1
|
2月前
|
Java BI 调度
Java Spring的定时任务的配置和使用
遵循上述步骤,你就可以在Spring应用中轻松地配置和使用定时任务,满足各种定时处理需求。
158 1
下一篇
DataWorks