1、中文亂碼問題
通過編寫一個類實現Filter(過濾器)接口,重寫里面的方法,並在doFilter這個方法里面設置字符編碼為utf-8,通過ServletRequest.setCharacterEncoding(”utf-8”)來設置;這里之所以用自定義filter(過濾器)來解決這個問題,是因為過濾器在HttpServletRequest到達Servlet之前,會被攔截下來,只有執行過濾器的doFilter方法才會轉到下一個鏈中,注意,需要在web.xml文件中配置信息來創建Filter實例對象;
如果這樣都還未解決問題的話,可以修改tomcat目錄下的config文件目錄下的server.xml文件,需要為每個Connector節點加上一個屬性:useBodyEncodingForURI=”true”;
2、表單重復提交問題
我的做法是在服務器端利用session來防止表單重復提交,具體的做法是:在服務端隨機生成一個token,同時在當前用戶的Session中保存這個token,然后將token發送到客戶端的form表單中,在form表單中使用隱藏域來儲存這個token
<input type=”hidden” name=”token” value=”${token}”/>采用EL表達式來取出這個值;在表單提交的時候,連同這個token一起提交到服務器端,然后再服務器端判斷客戶端提交上來的token與服務器端生成的token是否一致,如果不一致,則就是重復提交了,此時服務器端不再處理這個重復提交的表單;如果相同則處理表單,並且清除當前用戶的Session中的token,這樣第二次提交的時候服務器端的token就不存在了;當然還可以用js來處理這個問題,當用戶提交之后將提交按鈕設置為disabled,使按鈕不可以再觸發;
3、數據庫中兩個表作自然連接(natural join)的時候,如果兩個表存在相同名字的字段,比如說A表存在name字段,B表也存在name字段,那么當作A natural join B的時候,如果兩個表中的name的內容不相等的時候,則也不會查找出那條內容;所以正確的做法就是將兩個表中的name字段分別用a_name,b_name來表示;
4、做這個項目的時候,有一些功能比如說查看發布的職位是不需要用戶登錄之后的,而有一些操作比如過投遞簡歷是需要用戶登錄之后才可以操作的,所以就需要為這些操作做出區別,我使用Spring Web MVC 的攔截器來實現這個功能的,首先對不需要用戶登錄的方法做出標記,比如說方法名用個后綴,然后在攔截器中判斷當前請求的url是否包含這個標記,如果有則直接返回,如果沒有則需要攔截下來,判斷是否已經登錄,只有登錄了才可以進行操作,否則跳到登錄頁面;
自定義攔截器需要實現HandlerInterceptor,然后重寫里面的preHandle,postHandle和afterCompletion方法,之前的那些操作都是在preHandle方法中實現的。注意攔截器需要在springmvc.xml文件中配置