A. jfinal 怎麼防止sql注入
數據進入資料庫之前對非法字元進行轉義,在更新和顯示的時候將非法字元還原
在顯示的時候對非法字元進行轉義
如果項目還處在起步階段,建議使用第二種,直接使用jstl的<c:out>標簽即可解決非法字元的問題。當然,對於Javascript還需要自己處理一下,寫一個方法,在解析從伺服器端獲取的數據時執行以下escapeHTML()即可。
B. 說說你為什麼不用JFinal
原因有三點:
1、它沒有給我帶來便利, 並且找不到使用它的理由。
2、很難與其他主流框架進行整合。
3、過度封裝並且使用它的同時我很難遵守代碼規范。
先說說第一點, 對比spring系列, 並沒有感覺它有多麼便利, 創建一個Jfinal工程我需要1分鍾, 創建一個Spring工程我也需要1分鍾, 但是在實際開發時, Jfinal所消耗的時間會更多, 因為它不靈活。
並且代碼比較啰嗦, 比如創建一個Controller, 我需要繼承他的一個公共類, 並且需要在配置類里配置好它的路由, 並且需要在介面方法中使用getRequest方法。
JFinal WEB MVC和Struts簡要對比:
JFinal遵循COC原則,零配置,無xml,而struts需要配置來支持action、result、interceptor配置與使用。
JFinal開發效率非常之高,相對Struts開發效率能提升五到十倍。
JFinal代碼量非常省,相對Struts開發能省50%到70%代碼量。
JFinal遵循Restful規范,而struts自身未提供Restful支持。Struts可以通過插件來支持restful,但支持不徹底使用不方便。
JFinal提供資料庫支持,屬於一站式解決方案,而struts僅為WEBMVC框架並未提供資料庫支持。
JFinal學習成本極低,只需兩個小時學習即可上手開發,而Struts學習成本相對較高。
JFinal相對Struts來說更加輕量級,JFinal打包jar文件僅173KB,而struts則為1.8MB。
JFinal ORM和Hibernate簡要對比:
JFinal採用ActiveRecord實現資料庫操作支持,較Hibernate開發效率提升六到十倍。
JFinal ActiveRecord較Hibernate學習成本低,一小時內能上手開發。
JFinal零配置,對資料庫支持五個無特點:無xml、無annotation、無getter、無setter、無attribute,極大降低了代碼量,統計證實代碼量節省70%到95%。
JFinal資料庫操作完全採用原生sql,相對Hibernate採用的HQL學習成本低,功能更強大,性能更高,穩定性好。
C. jfinal如何捕獲sql異常
在 jfinal 中,可以通過在全局攔截器中捕獲 SQL 異常亂森,具體步驟如下:
1. 新建一個全局攔截器類,實現 Interceptor 介面,在其中重寫 intercept() 方法。
2. 在 intercept() 方法中,通過 try-catch 塊捕游旦獲 SQL 異常,然後將異常信息列印出來,或者將其記錄到日誌中。
原因是,JFinal 是一個基於 Java 的輕量級 Web 框架,其底層使用了高效、穩定的 ORM 框架 ActiveRecord,可以方便地進行數據訪問和操作。但在實際開發中,可能會出現 SQL 執行異常的情況,比如語法錯誤、連接超時等,需要進行相應的處理。
通過在全局攔截器中捕獲 SQL 異常,可以對異常進行統一處理,從而提高代碼的可維護性和穩定性。例如,可以將異常信息記錄到日誌中,便於開發人員快速定位和解決問題;或者向用戶返回友好的錯誤提示,提高用嘩磨畝戶體驗。
需要注意的是,在捕獲 SQL 異常時,應該避免直接將異常信息輸出到前端頁面,以免給攻擊者提供攻擊突破口。同時,也應該避免將敏感信息記錄到日誌中,以免造成安全隱患。
D. pgSql里運行sql語句沒錯,但在JFinal報錯
PostgreSQL的PL/pgSQL語言是支持動態SQL語句的(說execute immediate的是ECPG所支持的)。但是,要記得重要的一點: 是在PL/pgSQL語言中支持。而PL/pgSQL語言一個塊結構的語言,它以begin ... end為塊的開始與結束標識。這也就是說,要執行動態SQL語句,就必須放到begin ... end塊中,而不要想實現一個單獨的動態SQL語句。在SQL Server中,倒是可以輕松的實現,我們可以直接執行一個這樣的動態SQL:
1execute sp_executesql N'select 1 as val'
而在PostgreSQL中,就不要有此想法了。當然,SQL Server的這種動態SQL語句的執行方法也有其局限與不便的地方。
在PL/pgSQL中,執行動態SQL的格式如下(摘錄自說明文檔):
1EXECUTE command-string [ INTO [STRICT] target ] [ USING expression [, ... ] ];
其中,
command-string就是要執行的動態SQL語句(一定要記住:這里是SQL語句,不是PL/pgSQL語句,像raise notice就不能使用);
INTO子句是把SQL查詢到的值賦給INTO指定的變數;
USING子句是前面的command-string中替代變數($1, $2, ...)的賦值;
示例:
123456789do $$declarev_c1 integer;v_c2 integer;beginexecute 'select count(*) as c1, count(*) as c2 from (select 1 as idx union select 11 as idx union select 21 as idx) s where idx > $1' into v_c1, v_c2using 10;raise notice '%, %', v_c1, v_c2;
E. Jfinal執行insert into 語句,該用哪個方法
Db.update("insert into ..." ) ,當耐滑喚然,讓爛如果昌凱不想寫 sql ,還可以:
Record r = new Record().set(...).set(...);
Db.save(table, r);
F. 淺談java框架jfinal和nutz的區別
jfinal框架:
JFinal 是基於 Java 語言的極速 WEB + ORM 框架,其核心設計目標是開發迅速、代碼量少、學習簡單、功能強大、輕量級、易擴展、Restful。 在擁有Java語言所有優勢的同時再擁有ruby
、python、php等動態語言的開發效率。
Nutz是對於Java程序員來說,除SSH之外的另一個選擇。當然,它是開源的,並且是完全免費的。同時也是商業友好的(Licensed under the Apache License, Version 2.0)。
輕 -- 當前最新版,整個jar文件共910kB -- 針對JDBC的薄封裝,無緩存。
全 -- 提供了Dao(ORM, SQL管理),Ioc, Aop, Mvc, Json解析等必要功能。
G. jfinal中動態sql是一般是怎麼使用的
動態sql一般用在存儲過程中,可以在存儲過程中使用DDL或DML語句,如創建刪除操作。 語法:execute immediate 'DDL或DML語句'
H. Jfinal攔截器中如何獲取POST數據
網頁鏈接
getPara系列方法
Controller提供了getPara系列方法用來從請求中獲取參數。getPara系列方法分為兩種類型。第一種類型為第一個形參為String的getPara系列方法。該系列方法是對HttpServletRequest.getParameter(String name)的封裝,這類方法都是轉調了HttpServletRequest.getParameter(String name)。
第二種類型為第一個形參為int或敏悶無形參的getPara系列方法。該系列方法是去獲取urlPara中所帶的參數值。getParaMap與getParaNames分別對應HttpServletRequest的getParameterMap與getParameterNames。
記憶技巧:第一個參數為String類型的將獲取表單或者url中問號掛參的域值。第一個參數為int或無參數的將獲取urlPara中的參數值。
getPara使用例子:
getBean與getModel系列 :網頁鏈接
getModel用來接收頁面表單域銀歲傳遞過來的model對象,表單域名稱以」modelName.attrName」方式命名,getModel使用的attrName必須與數據表欄位橋搏彎名完全一樣。
getBean方法用於支持傳統Java Bean,包括支持使用jfinal生成器生成了getter、setter方法的Model,頁面表單傳參時使用與setter方法相一致的attrName,而非數據表欄位名。
getModel與getBean區別在於前者使用資料庫表欄位名而後者使用與setter方法一致的屬性名進行數據注入。建議優先使用getBean方法。