1 借助spring

          web.xml中增加

           1<filter>   
           2<filter-name>Set Character Encoding</filter-name>   
           3<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>   
           4<init-param>   
           5    <param-name>encoding</param-name>   
           6    <param-value>utf8</param-value>   
           7</init-param>   
           8</filter>   
           9<filter-mapping>   
          10    <filter-name>Set Character Encoding</filter-name>   
          11    <url-pattern>/*</url-pattern>   
          12</filter-mapping>
          13
          14

          配置文件即可,如果不用spring怎么辦呢?有辦法啊

           1<filter>
           2   <filter-name>encodingFilter</filter-name>
           3   <filter-class>com.rda.commons.filter.ChineseFilter</filter-class>
           4   <init-param>
           5    <param-name>encoding</param-name>
           6    <param-value>UTF-8</param-value>
           7   </init-param>
           8   <init-param>
           9    <param-name>forceEncoding</param-name>
          10    <param-value>true</param-value>
          11   </init-param>
          12</filter>
          13<filter-mapping>
          14   <filter-name>encodingFilter</filter-name>
          15   <url-pattern>/*</url-pattern>
          16</filter-mapping>
          17
          18

          配置文件,然后呢,轉(zhuǎn)碼的過濾器就要自己寫咯

           1package com.filter;
           2
           3import java.io.IOException;
           4import javax.servlet.Filter;
           5import javax.servlet.FilterChain;
           6import javax.servlet.FilterConfig;
           7import javax.servlet.ServletException;
           8import javax.servlet.ServletRequest;
           9import javax.servlet.ServletResponse;
          10import javax.servlet.http.HttpServlet;
          11import javax.servlet.http.HttpServletRequest;
          12import javax.servlet.http.HttpServletResponse;
          13
          14/**
          15
          16* 創(chuàng)建人:金鑫
          17* 創(chuàng)建時間:2008-9-21 下午03:27:03
          18* 類作用:中文轉(zhuǎn)碼過濾器
          19*
          20*/

          21@SuppressWarnings("serial")
          22public class ChineseFilter extends HttpServlet implements Filter
          23{
          24private FilterConfig filterConfig;
          25
          26public void init(FilterConfig filterConfig) throws ServletException
          27{
          28   this.filterConfig = filterConfig;
          29}

          30
          31public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain)
          32{
          33   try
          34   {
          35    String encoding = filterConfig.getInitParameter("encoding");
          36    //從WEB.xml配置文件中取出參數(shù),這樣我們可以通過配置修改編碼格式.
          37    request.setCharacterEncoding(encoding);//設(shè)置請求的編碼格式
          38
          39    filterChain.doFilter(request, response);
          40   }

          41   catch (ServletException sx)
          42   {
          43    filterConfig.getServletContext().log(sx.getMessage());
          44   }

          45   catch (IOException iox)
          46   {
          47    filterConfig.getServletContext().log(iox.getMessage());
          48   }

          49}

          50
          51public void destroy()
          52{
          53}

          54
          55protected void doGet(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException
          56{
          57   super.doGet(arg0, arg1);
          58}

          59
          60protected void doPost(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException
          61{
          62   super.doPost(arg0, arg1);
          63}

          64
          65/**
          66* @function 驗(yàn)證數(shù)據(jù)是否為空,如果為空則轉(zhuǎn)換
          67@param param
          68@return String
          69*/

          70public String checkNull(String param)
          71{
          72   if (param == null || param.equals(""))
          73   {
          74    return "";
          75   }

          76   else
          77   {
          78    return param;
          79   }

          80}

          81}

          82
          83

          OK,完美解決掉啦。

          其實(shí)解決亂碼很簡單的,就是通過過濾器來實(shí)現(xiàn)的,呵呵很簡單吧?

          本文來自“青島金鑫-java技術(shù)攻略”url:http://hi.baidu.com/%C7%E0%B5%BA%BD%F0%F6%CE/blog/item/a726f523915fe4559922ed57.html
          posted @ 2008-12-26 13:53 勒緊皮帶向前沖 閱讀(293) | 評論 (2)編輯 收藏
           
          getCurrentSession()與openSession()的區(qū)別?
           * 采用getCurrentSession()創(chuàng)建的session會綁定到當(dāng)前線程中,而采用openSession()
             創(chuàng)建的session則不會
           * 采用getCurrentSession()創(chuàng)建的session在commit或rollback時會自動關(guān)閉,而采用openSession()
             創(chuàng)建的session必須手動關(guān)閉
            
          使用getCurrentSession()需要在hibernate.cfg.xml文件中加入如下配置:
           * 如果使用的是本地事務(wù)(jdbc事務(wù))
           <property name="hibernate.current_session_context_class">thread</property>
           * 如果使用的是全局事務(wù)(jta事務(wù))
           <property name="hibernate.current_session_context_class">jta</property> 
          posted @ 2008-12-23 09:44 勒緊皮帶向前沖 閱讀(560) | 評論 (1)編輯 收藏
           
          最近學(xué)習(xí)spring,看尚學(xué)堂的視屏在做AOP的一個demo調(diào)試時發(fā)現(xiàn)報
          Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userManager' defined in class path resource [applicationContext-bean.xml]: Initialization of bean failed; nested exception is java.lang.IllegalArgumentException: error at ::0 can't find referenced pointcut allAddMethod
          在網(wǎng)上收了下,發(fā)現(xiàn)是spring的版本與java的版本不一致的原因。因此自己重新下了spring的包,運(yùn)行通過。
          posted @ 2008-12-20 13:58 勒緊皮帶向前沖 閱讀(316) | 評論 (0)編輯 收藏
           

          1、struts國際化的配置
           * 在struts-config.xml文件中加入:<message-resources parameter="MessageResources" />
           
          2、提供不同版本的國際化資源文件,中文需要采用native2ascii轉(zhuǎn)換成unicode

          3、在jsp中采用<bean:message>標(biāo)簽來讀取國際化消息文本

          4、了解利用struts默認(rèn)將locale放到session中的特性,完成采用編程的方式切換語言設(shè)置
           * 參見:ChangeLanguageAction.java
           
          5、消息文本的國際化處理,共有三個步驟:
           * 創(chuàng)建國際化消息
           * 傳遞國際化消息
           * 顯示國際化消息
           
          如何創(chuàng)建國際化消息?
           理解ActionMessage和ActionMessages兩個對象的區(qū)別
           
          如何傳遞國際化消息?
           * 調(diào)用saveMessage()傳遞普通消息,調(diào)用saveErrors傳遞錯誤消息
           
          如何顯示國際化消息?
           通過<html:messages>標(biāo)簽顯示消息(可以顯示普通消息和錯誤消息)
           通過<html:errors>顯示消息(只能顯示錯誤消息) 

          當(dāng)將國際化資源文件放入到一個包時,在struts-config.xml文件中加入:<message-resources parameter="包名.MessageResources" />

          ChangeLanguageAction.java

           1import java.util.Locale;
           2
           3import javax.servlet.http.HttpServletRequest;
           4import javax.servlet.http.HttpServletResponse;
           5
           6import org.apache.struts.Globals;
           7import org.apache.struts.action.Action;
           8import org.apache.struts.action.ActionForm;
           9import org.apache.struts.action.ActionForward;
          10import org.apache.struts.action.ActionMapping;
          11
          12public class ChangeLanguageAction extends Action {
          13
          14    @Override
          15    public ActionForward execute(ActionMapping mapping, ActionForm form,
          16            HttpServletRequest request, HttpServletResponse response)
          17            throws Exception {
          18        String lang = request.getParameter("lang");
          19        
          20        Locale currentLocale = Locale.getDefault(); 
          21        if ("zh".equals(lang)) {
          22            currentLocale = new Locale("zh""CN");
          23        }
          else if("en".equals(lang)) {
          24            currentLocale = new Locale("en""US");
          25        }

          26        //request.getSession().setAttribute(Globals.LOCALE_KEY, currentLocale);
          27        
          28        this.setLocale(request, currentLocale);
          29        return mapping.findForward("index");
          30    }

          31
          32}



           

          posted @ 2008-12-15 10:46 勒緊皮帶向前沖 閱讀(897) | 評論 (2)編輯 收藏
           

          1、了解缺省Locale是由操作系統(tǒng)決定的,Locale是由語言和國家代碼組成

          2、國際化資源文件是由baseName+locale組成,如:MessageBundle_en_US.properties
          baseName是任意合法的文件名

          3、native2ascii命令的位置和用法
           * 位置:JAVA_HOME/bin
           * 使用native2ascii.exe  o.properties MessagesBundle_zh_CN.properties

          例:
           1package com.bjsxt.i18n;
           2
           3import java.text.MessageFormat;
           4import java.util.Locale;
           5import java.util.ResourceBundle;
           6
           7public class I18nSample {
           8
           9    public static void main(String[] args) {
          10        
          11        Locale defaultLocale = Locale.getDefault();//獲取默認(rèn)的本地化
          12        System.out.println("default country=" + defaultLocale.getCountry());
          13        System.out.println("default language=" + defaultLocale.getLanguage());
          14        
          15        //Locale currentLocale = new Locale("en", "US");//通過初始化指定語言和國際本地化
          16        //Locale currentLocale = new Locale("zh", "CN");
          17        
          18        Locale currentLocale = new Locale("ja""JP");
          19        
          20        ResourceBundle rb = ResourceBundle.getBundle("res.MessagesBundle", currentLocale);//獲取本地化配置
          21        //System.out.println(rb.getString("k1"));//通過配置文件中的key顯示
          22        //System.out.println(rb.getString("k2"));
          23        
          24        MessageFormat mf = new MessageFormat(rb.getString("k1"));//通過站位符顯示指定的信息
          25        System.out.println(mf.format(new Object[]{"Tom"}));//對占位符填充
          26        //System.out.println(mf.format(new Object[]{"張三"}));
          27    }

          28}

          29
          o.properties文件
          1k1=你好,{0}
          2k2=再見
          缺省的properties文件MessagesBundle.properties
          1k1=hello,{0}
          2k2=good bye
          英文文件MessagesBundle_en_US.properties
          1k1=hello,{0}
          2k2=good bye
          中文文件MessagesBundle_zh_CN.properties
          1k1=\u4f60\u597d,{0}
          2k2=\u518d\u89c1
          3
          posted @ 2008-12-15 09:44 勒緊皮帶向前沖 閱讀(787) | 評論 (0)編輯 收藏
           
          轉(zhuǎn)自 http://jinguo.javaeye.com/blog/225596
          關(guān)鍵字: oracle的rownum原理和使用
          Oracle的rownum原理和使用
          在Oracle中,要按特定條件查詢前N條記錄,用個rownum就搞定了。
          select * from emp where rownum <= 5
          而且書上也告誡,不能對rownum用">",這也就意味著,如果你想用
          select * from emp where rownum > 5
          則是失敗的。要知道為什么會失敗,則需要了解rownum背后的機(jī)制:
          1 Oracle executes your query.

          2 Oracle fetches the first row and calls it row number 1.

          3 Have we gotten past row number meets the criteria? If no, then Oracle discards the row, If yes, then Oracle return the row.

          4 Oracle fetches the next row and advances the row number (to 2, and then to 3, and then to 4, and so forth).

          5 Go to step 3.

          了解了原理,就知道rownum>不會成功,因?yàn)樵诘谌降臅r候查詢出的行已經(jīng)被丟棄,第四步查出來的rownum仍然是1,這樣永遠(yuǎn)也不會成功。

          同樣道理,rownum如果單獨(dú)用=,也只有在rownum=1時才有用。



          對于rownum來說它是oracle系統(tǒng)順序分配為從查詢返回的行的編號,返回的第一行分配的是1,第二行是2,依此類推,這個偽字段可以用于限制查詢返回的總行數(shù),而且rownum不能以任何表的名稱作為前綴。
          舉例說明:
          例如表:student(學(xué)生)表,表結(jié)構(gòu)為:
          ID       char(6)      --學(xué)號
          name    VARCHAR2(10)   --姓名
          create table student (ID char(6), name VARCHAR2(100));
          insert into sale values('200001',‘張一’);
          insert into sale values('200002',‘王二’);
          insert into sale values('200003',‘李三’);
          insert into sale values('200004',‘趙四’);
          commit;
          (1) rownum 對于等于某值的查詢條件
          如果希望找到學(xué)生表中第一條學(xué)生的信息,可以使用rownum=1作為條件。但是想找到學(xué)生表中第二條學(xué)生的信息,使用rownum=2結(jié)果查不到數(shù)據(jù)。因?yàn)閞ownum都是從1開始,但是1以上的自然數(shù)在rownum做等于判斷是時認(rèn)為都是false條件,所以無法查到rownum = n(n>1的自然數(shù))。
          SQL> select rownum,id,name from student where rownum=1;(可以用在限制返回記錄條數(shù)的地方,保證不出錯,如:隱式游標(biāo))
          SQL> select rownum,id,name from student where rownum=1;
              ROWNUM ID     NAME
          ---------- ------ ---------------------------------------------------
                   1 200001 張一
          SQL> select rownum,id,name from student where rownum =2;
              ROWNUM ID     NAME
          ---------- ------ ---------------------------------------------------
          (2)rownum對于大于某值的查詢條件
             如果想找到從第二行記錄以后的記錄,當(dāng)使用rownum>2是查不出記錄的,原因是由于rownum是一個總是從1開始的偽列,Oracle 認(rèn)為rownum> n(n>1的自然數(shù))這種條件依舊不成立,所以查不到記錄
          SQL> select rownum,id,name from student where rownum >2;
          ROWNUM ID     NAME
          ---------- ------ ---------------------------------------------------
          那如何才能找到第二行以后的記錄呀。可以使用以下的子查詢方法來解決。注意子查詢中的rownum必須要有別名,否則還是不會查出記錄來,這是因?yàn)閞ownum不是某個表的列,如果不起別名的話,無法知道rownum是子查詢的列還是主查詢的列。
          SQL>select * from(select rownum no ,id,name from student) where no>2;
                  NO ID     NAME
          ---------- ------ ---------------------------------------------------
                   3 200003 李三
                   4 200004 趙四
          SQL> select * from(select rownum,id,name from student)where rownum>2;
              ROWNUM ID     NAME
          ---------- ------ ---------------------------------------------------
          (3)rownum對于小于某值的查詢條件
          如果想找到第三條記錄以前的記錄,當(dāng)使用rownum<3是能得到兩條記錄的。顯然rownum對于rownum<n((n>1的自然數(shù))的條件認(rèn)為是成立的,所以可以找到記錄。
          SQL> select rownum,id,name from student where rownum <3;
              ROWNUM ID     NAME
          ---------- ------ ---------------------------------------------------
          1 200001 張一
                  2 200002 王二
          綜上幾種情況,可能有時候需要查詢rownum在某區(qū)間的數(shù)據(jù),那怎么辦呀從上可以看出rownum對小于某值的查詢條件是人為true的,rownum對于大于某值的查詢條件直接認(rèn)為是false的,但是可以間接的讓它轉(zhuǎn)為認(rèn)為是true的。那就必須使用子查詢。例如要查詢rownum在第二行到第三行之間的數(shù)據(jù),包括第二行和第三行數(shù)據(jù),那么我們只能寫以下語句,先讓它返回小于等于三的記錄行,然后在主查詢中判斷新的rownum的別名列大于等于二的記錄行。但是這樣的操作會在大數(shù)據(jù)集中影響速度。
          SQL> select * from (select rownum no,id,name from student where rownum<=3 ) where no >=2;
                  NO ID     NAME
          ---------- ------ ---------------------------------------------------
                   2 200002 王二
                   3 200003 李三
          (4)rownum和排序
          Oracle中的rownum的是在取數(shù)據(jù)的時候產(chǎn)生的序號,所以想對指定排序的數(shù)據(jù)去指定的rowmun行數(shù)據(jù)就必須注意了。
          SQL> select rownum ,id,name from student order by name;
              ROWNUM ID     NAME
          ---------- ------ ---------------------------------------------------
                   3 200003 李三
                   2 200002 王二
                   1 200001 張一
                   4 200004 趙四
          可以看出,rownum并不是按照name列來生成的序號。系統(tǒng)是按照記錄插入時的順序給記錄排的號,rowid也是順序分配的。為了解決這個問題,必須使用子查詢
          SQL> select rownum ,id,name from (select * from student order by name);
              ROWNUM ID     NAME
          ---------- ------ ---------------------------------------------------
                   1 200003 李三
                   2 200002 王二
                   3 200001 張一
                   4 200004 趙四
          這樣就成了按name排序,并且用rownum標(biāo)出正確序號(有小到大)
          posted @ 2008-12-13 11:58 勒緊皮帶向前沖 閱讀(229) | 評論 (0)編輯 收藏
           

          今天在寫hql刪除語句是想通過in來實(shí)現(xiàn)刪除多條數(shù)據(jù),但是發(fā)現(xiàn)hql語句的delete使用

          where中使用in會報錯Operand should contain %d column(s)"。
          另外在設(shè)置了二級緩存時,如果策略為read-only時,通過hql的delete通過id刪除一條記錄時,可以。但如果是通過session.load/get通過id先將記錄查詢出來,在session.delete的話,會出錯。將策略改為read-write。即可。
          posted @ 2008-12-12 17:31 勒緊皮帶向前沖 閱讀(528) | 評論 (0)編輯 收藏
           

          讀取 Cookie 集合,遍歷集合找到所需的 Cookie ,如果找到保存進(jìn) Session ,否則跳轉(zhuǎn)到登錄頁面;

          所需資源:

          ReadCookieAction.java- 讀取 Cookie 集合,如果找到對應(yīng) Cookie ,寫入 Session ;

          Login.jsp- 登錄用頁面;

          LoginSubmit.java- 記錄登錄信息,并寫入 Session ;

          LoginOk.jsp- 讀取 Session ,并顯示。

          讀 Cookie 的方法

          Cookie[] cookies = request.getCookies();

          if (cookies != null ) {

              for ( int i=0; i<cookies. length ; i++) {

                 Cookie cookie = cookies[i];

                 if (cookie.getName().equals( "userInfo" )) {

                     String value = cookie.getValue();

                     String[] info = value.split( "_" );

                     UserForm userForm = new UserForm();

                     userForm.setUserName(info[0]);

                     userForm.setUserPassword(info[1]);

                     request.getSession().setAttribute( "userForm" , userForm);

                     return mapping.findForward( "ok" );

                 }

              }

          }

          寫 Cookie 的方法:

          Cookie c = new Cookie( "userInfo" ,userForm.getUserName()+ "_" +userForm.getUserPassword());

          c.setComment( "A test cookie" );

          c.setMaxAge(120);

          response.addCookie(c);

          posted @ 2008-12-12 10:57 勒緊皮帶向前沖 閱讀(780) | 評論 (1)編輯 收藏
           
               摘要:   1<%@ page language="java" contentType="text/html; charset=GB18030"   2    pageEncoding="GB18030"%>   3<%@ taglib...  閱讀全文
          posted @ 2008-12-11 15:06 勒緊皮帶向前沖 閱讀(227) | 評論 (0)編輯 收藏
           
          在采用struts框架項目中,我們通常將模塊分類,放在模塊的文件夾中。這樣在頁面中訪問時需加上文件目錄名路徑方可。但是我們可以通過在struts-config中配置Action時加上一個虛擬的目錄名,使虛擬的目錄名和模塊的文件目錄名同名,通過訪問Action時就可自動進(jìn)入該目錄下,這樣訪問時就不需再文件目錄路徑了。
          例:一個文件管理系統(tǒng)中有用戶管理模塊,將其放入指定的模塊文件夾下,如圖:

          在struts-config.xml文件中配置Action的path,如圖:

          在頁面訪問時,設(shè)置連接如:<a href="user/list.do" title="請點(diǎn)擊訪問用戶管理系統(tǒng)">用戶管理系統(tǒng)</a>
          當(dāng)點(diǎn)擊后,在地址欄中顯示的地址如圖:

          這樣就進(jìn)入user目錄下。再在訪問改目錄下的文件時,就不需加什么目錄名了。
          posted @ 2008-12-11 11:09 勒緊皮帶向前沖 閱讀(409) | 評論 (0)編輯 收藏
          僅列出標(biāo)題
          共14頁: First 上一頁 4 5 6 7 8 9 10 11 12 下一頁 Last 
           
          主站蜘蛛池模板: 浑源县| 博罗县| 大理市| 金沙县| 闸北区| 冷水江市| 灵丘县| 滁州市| 土默特右旗| 晋州市| 东辽县| 保亭| 隆德县| 来宾市| 巴彦县| 合水县| 巴青县| 隆昌县| 郴州市| 五大连池市| 浦城县| 晋中市| 炎陵县| 子长县| 高碑店市| 巩留县| 循化| 渑池县| 且末县| 河北区| 鱼台县| 安多县| 英吉沙县| 乌兰县| 富源县| 唐河县| 湖北省| 安庆市| 依兰县| 岗巴县| 柳州市|