`
IXHONG
  • 浏览: 451593 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

spring mvc & velocity 配置备忘

阅读更多

 

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

 

WEB-INF/web.xml

<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                      http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         version="3.0"
         metadata-complete="true">

    <display-name>ixhong-admin-web</display-name>

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring-context.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <filter>
        <filter-name>characterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>

    <filter-mapping>
        <filter-name>characterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <servlet>
        <servlet-name>spring-mvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring-velocity.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>spring-mvc</servlet-name>
        <url-pattern>*.xyz</url-pattern>
    </servlet-mapping>

    <welcome-file-list>
        <welcome-file>/index.html</welcome-file>
    </welcome-file-list>
    <error-page>
        <error-code>404</error-code>
        <location>/404_error.html</location>
    </error-page>
</web-app>

 

WEB-INF/velocity-tools.xml

<toolbox>
    <tool>
        <key>stringUtils</key>
        <scope>application</scope>
        <class>org.apache.commons.lang.StringUtils</class>
    </tool>
    <tool>
        <key>dateFormatUtils</key>
        <scope>application</scope>
        <class>org.apache.commons.lang.time.DateFormatUtils</class>
    </tool>
    <tool>
        <key>escapeUtils</key>
        <scope>application</scope>
        <class>org.apache.commons.lang.StringEscapeUtils</class>
    </tool>
</toolbox>

 

spring-velocity.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"

       xsi:schemaLocation="http://www.springframework.org/schema/beans
                           http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
                           http://www.springframework.org/schema/mvc
                           http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
                           http://www.springframework.org/schema/context
                           http://www.springframework.org/schema/context/spring-context-3.2.xsd"
       default-autowire="byName">
    <!-- -->
    <mvc:annotation-driven>
        <mvc:message-converters>
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                <property name = "supportedMediaTypes">
                    <list>
                        <value>text/plain;charset=UTF-8</value>
                        <value>text/html;charset=UTF-8</value>
                    </list>
                </property>
            </bean>

        </mvc:message-converters>
    </mvc:annotation-driven>

    <context:component-scan base-package="com.architectj.admin.web.controller"/>

    <bean id="velocityConfig" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">
        <property name="resourceLoaderPath" value="/WEB-INF/vm"/>
        <property name="configLocation" value="classpath:velocity.properties"/>
    </bean>

    <!-- 上传数据大小 -->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize" value="5242880"/><!-- 最大5M -->
    </bean>

    <bean id="handlerMapping" class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
    </bean>

    <bean id="exceptionResolver" class="com.architectj.admin.web.ExceptionHandler"/>

    <bean id="viewResolver" class="org.springframework.web.servlet.view.velocity.VelocityLayoutViewResolver">
        <property name="suffix" value=".vm"/>
        <property name="layoutUrl" value="layout/default.vm"/>
        <!-- 使用springMacro、使用servlet的对象 -->
        <property name="exposeSpringMacroHelpers" value="true"/>
        <property name="exposeRequestAttributes" value="true"/>
        <property name="exposeSessionAttributes" value="true"/>
        <property name="contentType" value="text/html;charset=UTF-8"/>
        <!-- spring的日期格式化 -->
        <property name="dateToolAttribute" value="dateTool"/>
        <property name="toolboxConfigLocation" value="/WEB-INF/velocity-tools.xml"/>
        <property name="attributesMap">
            <map>
            </map>
        </property>
    </bean>
    <mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/user/**" />
            <mvc:mapping path="/teacher/**"/>
            <bean class="com.architectj.admin.web.interceptor.LoginInterceptor" />
        </mvc:interceptor>
        <mvc:interceptor>
            <mvc:mapping path="/user/**" />
            <mvc:mapping path="/teacher/**"/>
            <bean class="com.architectj.admin.web.interceptor.SecurityInterceptor" />
        </mvc:interceptor>
        <mvc:interceptor>
            <mvc:mapping path="/user/**"/>
            <mvc:mapping path="/teacher/**"/>
            <bean class="com.architectj.admin.web.interceptor.PermissionInterceptor"/>
        </mvc:interceptor>
    </mvc:interceptors>
</beans>

 

 velocity.properties

#encoding  
input.encoding=UTF-8
output.encoding=UTF-8
contentType=text/html;charset=UTF-8
#autoreload when vm changed
resource.loader=file
file.resource.loader.class=org.apache.velocity.runtime.resource.loader.FileResourceLoader
file.resource.loader.cache=false
file.resource.loader.modificationCheckInterval=1
velocimacro.library.autoreload=true
velocimacro.library=macro.vm

 

 macro.vm

#macro(pagination $targetUrl $queryResult)
<div id="kkpager"></div>
<script type="text/javascript" src="/lib/kkpager.min.js"></script>
<script type="text/javascript">
    //init
    $(function(){
        //生成分页
        //有些参数是可选的,比如lang,若不传有默认值
        kkpager.generPageHtml({
            //当前页码
            pno : $!{query.currentPage},
            //总页码
            total : $!{queryResult.totalPage},
            //总数据条数
            totalRecords : $!{queryResult.amount},
            //链接前部
            hrefFormer : '$targetUrl',
            //链接尾部
            hrefLatter : '',
            getLink : function(n){
                if (n == 1){
                    return this.hrefFormer;
                }
                return this.hrefFormer + "&page="+n;
            }
        });
    });
</script>
#end

 

 LoginInterceptor

public class LoginInterceptor implements HandlerInterceptor{

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
         // 解析cookie得到source
        UserDO user = this.decoder(source);
        LoginContext context = new LoginContext();
        context.setUser(user);
        LoginContextHolder.set(context);
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        if(modelAndView != null) {
            modelAndView.addObject("xxx",LoginContextHolder.getLoginUser());
        }
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        LoginContextHolder.clear();
    }


    protected UserDO decoder(String content){
        // ...
        return user;
    }


}

 

 SecurityInterceptor

public class SecurityInterceptor implements HandlerInterceptor{

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        LoginContext loginContext = LoginContextHolder.get();
        if(loginContext != null && loginContext.getUser() != null) {
            return true;
        }
        response.sendRedirect("/login.xyz");//登陆
        return false;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

    }
}

 

 Controller

@Controller
public class IndexController extends BaseController{

    @Autowired
    private AdminService adminService;

    @RequestMapping("/login")
    public ModelAndView login(HttpServletRequest request,HttpServletResponse response) {
        ModelAndView mav = new ModelAndView();
        if (LoginContextHolder.getLoginUser() != null){
            mav.setViewName("redirect:/yyy/list.xyz");
        }
        return mav;
    }

    @RequestMapping(value = "xxxxxx", method = {RequestMethod.POST, RequestMethod.GET})
    @ResponseBody
    public String loginAction(@RequestParam("name") String name, @RequestParam("password") String password,
                              @RequestParam("code") String code,
                              HttpServletRequest request,HttpServletResponse response) {

        if(LoginContextHolder.getLoginUser() != null){
            Result result = new Result();
            result.setSuccess(true);
            return ResultHelper.renderAsJson(result);
        }

        //验证码校验
        // ...

        Result result = this.adminService.login(name.trim(), password);
        // ...
        return ResultHelper.renderAsJson(result);
    }

}

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

 

 

分享到:
评论

相关推荐

    spring mvc mybatis velocity 示范

    Spring MVC、MyBatis 和 Velocity 是三个在Java Web开发中广泛应用的开源框架。Spring MVC 是Spring框架的一部分,用于构建高效、灵活的Web应用程序。MyBatis 是一个优秀的持久层框架,它支持定制化SQL、存储过程...

    spring mvc与velocity整合

    在Spring MVC的配置文件(如`spring-mvc.xml`)中,你需要配置VelocityViewResolver,这是Spring MVC用来解析Velocity模板的类。设置其prefix和suffix属性,分别指定视图前缀和后缀,例如: ```xml ...

    spring mvc sitemesh velocity整合

    2. **配置Spring MVC**:在Spring的配置文件中,配置Spring MVC的DispatcherServlet,并设置视图解析器为VelocityViewResolver,指定Velocity模板文件的路径。 3. **配置Sitemesh**:在web.xml中配置Sitemesh的...

    基于 Spring Spring MVC Ss Velocity Shiro 的 WeW.zip

    基于 Spring Spring MVC Spring Boot MyBatis Velocity Shiro 的 WeW

    maven搭建spring mvc velocity+mybatis

    在IT行业中,构建高效、可维护的Web应用是至关重要的,而Maven、Spring MVC、Velocity和MyBatis是实现这一目标的四个关键组件。本文将深入探讨如何使用这些技术来搭建一个完整的Web应用程序。 首先,Maven是Apache...

    Spring MVC+Maven+Velocity配置实例

    在Spring的配置文件(如`applicationContext.xml`)中,定义视图解析器,通常使用`InternalResourceViewResolver`,并设置前缀和后缀,使得Spring MVC能够找到Velocity模板。 接下来,配置Velocity。在`web.xml`中...

    Maven 整合 Spring mvc + Mybatis + Velocity 的实例

    1. **创建Maven项目**:首先,我们需要创建一个新的Maven项目,配置pom.xml文件,添加Spring MVC、Mybatis、Velocity以及它们依赖的其他库。 2. **配置Spring MVC**:在src/main/webapp/WEB-INF下创建spring-...

    Maven + Spring mvc + Mybatis + Velocity 整合实例

    在这个整合实例中,开发者可以学习到如何设置Maven的POM.xml文件来管理所有依赖,如何配置Spring MVC的DispatcherServlet和ApplicationContext,如何定义Mybatis的Mapper接口和XML配置文件,以及如何在Velocity模板...

    Maven + Spring mvc + Mybatis + Velocity +国际化配置 demo

    本示例项目" Maven + Spring MVC + Mybatis + Velocity + 国际化配置 Demo"提供了一种实用的方法来实现这一目标。以下将详细讲解这个整合实例中的各个关键组件及其相互作用。 1. Maven:Maven 是一个项目管理工具,...

    精通Spring MVC4

    配置Spring MVC通常涉及web.xml文件中的DispatcherServlet配置,以及Spring配置文件中定义的Controller、ViewResolver和其他组件。Spring Boot简化了这一过程,通过自动配置和@SpringBootApplication注解可以快速...

    spring mvc

    11. **MVC配置**: 传统的XML配置方式逐渐被Java-based配置和注解配置取代,简化了配置过程,使得Spring MVC应用更易维护。 12. **RESTful风格**: Spring MVC 支持创建RESTful API,通过@RequestMapping配合HTTP动词...

    SpringMVC3+velocity最简单配置例子

    1. **添加依赖**: 在项目中引入SpringMVC和Velocity的相关库,通常包括`spring-webmvc`和`velocity`或者`velocity-tools`。 2. **配置SpringMVC**: 配置`DispatcherServlet`,指定处理器映射器、视图解析器等。对于...

    spring mvc框架源码

    9. **Tiles, FreeMarker, Velocity**: Spring MVC支持多种视图技术,如JSP、Thymeleaf、FreeMarker等,这些技术可以方便地构建动态网页。 10. **RESTful风格的支持**: Spring MVC通过@RequestMapping支持RESTful ...

    Spring mvc指南+Spring mvc入门

    本指南将深入探讨 Spring MVC 的核心概念、配置、控制器、数据绑定、视图解析以及实际应用中的最佳实践。 首先,我们来理解 MVC 设计模式。MVC 将应用程序分为三个主要部分:模型(Model)、视图(View)和控制器...

    Spring MVCSpring MVC基础.ppt

    6. **注解驱动开发**:Spring MVC允许使用注解来简化配置,如`@Controller`、`@RequestMapping`、`@Service`、`@Autowired`等,这些注解可以极大地减少XML配置文件的复杂性,提高代码的可读性和可维护性。...

    Spring3.0MVC 实用教程(高淇)

    通过策略接口,Spring MVC 具有高度可配置性,支持多种视图技术,如 JSP、Velocity、Tiles、iText 和 POI。 Spring MVC 的主要组成部分包括控制器、模型对象、分派器和处理程序对象,这些组件的职责明确,易于定制...

    Spring + Spring MVC + MyBatis + Velocity + MySQL 框架搭建源码

    这是我写的一个Spring + Spring MVC + MyBatis + Velocity + MySQL 框架搭建完整项目,里面包含了所需的全部JAR包已经相关源码,感兴趣的同学可以下载喽。。。 配合我的博客更好哦!

    spring框架的MVC

    通过策略接口,Spring 框架是高度可配置的,而且包含多种视图技术,例如 JavaServer Pages(JSP)技术、Velocity、Tiles、iText 和POI。Spring MVC 框架并不知道使用的视图,所以不会强迫您只使用 JSP 技术。Spring ...

    spring-webmvc5.3.6 jar包.rar

    这个jar文件包含Spring MVC框架相关的所有类。  包含国际化、标签、Theme、视图展现的FreeMarker、JasperReports、Tiles、Velocity、XSLT相关类。  当然,如果你的应用使用了独立的MVC框架,则无需这个JAR文件里的...

    Spring MVC配置文档及原理介绍

    此外,Spring MVC支持多种视图技术,如JavaServer Pages (JSP)、Velocity模板引擎、Tiles布局管理器等。这一灵活性意味着Spring MVC不会限制开发者必须使用特定的技术栈,而是提供了一个统一的平台来支持不同的视图...

Global site tag (gtag.js) - Google Analytics