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与velocity整合
Spring MVC框架,整合了velocity,这个没有用到Hibernate,下一版本会把集成Hibernate
Spring MVC+Maven+Velocity配置实例
一个使用maven搭建spring mvc的例子(velocity+mybatis)
这是我写的一个Spring + Spring MVC + MyBatis + Velocity + MySQL 框架搭建完整项目,里面包含了所需的全部JAR包已经相关源码,感兴趣的同学可以下载喽。。。 配合我的博客更好哦!
通过策略接口,Spring 框架是高度可配置的,而且包含多种视图技术,例如 JavaServer Pages(JSP)技术、Velocity、Tiles、iText 和POI。Spring MVC 框架并不知道使用的视图,所以不会强迫您只使用 JSP 技术。Spring ...
Maven 整合 Spring mvc + Mybatis + Velocity 的实例
Maven + Spring mvc + Mybatis + Velocity +国际化配置 整合实例,之前上传的整合 Demo,修改了一些问题,所以重新上传了一个
Maven + Spring mvc + Mybatis + Velocity 整合实例,之前上传的整合 Demo,修改了一些问题,所以重新上传了一个
SpringMVC3+velocity最简单配置例子,入门级的demo
通过策略接口,Spring 框架是高度可配置的,而且包含多种视图技术,例如 JavaServer Pages(JSP)技术、Velocity、Tiles、iText 和POI。Spring MVC 框架并不知道使用的视图,所以不会强迫您只使用 JSP 技术。Spring ...
这个jar文件包含Spring MVC框架相关的所有类。 包含国际化、标签、Theme、视图展现的FreeMarker、JasperReports、Tiles、Velocity、XSLT相关类。 当然,如果你的应用使用了独立的MVC框架,则无需这个JAR文件里的...
spring3 mvc mybatis velocity登录功能的简单实现,主要是想用下mybatis和velocity
NULL 博文链接:https://jjjssh.iteye.com/blog/2065902
本篇文章将通过一个简单显示用户信息的实例整合Spring mvc+mybatis+Maven+velocity+mysql. 一、.Maven工程目录 二、Spring mvc + mybatis +maven实现 1.Mysql数据库表数据
NULL 博文链接:https://liuzidong.iteye.com/blog/1308465
Spring Web model-view-controller (MVC)框架是围绕 DispatcherServlet 设计的,并分发请求到处理程序(handler),Spring MVC支持可配置的处理程序映射(handler mapping),视图解析(view resolution)、 区域设置...
通过策略接口,Spring 框架是高度可配置的,而且包含多种视图技术,例如 JavaServer Pages(JSP)技术、Velocity、Tiles、iText 和POI。Spring MVC 框架并不知道使用的视图,所以不会强迫您只使用 JSP 技术。Spring ...