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

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

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

    隨筆 - 11  文章 - 11  trackbacks - 0

    留言簿(2)

    隨筆分類(13)

    隨筆檔案(11)

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    在Struts1.1-1.2中如果不想沒有登錄的用戶訪問一些action,可以擴展RequestProcessor,并重載processProprocess方法,在其中進行驗證

    public class CustomRequestProcessor
            extends RequestProcessor {
        protected boolean processPreprocess (
                HttpServletRequest request,
                HttpServletResponse response) {
            HttpSession session = request.getSession(false);
            //If user is trying to access login page
            // then don't check
            if( request.getServletPath().equals("/loginInput.do")
                || request.getServletPath().equals("/login.do") )
                return true;
            //Check if userName attribute is there is session.
            //If so, it means user has allready logged in
            if( session != null &&
            session.getAttribute("userName") != null)
                return true;
            else{
                try{
                    //If no redirect user to login Page
                    request.getRequestDispatcher 
                        ("/Login.jsp").forward(request,response);
                }catch(Exception ex){
                }
            }
            return false;
        }
    }
    

    相應的,在struts-config.xml中加入controller元素

    <controller>
     <set-property  property="processorClass"
     value="com.sample.util.CustomRequestProcessor"/>
    </controller>
    

    但剛才看到在Struts1.3中,已經不再使用RequestProcessor,而是用ComposableRequestProcessor 來實現自定義的request響應。






    posted @ 2007-04-09 18:52 hijeff 閱讀(440) | 評論 (0)編輯 收藏

    三個@Entity類Tc, Tracer, Track是三向關聯的的表, @Embeddable類TcTracer則存儲著三個表的ForeignKey

    @Entity
    @Table(name= "tc", catalog="first_hiber")
    public class Tc {
          @org.hibernate.annotations.CollectionOfElements
          @JoinTable(name="tc_tracer", joinColumns=@JoinColumn(name="tc_id"))
          private Set<TcTracer> tcTracers = new HashSet<TcTracer>();
    
          @Id @GeneratedValue
          @Column(name="tc_id", nullable= false)
          private Long id;
    }
    
      @Embeddable
      @Table(name="tc_tracer")
      public class TcTracer {
          @org.hibernate.annotations.Parent
          private Tc tc;
      
    @ManyToOne(cascade=CascadeType.ALL) @JoinColumn(name="tracer_id", nullable=false, updatable=false) private Tracer tracer; @ManyToOne(cascade=CascadeType.ALL) @JoinColumn(name="track_id", nullable=false, updatable=false) private Track track; }

    如上,將TcTracer作為Tc的子元素,從而實現Tc的三相關聯。

    用HQL可以通過特定的Tc,Tracer得到對應的所有Track:

      select tctracers.track
      from Tc tc
          join tc.tcTracers tctracers
      where tc.name="tc name"
          and tctracers.tracer.name="tracer name"
    
     List<Track> tracks = session.createQuery(HQL).list();
    
    posted @ 2007-04-02 17:45 hijeff 閱讀(379) | 評論 (0)編輯 收藏

    今天調試程序的時候,發現插入數據時老是拋出異常:"a different object with the same identifier value was already associated with the session"

    起初以為是override hashCode()的方法不對。后來google查了查多數問題都出現在detached對象之后,再鏈接session由于對象的改變而出現的異常。

    最后發現原來問題很簡單....是在用annotation重寫mapping的時候,忘記給@Id加上@GeneratedValue,導致第一個row insert后,再次insert時沒有生成新的id!

    看來annotation雖然方便了mapping,但由于和代碼集中在一塊了,很容易出現疏忽大意的錯誤,而且一般都不會注意到-.-

    想起了python的SQLObject, SQLAlchemy,雖然功能沒有Hibernate豐富,但是簡單實用!

    posted @ 2007-03-29 20:28 hijeff 閱讀(407) | 評論 (0)編輯 收藏

    通常為了實現entity class的雙向association,每添加一組實例在java中需要兩行代碼:

    persion.getAddresses().add(address);
    address.getPersons().add(person);

    但對Hibernate而已,上面的代碼會被轉化為兩條insert語句,

    為了避免這樣的情況出現需要定義inverse屬性,告訴Hibernate persion和address之間的關系:

    // !file: Person.class
    public class Person {
        // ...
        @ManyToMany(
                  targetEntity= Address.class,
                  cascade = CascadeType.ALL,
          )
        @JoinTable(
                  name="persion_address",
                  joinColumns= {@JoinColumn(name="person_id")},
                  inverseJoinColumns= {@JoinColumn(name="address_id")}
          )
          private Set<Address> adressses = new HashSet<Address> (0);
        // ...
    }
    
    // !file: Address.class
    public class Address {
        // ...
        @ManyToMany(
                targetEntity= Persion.class,
                cascade = CascadeType.ALL, 
                mappedBy = "addresses"
        )
        private Set<Person> persons = new HashSet<Person>();
        // ...
    }
    

    上面的兩個annotation告訴Hibernate,Person是主,對Address中persons屬性的修改將不會產生SQL語句。

    Hibernate里,如果是Many-to-many的關系,可以任意設置主class

    通常,還可以將添加刪除關系的代碼包裝起來:

    // !file: Person.class
    public class Person {
        // ...
        public void addAddress(Address address) {
            this.getAddresses().add(address);
            address.getPersons().add(this);
        }
        public void removeAddress(Address address) {
            this.getAddresses().remove(address);
            address.getPersons().remove(this);
        }
        //...
    } 
    



    posted @ 2007-03-27 21:18 hijeff 閱讀(354) | 評論 (0)編輯 收藏

    http://www.box.net/shared/102b5irypc

    差不多把平時用的上的讀完了,真感覺受益匪淺。不但詳細的介紹了Hibernate的特性用法,而且其中介紹的ORM基本概念,灌輸的ORM的思想也正是我所需要的。

    對一個新手來說,business key, surrogate key, entity type, value type, transient, persistent, detached, persistence context...這些是什么概念,為什么要提出來,以及怎樣實現的在書中都會有簡單明了的解釋。

    不多說了,現在把書放出來,誰看誰知道;)

    posted @ 2007-03-23 08:21 hijeff 閱讀(2278) | 評論 (7)編輯 收藏

    之前都是用最蠢的方法:SQL建立數據庫相關的表,然后再Java寫映射寫配置文件.....

    實際上使用Hibernate自帶的工具hbm2ddl,建立根據你的對象建立數據庫是很愜意的一件事;)

    首先當然要建好POJO object, XML Mapping File(也可以使用工具根據POJO class建立),配置文件(hibernate.cfg.xml)

    然后運行下面的Java代碼


    import org.hibernate.cfg.Configuration; 
    import org.hibernate.tool.hbm2ddl.SchemaExport;
    
    public class SchemaUtil {
    public static void main(String[] args) {

    Configuration cfg = new Configuration().configure(); SchemaExport schemaExport= new SchemaExport(cfg); schemaExport.create(false, true); } }
    再看看數據庫,表是不是已經幫你建好了,對于我這樣不熟悉數據庫的人真是太方便了

    Technorati : , , ,
    Del.icio.us : , , ,

    posted @ 2007-03-21 00:56 hijeff 閱讀(5270) | 評論 (4)編輯 收藏

    內容詳實,通俗易懂

    決定花幾天時間好好的讀讀這本書,系統的學習Hibernate。

    Technorati : , ,
    Del.icio.us : , ,

    posted @ 2007-03-20 22:14 hijeff 閱讀(270) | 評論 (0)編輯 收藏
    Set set = new HashSet(Arrays.asList(array));
    
    posted @ 2007-03-17 21:58 hijeff 閱讀(341) | 評論 (0)編輯 收藏

    Web程序的編碼問題主要有三個方面:

    1. 程序文件的編碼;
    2. 輸出頁面到客戶端的編碼;
    3. 用戶響應到服務器端的編碼。

    以設置為UTF-8為例,可以用如下方法解決。

    1. 對于程序文件的編碼

    直接在Eclipse或者其他IDE,editor中將文件編碼設為UTF-8即可。

    2.輸出頁面

    對于JSP頁面,加入以下代碼

    <%@ page contentType="text/html; charset=UTF-8"%>
    如果在IE或者Firefox中還不能正常顯示,還可以在Html標識下加入下面的頭信息

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

    3. 響應到服務器端

    我使用的是Tomcat,沒有可以直接設置接受響應編碼的方法(真是太佩服了!),但可以通過寫一個Filter實現編碼轉化。

    import java.io.IOException;
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    
    public class SetCharacterEncodingFilter implements Filter {
    
        protected String encoding = null;
        protected FilterConfig filterConfig = null;
        protected boolean ignore = true;
    
        public void destroy() {
            this.encoding = null;
            this.filterConfig = null;
        }
    
        public void doFilter(ServletRequest request, ServletResponse response,
                              FilterChain chain)
            throws IOException, ServletException {
            if (ignore || (request.getCharacterEncoding() == null)) {
                String encoding = selectEncoding(request);
                if (encoding != null)
                    request.setCharacterEncoding(encoding);
            }
            chain.doFilter(request, response);
        }
    
        public void init(FilterConfig filterConfig) throws ServletException {
         this.filterConfig = filterConfig;
            this.encoding = filterConfig.getInitParameter("encoding");
            String value = filterConfig.getInitParameter("ignore");
            if (value == null)
                this.ignore = true;
            else if (value.equalsIgnoreCase("true"))
                this.ignore = true;
            else if (value.equalsIgnoreCase("yes"))
                this.ignore = true;
            else
                this.ignore = false;
        }
    
        protected String selectEncoding(ServletRequest request) {
            return (this.encoding);
        }
    }
    

    將SetCharacterEncodingFilter放到程序的編譯目錄下,再在web.xml中添加相應屬性

    
        <filter>
            <filter-name>Set Character Encoding</filter-name>
            <filter-class>hijeff.filters.SetCharacterEncodingFilter</filter-class>
            <init-param>
                <param-name>encoding</param-name>
                <param-value>UTF-8</param-value>
            </init-param>
        </filter>
         
        <filter-mapping>
            <filter-name>Set Character Encoding</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>    
    

    Tomcat就會將用戶通過HTTP響應的字符轉化為UTF-8的編碼了


    posted @ 2007-03-15 20:58 hijeff 閱讀(307) | 評論 (0)編輯 收藏

    via

    1. Pass an instance of java.util.Properties to Configuration.setProperties().
    2. Place hibernate.properties in a root directory of the classpath.
    3. Set System properties using java -Dproperty=value.
    4. Include <property> elements in hibernate.cfg.xml .

    posted @ 2007-03-13 10:54 hijeff 閱讀(357) | 評論 (0)編輯 收藏
    主站蜘蛛池模板: 操美女视频免费网站| 毛片免费全部播放无码| 久久久久国色AV免费看图片| 亚洲色欲一区二区三区在线观看| jizz免费一区二区三区| 亚洲人AV永久一区二区三区久久| 一级中文字幕免费乱码专区| 亚洲国产精品综合久久网络| 一区二区三区免费高清视频| 亚洲一级特黄无码片| 青青操视频在线免费观看| 久久精品国产精品亚洲艾| 中文字幕亚洲免费无线观看日本 | 亚洲乱码一区av春药高潮| 免费成人激情视频| 最新亚洲精品国偷自产在线| 日本一线a视频免费观看| 人人爽人人爽人人片A免费| 亚洲日本va中文字幕久久| 无码国产精品一区二区免费模式 | 国产免费一级高清淫曰本片| 亚洲精品V欧洲精品V日韩精品 | 成人免费无码大片A毛片抽搐色欲| 亚洲熟妇成人精品一区| 又粗又硬又大又爽免费视频播放| 好湿好大好紧好爽免费视频 | 亚洲一区精彩视频| 全黄a免费一级毛片人人爱| 亚洲一区二区三区免费| 亚洲大片在线观看| 色视频色露露永久免费观看| 亚州**色毛片免费观看| 亚洲情a成黄在线观看动漫尤物| 91在线视频免费91| 国产美女视频免费观看的网站 | 精品无码一区二区三区亚洲桃色 | 久久久久亚洲AV成人网| 91老湿机福利免费体验| 久久水蜜桃亚洲AV无码精品| 日韩亚洲人成在线综合日本| 免费人成视频在线|