一、根目錄:html
String rootPath = application.getRealPath("/");java
二、文件是否可寫:node
public boolean isCanWrite(String dirPath) {
File file = new File(dirPath);
if(!file.exists()) {
file.mkdir();
}
if(file.canWrite()) {
return true;
} else{
return false;
}
}jquery
三、兩個工具類須要導入的包linux
<%@page import="org.apache.commons.lang.StringUtils"%>
<%@page import="org.apache.commons.io.FileSystemUtils"%>angularjs
StringUtils.equals(欲驗證字符串,"欲驗證字符串的值");spring
參看:apache.commons.io真的很不錯 http://hi.baidu.com/chenxiaowen/item/275004c3f834622def466545數據庫
四、admin目錄輸入任何地址都定位到login.jsp 應該是shiro的配置,待研apache
其中 org.springframework.context.ApplicationContextAware 使用理解 須要注意 ,普通類拿任何spring bean的方法 須要繼承該接口windows
String base = request.getContextPath();
ApplicationContext applicationContext = SpringUtils.getApplicationContext();
if (applicationContext != null) {
response.sendRedirect("login.jsp");
} 這個跳轉 須要研究,爲什麼判斷 applicationContext != null
五、動態參數
JDK1.5特性
void fun(Object... objs){}
拿這個舉例子
你調用fun方法
fun(裏面寫多少參數都OK);
好比fun(1,"s");fun(1,2,"s");fun("s");
均可以
動態參數
六、LocaleResolver(本地化解析器)
參看 http://blog.csdn.net/wendellup/article/details/8532038
七、net.shopxx.service.impl.TemplateServiceImpl
Spring 3中新增的@value註解 http://www.linuxidc.com/Linux/2012-01/52464.htm
spring @Cacheable http://www.ibm.com/developerworks/cn/opensource/os-cn-spring-cache/
http://www.oschina.net/question/82993_70254
八、shiro裏面<property name="filterChainDefinitions"><value>的配置是上面的壓住下面的。
還需注意的是:admin/login 這個登陸驗證網址是要 anno 的,由於這個是能夠匿名訪問的,因此這個不管登陸成敗其返回的頁面均在該網址下,故就不須要配置登陸成功和登陸失敗的頁面的匿名訪問了。
九、md5加密 DigestUtils.md5Hex("admin"); 要添加的包是commons-codec
十、登錄的前後順序:先是FormAuthenticationFilter 而後是Realm ,再是controller
十一、
String str = "abcd";
char [] c = str.toCharArray();
String s = new String(c); // 由char數組構建一個String對象
String s2 = c.toString(); // 將對象c的toString結果(一個String對象)賦給s2對象
s和s2都是String對象,他們的建立方式不一樣
s值是 "abcd"
s2值是對象c的hascode,由於toStrng方法默認返回當前對象(c)的內存地址,即hashCode
十二、request method 'post' not supported http://blog.csdn.net/huanyingfengxing/article/details/8135590
1三、beanUtils 介紹:ORG.APACHE.COMMONS.BEANUTILS.BEANUTILS介紹
bean validation 介紹:小試Bean Validation SpringMVC介紹之Validation
14 interface BaseDao<T extends Serializable> 爲何要這樣寫
15 MyEclipse10 中的兩種FreeMarker插件的安裝與配置
16 獲取實體類
public BaseDaoImpl() {
Type type = getClass().getGenericSuperclass();
Type[] parameterizedType = ((ParameterizedType) type).getActualTypeArguments();
entityClass = (Class<T>) parameterizedType[0];
}
17 類A中須要有屬性xxx的public的 getXXX() 方法,這樣的類的實例,賦值給freemarker模板以後,才能在模板中以${a.xxx}的方式取得值。
1八、SAXReader解析XML
String xmlAddress = "./aaa.xml";
SAXReader reader = new SAXReader();
File xmlFile = new File(xmlAddress);
Document document = reader.read(xmlFile);
這裏用FILE方式讀取,其實用URL是同樣的
------------------------------------------
用dom4j就要用XPath,索引節點很是方便
這裏的XPathExpression就是相似"/root/element/element"的字符串
具體表達式的應用去看下XPath教程就行,入手很容易
//返回符合表達式的節點LIST
List list = document.selectNodes(XPathExpression);
//返回符合表達式的一個節點
Node node = document.selectSingleNode(XPathExpression);
1九、
ServletContextAware 是一個接口,經過這個接口,能夠將 ServletContext 對象賦值給類中的屬性,好比:
public class TestAction implements ServletContextAware{
private ServletContext servletContext;
public void setServletContext(ServletContext context){
this.servletContext = context;
}
}
耦合的方式:ServletActionContext.getServletContext()
解耦的方式:Map application = ActionContext.getContext().getApplication();
1.在javax.servlet.Filter中直接獲取
ServletContext context = config.getServletContext();
2.在HttpServlet中直接獲取
this.getServletContext()
3.在其餘方法中,經過HttpRequest得到
request.getSession().getServletContext();
20、爲避免出現NullPointerException 應判斷下 != null 如:if (item.getParent() != null && articleCategory.getId() == item.getParent().getId()) 若是item.getParent() 爲空,要是不加item.getParent() != null的話,就會出現空指針異常的報錯。加上item.getParent() != null 則能夠避免,由於它自己返回假了,就不會再進行後面的代碼執行了,就避免後面出現空指針異常了。
再一個,XXXServiceImpl 必定要將setBaseDao()方法用@Resource注入basedao
2一、enum枚舉用法 http://www.cnblogs.com/happyPawpaw/archive/2013/04/09/3009553.html
http://blog.csdn.net/congqingbin/article/details/7520137
enmu.values()方法返回
2二、
FreeMarker 緩存處理
FreeMarker 的緩存處理主要用於模版文件的緩存,通常來說,模版文件改動不會很頻繁,在一個流量很是大的網站中,若是頻繁的讀取模版文件對系統的負擔仍是很重的,所以 FreeMarker 經過將模版文件的內容進行緩存,來下降模版文件讀取的頻次,下降系統的負載。
當處理某個模版時,FreeMarker 直接從緩存中返回對應的 Template 對象,並有一個默認的機制來保證該模版對象是跟模版文件同步的。若是使用的時候 FreemarkerServlet 時,有一個配置項 template_update_delay 用來指定更新模版文件的間隔時間,至關於多長時間檢測一下是否有必要從新加載模版文件,0 表示每次都從新加載,不然爲多少毫秒鐘檢測一下模版是否更改。
FreeMarker 定義了一個統一的緩存處理接口 CacheStorage ,默認的實現是 MruCacheStorage 最近最少使用的緩存策略。通常狀況下,不多須要對緩存進行擴展處理。您能夠經過下面的代碼指定最大緩存的模版數:cfg.setCacheStorage(new freemarker.cache.MruCacheStorage(20, 250))
其中第一個參數是最大的強引用對象數,第二個爲最大的弱引用對象數。這兩個值 FreeMarker 默認的是 0 和 Integer.MAX_VALUE,代表模版緩存數是無限的
30、關於springmvc國際化的Message所引起的問題
首先參考第一篇文章 學習Spring必學的Java基礎知識(8)----國際化信息 http://stamen.iteye.com/blog/1541732
裏面有一句話 HierarchicalMessageSource接口最重要的兩個實現類是ResourceBundleMessageSource和ReloadableResourceBundleMessageSource。
第二篇文章 解決: org.springframework.beans.factory.BeanNotOfRequiredTypeException辦法 http://ekisstherain.iteye.com/blog/1569236
仔細鑽研下。
以及 spring中MessageSource的配置使用方法1 http://blog.csdn.net/qyf_5445/article/details/8124306 http://blog.csdn.net/qyf_5445/article/details/8124431#comments
3一、時間互轉
用SimpleDateFormat來轉換
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = sdf.parse("2008-08-08 12:10:12");
3二、注意@Transient 必定放在get方法上,而不要放在屬性上。
3三、springmvc的 @requestparam的問題。以下示例:
@RequestMapping("/test")
public String test(@RequestParam Integer pageNumber){
}
這種寫法狀況下,若是訪問網址沒帶 pageNumber的參數,例如直接 訪問 /test ,則會報錯 :pageNumber is not present. 究其緣由應該是 默認required 爲true
正確的寫法應該是 @RequestParam(value = "pageNumber" , required = false ) Integer pageNumber ,此時直接訪問/test ,pageNumber會被賦值 null
若是這樣寫了:@RequestParam(value = "pageNumber" , required = false ) int pageNumber ,仍是會報錯pageNumber is not present. 究其緣由是pageNumber會被賦值null,但其類型倒是int類型的,因此不行,必須得用包裝類型才能夠。
3四、angularjs directive 的 templateUrl 指向的頁面,必定要有根元素!!再者,定義directive名字成駝峯 anName 樣式的時候,調用的格式是 <an-name></an-name>
3五、亂碼問題 總覽,參考 http://tchen8.iteye.com/blog/993504
遇到亂碼問題,一般的檢查項包括:
1. 編輯器保存文件的字符集;
2. 數據庫的字符集;
3. 應用服務器或者Web服務器處理字符串採用的字符集
4. JSP對於字符集聲明
5. Servlet過濾器,以及MVC框架攔截器對於字符集的處理
6. 其它涉及字符集處理的環節
(1) tomcat 設置編碼 可參考 http://blog.csdn.net/loveaborn/article/details/44450873
3六、shiro 中獲取servletContext 和WebApplicationContext
ServletRequest request = ((WebSubject)SecurityUtils.getSubject()).getServletRequest();
HttpSession httpSession = ((HttpServletRequest)request).getSession();
logger.debug("httpSession.getServletContext():"+httpSession.getServletContext());
context = WebApplicationContextUtils.getWebApplicationContext(httpSession.getServletContext());
37 設置myeclipse自動註釋
preferences -> 搜 code template -> Comments -> Type
/**
*
*
* @author xxxxxxx
* @date ${date} ${time}
*/
而後把同類其餘的註釋都去掉
最後選擇下面的Automatically add comments....
解決辦法
在項目上右鍵Properties-》Project Facets,在打開的Project Facets頁面中的Java下拉列表中,選擇相應版本。
有多是java1.6 改爲java6之類的
點擊Eclipse上方菜單Window——Customize Perspective 自定義菜單
struts2設置了struts.multipart.saveDir後會在根目錄創建文件夾,這樣會涉及linux下的權限問題,
最好不要設置,使用struts默認
須要使用路徑時,用下面的方法取得項目根目錄的絕對路徑(Tools爲方法類)
public static String getRootPath() {
String classPath = Tools.class.getClassLoader().getResource("/").getPath();
String rootPath = "";
//windows下
if("\\".equals(File.separator)){
rootPath = classPath.substring(1,classPath.indexOf("/WEB-INF/classes"));
rootPath = rootPath.replace("/", "\\");
}
//linux下
if("/".equals(File.separator)){
rootPath = classPath.substring(0,classPath.indexOf("/WEB-INF/classes"));
rootPath = rootPath.replace("\\", "/");
}
return rootPath;
}
接收變量防止亂碼措施
request.getParameter("reply").getBytes("iso-8859-1"), "utf-8")