項目問題筆記彙總

一、根目錄: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二、

ClassPathResource

ClassPathResource類,若是沒有指定相對的類名,該類將從類的根路徑開始尋找某個resource,若是指定了相對的類名,則根據指定類的相對路徑來查找某個resource。
Resource rs = new ClassPathResource("onlyfun/caterpillar/beans-config.xml");
或者
Resource rs = new ClassPathResource("beans-config.xml",SpringDemo.class);
 
2三、 dom4j 根據attributeValue 得到節點內容
 
24 、properties配置文件中千萬注意行末不要有空格,不然會出錯
2五、比較兩個文件是不是同一個用equals()方法,用== 不奏效。緣由待研。比較字符串是否爲空,通常用 str == null || "".equals(str)  具體可參考 http://blog.csdn.net/qq799499343/article/details/8492672
2六、EhCache的設定和刪除,注意key的寫法 @Cacheable(value = "CUSTOM_CACHE", key = "'articleCategory'")    @CacheEvict(value = "CUSTOM_CACHE", key = "'articleCategory'")
若是再設定 @Cacheable(value = "CUSTOM_CACHE", key = "'another'")  ,則上面 @CacheEvict(value = "CUSTOM_CACHE", key = "'articleCategory'") 緩存的刪除不影響key爲another的緩存。
 
 2七、用jquery validator.js 作表單驗證時,驗證密碼(password)和確認密碼(rePassword)兩項相等時,equalTo:"#password",則password表單屬性必定有一個 id="password" 不然不能驗證
2八、myeclipse修改文字大小 http://jingyan.baidu.com/article/b87fe19ebc17fd5218356831.html
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 自定義菜單

 

 

windows linux 下,獲取java項目絕對路徑的方法

 

 

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")

相關文章
相關標籤/搜索