㈠ 實體類的@tableid註解可以防止sql注入嗎
不可以,防sql注入一般有兩種方式
以參數綁定的形式執行查詢 比如hibernate的setParamter,jdbc的preparedstatement
編寫全局的攔截器,過濾參數中的特殊字元(有誤判)
SQL注入解決方案
㈡ 現在有個需求,用的是hibernate,需要在hibernate攔截器中對查詢的sql進行where條件拼接
這個寫起來很麻煩,提供解決思路。
1、在web.xml里實現攔截器配置。針對於某一個連接跳轉的。
2、攔截器功能實現,拿到參數。實現需要反射進行實現,同時要保證線程安全。
3、參數處理放到Session里。
4、在實際SQL語句中查詢。
如果跟spring集成的話,建議使用spring的AOP,進行動態代理實現。 進行初期處理。
㈢ java web 過濾器跟攔截器的區別和使用
區別如下:
1 、攔截器是基於java的反射機制的,而過濾器是基於函數回調。
2 、攔截器不依賴與servlet容器,過濾器依賴與servlet容器。
3 、攔截器只能對action請求起作用,而過濾器則可以對幾乎所有的請求起作用。
4 、攔截器可以訪問action上下文、值棧里的對象,而過濾器不能訪問。
5 、在action的生命周期中,攔截器可以多次被調用,而過濾器只能在容器初始化時被調用一次。
使用如下:
在Servlet作為過濾器使用時,它可以對客戶的請求進行處理。處理完成後,它會交給下一個過濾器處理,這樣,客戶的請求在過濾鏈里逐個處理,直到請求發送到目標為止。例如,某網站里有提交「修改的注冊信息」的網頁,當用戶填寫完修改信息並提交後,伺服器在進行處理時需要做兩項工作:判斷客戶端的會話是否有效;對提交的數據進行統一編碼。
這兩項工作可以在由兩個過濾器組成的過濾鏈里進行處理。當過濾器處理成功後,把提交的數據發送到最終目標;如果過濾器處理不成功,將把視圖派發到指定的錯誤頁面。
(3)攔截器防止sql注入擴展閱讀:
攔截器,在AOP(Aspect-Oriented Programming)中用於在某個方法或欄位被訪問之前,進行攔截然後在之前或之後加入某些操作。攔截是AOP的一種實現策略。
在Webwork的中文文檔的解釋為——攔截器是動態攔截Action調用的對象。它提供了一種機制可以使開發者可以定義在一個action執行的前後執行的代碼,也可以在一個action執行前阻止其執行。同時也是提供了一種可以提取action中可重用的部分的方式。
過濾器是一個程序,它先於與之相關的servlet或JSP頁面運行在伺服器上。過濾器可附加到一個或多個servlet或JSP頁面上,並且可以檢查進入這些資源的請求信息。
㈣ mybatis中攔截器怎麼實現攔截插入指定表的操作
首先要實現mybatis的Interceptor介面,
實現它的三個方法:
Object intercept(Invocation invocation) throws Throwable;
Object plugin(Object target);
void setProperties(Properties properties);
plugin方法是攔截器用於封裝目標對象的,通過該方法我們可以返回目標對象本身,也可以返回一個它的代理。當返回的是代理的時候我們可以對其中的方法進行攔截來調用intercept方法,當然也可以調用其他方法,這點將在後文講解。
setProperties方法是用於在Mybatis配置文件中指定一些屬性的。
plugin方法中我們可以決定是否要進行攔截進而決定要返回一個什麼樣的目標對象。而intercept方法就是要進行攔截的時候要執行的方法。
下面例子本來相用於記錄日誌到資料庫,但是由於mybatis底層無法注入spring的
㈤ 一個springMVC的小項目 包括用戶角色許可權管理的DEMO
隨著企業信息化的不斷深入,各種各樣的信息系統成為提高企業運營及管理效率的必備工具,越來越多的企業核心機密如銷售機會、客戶資料、設計方案等通過信息系統存儲、備案、流轉,這些核心資料一旦外泄,勢必對企業造成極大損失。科技時代,信息是企業生存的命脈,信息的安全也必然成為企業極度重視的問題。如今,隨著各種信息安全措施的實施,信息泄密已經從外部泄漏向內部人員泄漏轉移。外部的黑客、病毒要想獲取有價值的信息,必須穿透多道防火牆,逃避多重殺毒工具的追殺,再對信息進行篩選才能如願以償;而內部人員知道什麼信息是有價值的,如果不對信息進行必要的安全防護,企業內部一些有有心人員會十分容易地獲取自己所需要的信息資料。
最近的一份調查顯示,幾乎有一半的各行各業專業人士承認當他們跳槽時會帶走資料,包括文件、銷售協議和合同清單等各種資料,並將它們告訴下一個老闆。調查還發現,八成的職員可以輕松地下載「有競爭力」的資料和信息,然後帶到下一份工作中。
信息安全任重而道遠。要保證信息系統的安全,需要考慮到很多方面如防火牆、加密傳輸、防SQL注入等,但很多的安全方案都是從如何把守大門著手的,如身份認證、數字證書,不管是傳統的用戶名加口令方式還是基於生物特徵識別的指紋、視網膜掃描技術,乃至各類電子政務領域常用的USBkey都是在進入系統大門時大做文章,一旦身份識別完成進入大門後,卻聽之任之,很少再有處理方案。本文重點不在如何進行身份認證,而在身份認證完成後也即進入系統大門後,如何保證用戶只在自己有許可權的范圍內進行操作,而不是可以進行任意功能的操作即系統內部細粒度許可權控制解決方案。
常用的許可權系統設計模式是以角色為核心的,即角色是具有相同許可權的一類人員的集合:
1. 一個角色可以有包含多個操作人員,一個操作人員也可以屬於多個角色
2. 一個角色可以具有多個功能的操作許可權,一個功能也可以被多個角色所擁有。
在登錄時通過查詢登錄用戶所屬角色,即可得到個用戶的所有功能集合,如下圖:
多數業務系統的頁面功能菜單設計是以三級為標準的,即一級功能菜單、二級功能菜單、三級功能菜單,通常情況下一二級功能菜單只是用於功能分類,是不具有功能訪問地址的,三級菜單才是功能的真正入口,常規許可權系統就是通過控制每個人員對應的功能菜單的顯示與隱藏來實現許可權控制。要實現細粒度許可權控制,可在設計功能表時再加入第四層:頁面元素,隸屬於第三層功能菜單,這些頁面元素用來標識功能頁面中的每一個功能按鈕,如增加、修改、刪除、查詢都可算是頁面元素,在為角色分配許可權時,第四層也同樣納入統一許可權管理,如果有此頁面元素的許可權,則頁面上就顯示該按鈕,如果沒有此頁面元素的功能許可權,則該按鈕就不會顯示出來。
對於沒有許可權訪問的功能或頁面除了進行前台的隱藏之外,還需要在後台訪問時進行許可權的驗證,否則操作人員繞開頁面直接通過輸入URL訪問功能就會造成許可權漏洞,通過SpringMVC+Annotation的方式可以輕松實現,代碼如下:
第一步:創建SpringMVC攔截器,攔截所有需要進行許可權驗證的功能請求
[html] view plain
<!-- 開啟註解 -->
<mvc:annotation-driven/>
<!-- 靜態資源訪問 -->
<mvc:resources location="/static/" mapping="/static/**"/>
<!-- 攔截器 -->
<mvc:interceptors>
<!-- 多個攔截器,順序執行 -->
<mvc:interceptor>
<!-- 如果不配置或/**,將攔截所有的Controller -->
<mvc:mapping path="/**" />
<!-- 在Freemarker界面展示之前做一些通用處理 -->
<bean class="xx.xxxx.core.web.FreeMarkerViewInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
第二步:創建作用於Method級別的Annotation類,用於傳入功能ID
[java] view plain
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Permission {
/**
* 功能ID,該功能ID,對應資料庫中的功能ID
* @return
* @version V1.0.0
* @date Jan 13, 2014 4:59:35 PM
*/
String value();
}
第三步:通過靜態常量建立資料庫中的功能ID與執行方法的一對一關系
[java] view plain
public class FuncConstants {
/**
* 系統管理-角色管理-增加角色
*/
public final static String Xtgl_Jsgl_AddJs = "";
/**
* 系統管理 - 部門管理- 部門列表
*/
public final static String Xtgl_Bmgl_BmList = "";
}
第四步:在SpringMVC攔截器中驗證許可權
[java] view plain
/**
* FreeMarker視圖攔截器,頁面展示之前做一些通用處理
* @version V1.0.0
* @date Dec 12, 2013 4:20:04 PM
*/
public class FreeMarkerViewInterceptor extends HandlerInterceptorAdapter {
public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3) throws Exception {
}
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object arg2, ModelAndView view) throws Exception {
String contextPath = request.getContextPath();
if (view != null) {
request.setAttribute("base", contextPath);
}
}
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//處理Permission Annotation,實現方法級許可權控制
HandlerMethod method = (HandlerMethod)handler;
Permission permission = method.getMethodAnnotation(Permission.class);
//如果為空在表示該方法不需要進行許可權驗證
if (permission == null) {
return true;
}
//驗證是否具有許可權
if (!WebUtil.hasPower(request, permission.value())) {
response.sendRedirect(request.getContextPath()+"/business/nopermission.html");
return false;
}
return true;
//注意此處必須返回true,否則請求將停止
//return true;
}
}
至此,基於按鈕、方法驗證的細粒度許可權體系完成!
㈥ web攻擊有哪些怎麼防護
1、DoS和DDoS攻擊(DoS(Denial of Service),即拒絕服務,造成遠程伺服器拒絕服務的行為被稱為DoS攻擊。其目的是使計算機或網路無法提供正常的服務。最常見的DoS攻擊有計算機網路帶寬攻擊和連通性攻擊)
防範:(1) 反欺騙:對數據包的地址及埠的正確性進行驗證,同時進行反向探測。(2) 協議棧行為模式分析:每個數據包類型需要符合RFC規定,這就好像每個數據包都要有完整規范的著裝,只要不符合規范,就自動識別並將其過濾掉。(3) 特定應用防護:非法流量總是有一些特定特徵的,這就好比即便你混進了顧客群中,但你的行為還是會暴露出你的動機,比如老重復問店員同一個問題,老做同樣的動作,這樣你仍然還是會被發現的。(4) 帶寬控制:真實的訪問數據過大時,可以限制其最大輸出的流量,以減少下游網路系統的壓力。
2、CSRF(Cross Site Request Forgery),即跨站請求偽造,是一種常見的Web攻擊,但很多開發者對它很陌生。CSRF也是Web安全中最容易被忽略的一種攻擊。
防範:(1) 驗證碼。應用程序和用戶進行交互過程中,特別是賬戶交易這種核心步驟,強制用戶輸入驗證碼,才能完成最終請求。在通常情況下,驗證碼夠很好地遏制CSRF攻擊。但增加驗證碼降低了用戶的體驗,網站不能給所有的操作都加上驗證碼。所以只能將驗證碼作為一種輔助手段,在關鍵業務點設置驗證碼。(2) Referer Check。HTTP Referer是header的一部分,當瀏覽器向web伺服器發送請求時,一般會帶上Referer信息告訴伺服器是從哪個頁面鏈接過來的,伺服器籍此可以獲得一些信息用於處理。可以通過檢查請求的來源來防禦CSRF攻擊。正常請求的referer具有一定規律,如在提交表單的referer必定是在該頁面發起的請求。所以通過檢查http包頭referer的值是不是這個頁面,來判斷是不是CSRF攻擊。但在某些情況下如從https跳轉到http,瀏覽器處於安全考慮,不會發送referer,伺服器就無法進行check了。若與該網站同域的其他網站有XSS漏洞,那麼攻擊者可以在其他網站注入惡意腳本,受害者進入了此類同域的網址,也會遭受攻擊。出於以上原因,無法完全依賴Referer Check作為防禦CSRF的主要手段。但是可以通過Referer Check來監控CSRF攻擊的發生。(3) Anti CSRF Token。目前比較完善的解決方案是加入Anti-CSRF-Token,即發送請求時在HTTP 請求中以參數的形式加入一個隨機產生的token,並在伺服器建立一個攔截器來驗證這個token。伺服器讀取瀏覽器當前域cookie中這個token值,會進行校驗該請求當中的token和cookie當中的token值是否都存在且相等,才認為這是合法的請求。否則認為這次請求是違法的,拒絕該次服務。這種方法相比Referer檢查要安全很多,token可以在用戶登陸後產生並放於session或cookie中,然後在每次請求時伺服器把token從session或cookie中拿出,與本次請求中的token 進行比對。由於token的存在,攻擊者無法再構造出一個完整的URL實施CSRF攻擊。但在處理多個頁面共存問題時,當某個頁面消耗掉token後,其他頁面的表單保存的還是被消耗掉的那個token,其他頁面的表單提交時會出現token錯誤。
3、XSS(Cross Site Scripting),跨站腳本攻擊。為和層疊樣式表(Cascading Style Sheets,CSS)區分開,跨站腳本在安全領域叫做「XSS」。
防範:(1) 輸入過濾。永遠不要相信用戶的輸入,對用戶輸入的數據做一定的過濾。如輸入的數據是否符合預期的格式,比如日期格式,Email格式,電話號碼格式等等。這樣可以初步對XSS漏洞進行防禦。上面的措施只在web端做了限制,攻擊者通抓包工具如Fiddler還是可以繞過前端輸入的限制,修改請求注入攻擊腳本。因此,後台伺服器需要在接收到用戶輸入的數據後,對特殊危險字元進行過濾或者轉義處理,然後再存儲到資料庫中。(2) 輸出編碼。伺服器端輸出到瀏覽器的數據,可以使用系統的安全函數來進行編碼或轉義來防範XSS攻擊。在PHP中,有htmlentities()和htmlspecialchars()兩個函數可以滿足安全要求。相應的JavaScript的編碼方式可以使用JavascriptEncode。(3) 安全編碼。開發需盡量避免Web客戶端文檔重寫、重定向或其他敏感操作,同時要避免使用客戶端數據,這些操作需盡量在伺服器端使用動態頁面來實現。(4) HttpOnly Cookie。預防XSS攻擊竊取用戶cookie最有效的防禦手段。Web應用程序在設置cookie時,將其屬性設為HttpOnly,就可以避免該網頁的cookie被客戶端惡意JavaScript竊取,保護用戶cookie信息。(5)WAF(Web Application Firewall),Web應用防火牆,主要的功能是防範諸如網頁木馬、XSS以及CSRF等常見的Web漏洞攻擊。由第三方公司開發,在企業環境中深受歡迎。
4、SQL注入(SQL Injection),應用程序在向後台資料庫傳遞SQL(Structured Query Language,結構化查詢語言)時,攻擊者將SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字元串,最終達到欺騙伺服器執行惡意的SQL命令。
防範:(1) 防止系統敏感信息泄露。設置php.ini選項display_errors=off,防止php腳本出錯之後,在web頁面輸出敏感信息錯誤,讓攻擊者有機可乘。(2) 數據轉義。設置php.ini選項magic_quotes_gpc=on,它會將提交的變數中所有的』(單引號),」(雙引號),\(反斜杠),空白字元等都在前面自動加上\。或者採用mysql_real_escape()函數或addslashes()函數進行輸入參數的轉義。(3) 增加黑名單或者白名單驗證。白名單驗證一般指,檢查用戶輸入是否是符合預期的類型、長度、數值范圍或者其他格式標准。黑名單驗證是指,若在用戶輸入中,包含明顯的惡意內容則拒絕該條用戶請求。在使用白名單驗證時,一般會配合黑名單驗證。
5、上傳漏洞在DVBBS6.0時代被黑客們利用的最為猖獗,利用上傳漏洞可以直接得到WEBSHELL,危害等級超級高,現在的入侵中上傳漏洞也是常見的漏洞。該漏洞允許用戶上傳任意文件可能會讓攻擊者注入危險內容或惡意代碼,並在伺服器上運行。
防範: (1)檢查伺服器是否判斷了上傳文件類型及後綴。 (2) 定義上傳文件類型白名單,即只允許白名單裡面類型的文件上傳。 (3) 文件上傳目錄禁止執行腳本解析,避免攻擊者進行二次攻擊。 Info漏洞 Info漏洞就是CGI把輸入的參數原樣輸出到頁面,攻擊者通過修改輸入參數而達到欺騙用戶的目的。
㈦ SpringMVC的攔截器和過濾器的區別與聯系
首先給介紹下過濾器和攔截器的區別:
(1)攔截器是基於Java的反射機制的,而過濾器是基於函數回調。
(2)攔截器不依賴與servlet容器,過濾器依賴與servlet容器。
(3)攔截器只能對action請求起作用,而過濾器則可以對幾乎所有的請求起作用。
(4)攔截器可以訪問action上下文、值棧里的對象,而過濾器不能訪問。
(5)在action的生命周期中,攔截器可以多次被調用,而過濾器只能在容器初始化時被調用一次。
(6)攔截器可以獲取IOC容器中的各個bean,而過濾器就不行,這點很重要,在攔截器里注入一個service,
可以調用業務邏輯。
然後進行分析下:
1.過濾器是JavaEE標准,採用函數回調的方式進行。是在請求進入容器之後,還未進入Servlet之前進行預處
理,並且在請求結束返回給前端這之間進行後期處理。
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println("before...");
chain.doFilter(request, response);
System.out.println("after...");
}
chain.doFilter(request, response);這個方法的調用作為分水嶺。事實上調用Servlet的doService()方法是在
chain.doFilter(request, response);這個方法中進行的。
2.攔截器是被包裹在過濾器之中的。
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("preHandle");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("postHandle");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("afterCompletion");
}
a.preHandle()這個方法是在過濾器的chain.doFilter(request, response)方法的前一步執行,也就是在
[System.out.println("before...")][chain.doFilter(request, response)]之間執行。
b.preHandle()方法之後,在return ModelAndView之前進行,可以操控Controller的ModelAndView內容。
c.afterCompletion()方法是在過濾器返回給前端前一步執行,也就是在[chain.doFilter(request, response)]
[System.out.println("after...")]之間執行。
3.SpringMVC的機制是由同一個Servlet來分發請求給不同的Controller,其實這一步是在Servlet的service()方法
中執行的。所以過濾器、攔截器、service()方法,dispatc()方法的執行順序應該是這樣的如下圖:
㈧ ssm框架畢業答辯常見問題有哪些, 例如ssm如何實現資料庫的連接
一、Spring常見問題
1、Spring 在ssm中起什麼作用?
Spring:輕量級框架
作用:Bean工廠,用來管理Bean的生命周期和框架集成。
兩大核心:
IOC/DI(控制反轉/依賴注入) :把依賴注入到service層,service層反轉給action層,Spring頂層容器為BeanFactory
AOP:面向切面編程
編程式事務管理:編程方式管理事務,極大靈活性,難維護。
聲明式事務管理:可以將業務代碼和事務管理分離,用註解和xml配置來管理事務。
開啟事務註解驅動
事務管理器
開啟註解功能,並配置掃描包
配置資料庫
配置SQL會話工廠,別名,映射文件
不用編寫Dao層的實現類
注冊
@Controller @Service @Component
注入
@Autowired @Resource
請求地址
@RequestMapping
返回具體數據類型而非跳轉
@ResponseBody
構造器注入:通過構造方法初始化
<constructor-arg index="0" type="java.lang.String" value="寶馬"></constructor-arg>
setter方法注入:通過setter方法初始化
<property name="id" value="1111"></property>
介面注入
工廠模式:每個Bean的創建通過方法
單例模式:默認的每個Bean的作用域都是單例
代理模式:關於Aop的實現通過代理模式
IOC:通過反射機制生成對象注入
AOP:動態代理
問題:單例模式,在多線程訪問時有線程安全問題
解決方法:不要用同步,在控制器裡面不能寫欄位
@Controller:該註解表明該類扮演控制器的角色
作用:用來映射一個URL到一個類或者一個特定的處理方法上
方法:直接在方法中聲明這個對象,SpringMvc就自動把屬性賦值到這個對象裡面
轉發: return:"hello"
重定向 :return:"redirect:hello.jsp"
通過SqlSessionFactoryBuilder從mybatis-config.xml配置文件中構建出SqlSessionFactory。
SqlSessionFactory開啟一個SqlSession,通過SqlSession實例獲得Mapper對象並且運行Mapper映射的Sql語句。
完成資料庫的CRUD操作和事務提交,關閉SqlSession。
2、Spring的事務?
3、IOC 在項目中的作用?
作用:Ioc解決對象之間的依賴問題,把所有Bean的依賴關系通過配置文件或註解關聯起來,降低了耦合度。
4、Spring的配置文件中的內容?
5、Spring下的註解?
6、Spring DI 的三種方式?
7、Spring主要使用了什麼模式?
8、IOC,AOP的實現原理?
二、SpringMvc常見問題
1、SpringMvc 的控制器是不是單例模式,如果是,有什麼問題,怎麼解決?
2、SpringMvc 中控制器的註解?
3、@RequestMapping 註解用在類上的作用?
4、前台多個參數,這些參數都是一個對象,快速得到對象?
5、SpringMvc中函數的返回值?
String,ModelAndView,List,Set 等
一般String,Ajax請求,返回一個List集合
6、SpringMvc中的轉發和重定向?
7、SpringMvc和Ajax之間的相互調用?
通過JackSon框架把java裡面對象直接轉換成js可識別的json對象,具體步驟如下:
1、加入JackSon.jar
2、在配置文件中配置json的映射
3、在接受Ajax方法裡面直接返回Object,list等,方法前面需要加上註解@ResponseBody
8、SpringMvc的工作流程圖?
原理:
㈨ 過濾器和攔截器分別有什麼作用
①攔截器是基於java的反射機制的,而過濾器是基於函數回調。
②攔截器不依賴與servlet容器,過濾器依賴與servlet容器。
③攔截器只能對action請求起作用,而過濾器則可以對幾乎所有的請求起作用。
④攔截器可以訪問action上下文、值棧里的對象,而過濾器不能訪問。
⑤在action的生命周期中,攔截器可以多次被調用,而過濾器只能在容器初始化時被調用一次。
⑥攔截器可以獲取IOC容器中的各個bean,而過濾器就不行,這點很重要,在攔截器里注入一個service,可以調用業務邏輯。
http://blog.csdn.net/chenleixing/article/details/44573495
㈩ Java Web的一些面試問題求解答
1、一般封閉到框架中,自動提交false——調用action(資料庫操作)——提交事務—關閉connection
2、重載:方法名相同,參數(個數或類型)不同(稱之為簽名不同)
3、要看代碼,經驗多的人寫的代碼邏輯性強,bug會比較少,速度快,考慮得比較周全
4、頁面就jsp動態頁面,一般由美工做好,需運態的地方從後台獲取數據,運態顯示,運行的時候會先轉為servlet實際為servlet+html
5、記錄在日誌,如果方法由上級調用,往上拋
6、Junit在一個方法中就可以運行,運行你寫的代碼,和有沒資料庫沒關系
7、不用框架的話就注意sql注入問題,框架的話hibernate要注意級聯操作,ibatis注意假分頁,一般做一個分頁攔截器
8、測試的話要看要做哪些測試,還要看功能,寫測試報告的話下個模版比較快兩天
9、各種各樣的問題,與需求不符,邏輯性錯誤,用戶體驗度方面的……
10、小了一個小組一周,中等的,一個小組三四個月,大的一個小組做一年多
11、做下一個項目,項目維護,部署方面一般由組長及領導負責
12、後台將信息反回前台,前台接收判斷,提示錯誤信息
13、弄斷點一般是為了找錯,根據代碼打,你想在哪一步暫停,查看,就在哪一步打,一般手動
14、異常要麼try catch要麼就往上拋
15、沒寫過
16、很少很eclipse,用myeclipse 5.5
17、用get方法
18、ssi是struts,spring,ibatis框架,C:controller/action ;M:實體類User;V:struts中xml映射的jsp頁面
19、取出來equals比較下
20、如果是像new int[10]的話就有10個元素否則用A.length來看
21、不知道
22、用來記錄日誌,一般每天一個日誌
23、編碼?一般utf-8/gbk在eclipse設置整個項目格式
24、hibernate映射文件可以反轉自動生成.hbm.xml文件,和spring整合的話.cfg.xml就不需要了配置在spring的配置文件里:
<bean id="mydataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/zhang?useUnicode=true&characterEncoding=utf8" />
<property name="username" value="root"></property>
<property name="password" value="123456"></property>
</bean>
<bean id="mysessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="mydataSource"></property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<!-- 開啟二級緩存 -->
<prop key="jobernate.cache.use_second_level_cache">true</prop>
<prop key="hibernate.cache.provider_class">
net.sf.ehcache.hibernate.EhCacheProvider
</prop>
<prop key="hibernate.cache.use_query_cache">true</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>com/entity/User.hbm.xml</value>
<value>com/entity/Proct.hbm.xml</value>
<value>com/entity/Item.hbm.xml</value>
<value>com/entity/Category.hbm.xml</value>
<value>com/entity/Address.hbm.xml</value>
<value>com/entity/Order.hbm.xml</value>
</list>
</property>
</bean>
25、依情況而定
26、比如學生表t_stu和得分表t_score,t_score中的stuid對應t_stu中的主鍵id,那麼stuid就是t_stu的外鍵,主鍵與外鍵關系為1對1或者1對多
27、#表示傳進來的傳數為一個字元串(如果字元串已有引號則不再加引號,如果沒有引號則加上引號,為了防止sql注入),$表示按傳入進來的字元串,不再進行判斷
28、spring+hibernate中事物配置:
<!-- 定義事務管理 -->
<bean id="txtManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="mysessionFactory"></property>
</bean>
<!-- 定義一個通知,管理規則 -->
<tx:advice id="txtAdvice" transaction-manager="txtManager">
<tx:attributes>
<tx:method name="delete*" propagation="REQUIRED"/>
<tx:method name="save*" propagation="REQUIRED"/>
<tx:method name="update*" propagation="REQUIRED"/>
<tx:method name="find*" propagation="NOT_SUPPORTED"/>
<tx:method name="get*" propagation="NOT_SUPPORTED"/>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut expression="within(com.tarena.dang..impl.*)" id="servicePointcut"/>
<!-- 將txtAdvice和切入點相結合 -->
<aop:advisor advice-ref="txtAdvice" pointcut-ref="servicePointcut"/>
</aop:config>
sprint+mybatis配置:
<!-- 事務 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<!-- 配置事務的傳播特性 -->
<bean id="baseTransactionProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" abstract="true">
<property name="transactionManager" ref="transactionManager" />
<property name="transactionAttributes">
<props>
<prop key="add*">PROPAGATION_REQUIRED</prop>
<prop key="edit*">PROPAGATION_REQUIRED</prop>
<prop key="remove*">PROPAGATION_REQUIRED</prop>
<prop key="insert*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="del*">PROPAGATION_REQUIRED</prop>
<prop key="cancel*">PROPAGATION_REQUIRED</prop>
<prop key="*">readOnly</prop>
</props>
</property>
</bean>
29、用框架一般不會有sql注入,框架都有考慮到的,jdbc的話用PreparedStatement