<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    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

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

     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* 創建人:金鑫
    17* 創建時間:2008-9-21 下午03:27:03
    18* 類作用:中文轉碼過濾器
    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配置文件中取出參數,這樣我們可以通過配置修改編碼格式.
    37    request.setCharacterEncoding(encoding);//設置請求的編碼格式
    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 驗證數據是否為空,如果為空則轉換
    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,完美解決掉啦。

    其實解決亂碼很簡單的,就是通過過濾器來實現的,呵呵很簡單吧?

    本文來自“青島金鑫-java技術攻略”url:http://hi.baidu.com/%C7%E0%B5%BA%BD%F0%F6%CE/blog/item/a726f523915fe4559922ed57.html
    posted @ 2008-12-26 13:53 勒緊皮帶向前沖 閱讀(290) | 評論 (2)編輯 收藏
     
    getCurrentSession()與openSession()的區別?
     * 采用getCurrentSession()創建的session會綁定到當前線程中,而采用openSession()
       創建的session則不會
     * 采用getCurrentSession()創建的session在commit或rollback時會自動關閉,而采用openSession()
       創建的session必須手動關閉
      
    使用getCurrentSession()需要在hibernate.cfg.xml文件中加入如下配置:
     * 如果使用的是本地事務(jdbc事務)
     <property name="hibernate.current_session_context_class">thread</property>
     * 如果使用的是全局事務(jta事務)
     <property name="hibernate.current_session_context_class">jta</property> 
    posted @ 2008-12-23 09:44 勒緊皮帶向前沖 閱讀(558) | 評論 (1)編輯 收藏
     
    最近學習spring,看尚學堂的視屏在做AOP的一個demo調試時發現報
    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
    在網上收了下,發現是spring的版本與java的版本不一致的原因。因此自己重新下了spring的包,運行通過。
    posted @ 2008-12-20 13:58 勒緊皮帶向前沖 閱讀(316) | 評論 (0)編輯 收藏
     

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

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

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

    當將國際化資源文件放入到一個包時,在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 勒緊皮帶向前沖 閱讀(895) | 評論 (2)編輯 收藏
     

    1、了解缺省Locale是由操作系統決定的,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();//獲取默認的本地化
    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 勒緊皮帶向前沖 閱讀(783) | 評論 (0)編輯 收藏
     
    轉自 http://jinguo.javaeye.com/blog/225596
    關鍵字: oracle的rownum原理和使用
    Oracle的rownum原理和使用
    在Oracle中,要按特定條件查詢前N條記錄,用個rownum就搞定了。
    select * from emp where rownum <= 5
    而且書上也告誡,不能對rownum用">",這也就意味著,如果你想用
    select * from emp where rownum > 5
    則是失敗的。要知道為什么會失敗,則需要了解rownum背后的機制:
    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>不會成功,因為在第三步的時候查詢出的行已經被丟棄,第四步查出來的rownum仍然是1,這樣永遠也不會成功。

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



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

    今天在寫hql刪除語句是想通過in來實現刪除多條數據,但是發現hql語句的delete使用

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

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

    所需資源:

    ReadCookieAction.java- 讀取 Cookie 集合,如果找到對應 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 勒緊皮帶向前沖 閱讀(223) | 評論 (0)編輯 收藏
     
    在采用struts框架項目中,我們通常將模塊分類,放在模塊的文件夾中。這樣在頁面中訪問時需加上文件目錄名路徑方可。但是我們可以通過在struts-config中配置Action時加上一個虛擬的目錄名,使虛擬的目錄名和模塊的文件目錄名同名,通過訪問Action時就可自動進入該目錄下,這樣訪問時就不需再文件目錄路徑了。
    例:一個文件管理系統中有用戶管理模塊,將其放入指定的模塊文件夾下,如圖:

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

    在頁面訪問時,設置連接如:<a href="user/list.do" title="請點擊訪問用戶管理系統">用戶管理系統</a>
    當點擊后,在地址欄中顯示的地址如圖:

    這樣就進入user目錄下。再在訪問改目錄下的文件時,就不需加什么目錄名了。
    posted @ 2008-12-11 11:09 勒緊皮帶向前沖 閱讀(407) | 評論 (0)編輯 收藏
    僅列出標題
    共14頁: First 上一頁 4 5 6 7 8 9 10 11 12 下一頁 Last 
     
    主站蜘蛛池模板: 亚洲国产综合人成综合网站| 亚洲欧洲日本国产| 免费无码成人AV在线播放不卡| 亚洲成aⅴ人在线观看| 亚洲AV无码乱码精品国产| 亚洲欧洲免费视频| 日日摸日日碰夜夜爽亚洲| 亚洲va国产va天堂va久久| 妞干网免费视频观看| 免费人成激情视频在线观看冫| 在线观看日本亚洲一区| 亚洲国产综合无码一区 | xx视频在线永久免费观看| 亚洲av无码一区二区三区人妖| 亚洲精品你懂的在线观看| 国内自产少妇自拍区免费| 国产情侣久久久久aⅴ免费| 亚洲欧美自偷自拍另类视| 久久亚洲国产伦理| 亚洲av手机在线观看| 久久笫一福利免费导航| fc2免费人成在线| 亚洲国产欧美日韩精品一区二区三区| 亚洲成熟xxxxx电影| 亚洲精品动漫人成3d在线| 在线免费一区二区| 亚洲三级在线免费观看| 国产又黄又爽胸又大免费视频 | 男女猛烈无遮掩视频免费软件| 亚洲午夜电影一区二区三区| 亚洲精品自在在线观看| 免费人成无码大片在线观看| 青草草色A免费观看在线| 嫩草在线视频www免费观看| 免费在线观看一区| 在线观看亚洲视频| 亚洲精品二三区伊人久久| 精品亚洲成a人片在线观看| 永久亚洲成a人片777777| 免费看国产精品麻豆| 美女黄网站人色视频免费国产 |