springMVC的一些工具类,主要有转换器,读取器
读取文件:
package cn.edu.hbcf.common.springmvc; import java.util.HashMap; import java.util.Map; import java.util.Properties; import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer; public class CustomizedPropertyConfigurer extends PropertyPlaceholderConfigurer{ private static Map<String, Object> ctxPropertiesMap; @Override protected void processProperties( ConfigurableListableBeanFactory beanFactoryToProcess, Properties props) throws BeansException { super.processProperties(beanFactoryToProcess, props); ctxPropertiesMap = new HashMap<String, Object>(); for (Object key : props.keySet()) { String keyStr = key.toString(); String value = props.getProperty(keyStr); ctxPropertiesMap.put(keyStr, value); } } public static Object getContextProperty(String name) { return ctxPropertiesMap.get(name); } }
springMVC中日期转换:
package cn.edu.hbcf.common.springmvc; import java.beans.PropertyEditorSupport; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import org.apache.commons.lang.StringUtils; /** * spring中日期转换 * * <pre> * @InitBinder * public void initBinder(WebDataBinder binder) { * binder.registerCustomEditor(Date.class, new DateConvertEditor()); * // binder.registerCustomEditor(Date.class, new * // DateConvertEditor("yyyy-MM-dd")); * binder.registerCustomEditor(String.class, new StringTrimmerEditor(true)); * } * </pre> * * * @author LiPenghui * @date 2011-8-10 下午1:48:37 */ public class DateConvertEditor extends PropertyEditorSupport{ private DateFormat format; public DateConvertEditor(){ this.format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); } public DateConvertEditor(String format){ this.format=new SimpleDateFormat(format); } /** Date-->String **/ public String getAsText(){ if(getValue()==null){ return ""; } return this.format.format(getValue()); } /** String-->Date **/ public void setAsText(String text){ if(!StringUtils.isNotBlank(text)){ setValue(null); }else{ try { setValue(this.format.parse(text)); } catch (ParseException e) { throw new IllegalArgumentException("不能被转换的日期字符串,请检查!", e); } } } }
日期另一个转换器(暂时没用到)
package cn.edu.hbcf.common.springmvc; import java.text.ParseException; import java.util.Date; import org.springframework.core.convert.converter.Converter; import cn.edu.hbcf.common.utils.DateUtils; public class DateCovertor implements Converter<String,Date>{ @Override public Date convert(String date) { if(date != null){ try { return DateUtils.convertStringToDate(date, "yyyy-MM-dd HH:mm:ss"); } catch (ParseException e) { try { return DateUtils.convertStringToDate(date, "yyyy-MM-dd"); } catch (ParseException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } } return null; } }
int类型转换器:
package cn.edu.hbcf.common.springmvc; import java.beans.PropertyEditorSupport; import org.springframework.util.StringUtils; /** * * @author QQ int 2012-5-30 类型转换器 * */ public class IntegerConvertEditor extends PropertyEditorSupport { @Override public void setAsText(String text) throws IllegalArgumentException { if (text == null || text.equals("")) { text = "0"; } if (!StringUtils.hasText(text)) { setValue(null); } else { setValue(Integer.parseInt(text));// 这句话是最重要的,他的目的是通过传入参数的类型来匹配相应的databind } } /** * Format the Date as String, using the specified DateFormat. */ @Override public String getAsText() { return getValue().toString(); } }
integer转换器:
package cn.edu.hbcf.common.springmvc; import org.springframework.core.convert.converter.Converter; import org.springframework.util.StringUtils; /** * Integer转换器 * @author qiangqiang * */ public class IntegerConvertor implements Converter<String,Integer>{ @Override public Integer convert(String s) { if("".equals(s)){ return 0; } else if (StringUtils.hasText(s)) { return Integer.parseInt(s); } return null; } }
接收异常,暂时没用到
package cn.edu.hbcf.common.springmvc; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.HandlerExceptionResolver; import org.springframework.web.servlet.ModelAndView; public class MyHandlerExceptionResolver implements HandlerExceptionResolver { @Override public ModelAndView resolveException(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3) { // TODO Auto-generated method stub return null; } }
不知道干嘛用的:
package cn.edu.hbcf.common.springmvc; import javax.servlet.http.HttpServletRequest; import org.springframework.web.multipart.commons.CommonsMultipartResolver; /** * @author 帐前卒 */ public class MyMultipartResolver extends CommonsMultipartResolver { private String excludeUrls; private String[] excludeUrlArray; public String getExcludeUrls() { return excludeUrls; } public void setExcludeUrls(String excludeUrls) { this.excludeUrls = excludeUrls; this.excludeUrlArray = excludeUrls.split(","); } /** * 这里是处理Multipart http的方法。如果这个返回值为true,那么Multipart http body就会MyMultipartResolver 消耗掉.如果这里返回false * 那么就会交给后面的自己写的处理函数处理例如刚才ServletFileUpload 所在的函数 * @see org.springframework.web.multipart.commons.CommonsMultipartResolver#isMultipart(javax.servlet.http.HttpServletRequest) */ @Override public boolean isMultipart(HttpServletRequest request) { for (String url : excludeUrlArray) { // 这里可以自己换判断 if (request.getRequestURI().contains(url)) { return false; } } return super.isMultipart(request); } }
总体类,和springMVC配置中对应:
package cn.edu.hbcf.common.springmvc; import java.util.Date; import org.springframework.beans.propertyeditors.StringTrimmerEditor; import org.springframework.web.bind.WebDataBinder; import org.springframework.web.bind.support.WebBindingInitializer; import org.springframework.web.context.request.WebRequest; public class MyWebBindingInitializer implements WebBindingInitializer { public void initBinder(WebDataBinder binder, WebRequest request) { binder.registerCustomEditor(Date.class, new DateConvertEditor("yyyy-MM-dd")); binder .registerCustomEditor(String.class, new StringTrimmerEditor( false)); binder.registerCustomEditor(int.class, new IntegerConvertEditor()); binder.registerCustomEditor(String[].class, new StringArrayConvertEditor()); } }
以静态变量保存Spring Application, 可以在任何代码任何地方任何时候取出ApplicationContext
package cn.edu.hbcf.common.springmvc; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; /** * 以静态变量保存Spring Application, 可以在任何代码任何地方任何时候取出ApplicationContext * * @author LiPenghui * */ public class SpringContextHolder implements ApplicationContextAware { private static ApplicationContext applicationContext; private static Logger logger = LoggerFactory.getLogger(SpringContextHolder.class); /** * 实现ApplicationContextAware接口的context注入函数,将其存入静态变量 */ public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { SpringContextHolder.applicationContext = applicationContext; logger.debug("SpringContextHolder注入ApplicationContext"); } /** * 获取存储在静态变量中的ApplicationContext * * @return */ public static ApplicationContext getApplicationContext() { checkApplicationContext(); return applicationContext; } /** * 从静态变量ApplicationContext中获取Bean,自动转型为所赋值对象的类型 * @param <T> * @param name * @return */ @SuppressWarnings("unchecked") public static <T> T getBean(String name){ checkApplicationContext(); return (T) applicationContext.getBean(name); } @SuppressWarnings("unchecked") public static <T> T getBean(Class<T> clazz){ checkApplicationContext(); return (T) applicationContext.getBeansOfType(clazz); } /** * 清除ApplicationContext静态变量. */ public static void cleanApplicationContext(){ applicationContext=null; } /** * 检查是否获取到了ApplicationContext */ private static void checkApplicationContext() { if (applicationContext == null) { throw new IllegalStateException( "applicationContext未注入,请在applicationContext.xml中定义SpringContextHolder"); } } }
string数组转换:
package cn.edu.hbcf.common.springmvc; import java.beans.PropertyEditorSupport; import org.springframework.util.StringUtils; public class StringArrayConvertEditor extends PropertyEditorSupport { @Override public void setAsText(String text) throws IllegalArgumentException { if (text == null || text.equals("")) { text = ""; } if (!StringUtils.hasText(text)) { setValue(null); } else { setValue(text);// 这句话是最重要的,他的目的是通过传入参数的类型来匹配相应的databind } } /** * Format the Date as String, using the specified DateFormat. */ @Override public String getAsText() { return getValue().toString(); } }
StringConerter
package cn.edu.hbcf.common.springmvc; import org.springframework.core.convert.converter.Converter; public class StringConerter implements Converter<String,String>{ @Override public String convert(String source) { if(source != null){ return source.trim(); } return null; } }