IntelJ IDEA 進行Java Web開發+熱部署+一些開發上的問題


  基本上像放棄MyEclipse或者Eclipse了,因為IDEA現在也有對應的版本旗艦版和社區版了,而且使用更貼心,更給力,為什么還要選一個難用的要死的東西呢?

  最近要開發一個Java Web項目,所以想着就用IDEA吧,不用MyEclipse了(我用的不是正版IDEA,不過希望以后工作了可以用正版)。

  由於在網上搜了很多相關的文檔,不過要么是在線文檔上的,或者一些不給力的博客網站上的,有的沒有熱部署,都不是很好,下面這個是我參考並配置成功的。

  是放在百度網盤上面的一個doc文檔:http://pan.baidu.com/share/link?shareid=416907586&uk=3023119909

  我在我的網盤中也存了一份,備份地址:http://pan.baidu.com/s/1i3r57rJ

  工具一般都很簡單用了,前面構建的過程應該蠻簡單的,不過最后熱部署稍微是個有意思的地方,這里可以給大家提一下。其實文檔講的很詳細,不過由於不像用Myeclipse的那樣,所以這里簡單介紹一下:(這個熱部署讓我疑惑了一下,在此簡單分享一下)

  

  這里是配置Tomcat的界面,其實只要設置On frame deactivation為Update classes and resources 就可以了,不過上面還有一個On 'Update' action的選項列表也是一樣的,這里我們同樣也可以選擇Update classes and resources,不過后面有一個復選框是Show Dialog,就是當你點擊工具欄中的運行或者Debug按鈕的時候會彈出一個選擇框,讓你選擇是執行下面的哪一種操作。

  

  這里如果選中showDialog,可以防止誤操作或者可以有更多的選擇了,也挺好。

  由於以前習慣於用MyEclipse進行Web開發,這次用IDEA開發還是碰到了很多問題。不過也見識到了IDEA超強的代碼提示和其他方法的優秀特征。比如他可以對SQL語句進行代碼提示,對配置在多個文件中的spring配置文件進行提示,反正是只有你想不到,沒有他做不到。不過也會有一些很不習慣的地方,還是要在這篇博文中多做一些記錄,前幾天碰到的各種問題,現在想起來真該記錄下來,不過現在也只能碰到什么問題記錄什么了!

  1. Hibernate反向工程:IDEA自動檢測到你使用了Hibernate框架,或者你可以通過在項目上F4的模塊中導入Hibernate支持,一旦項目使用了Hibernate,他就會有一些相關面板出來,比如Spring面板了,Persistence面板了,Web面板了,DataBase面板了(如果用到了數據庫,最好去配置一下,可以在你的程序中幫你進行代碼提示)。但是我在Persistence中針對列出來的hibernate.cfg.xml配置文件右擊generate persist mapping,進行反向工程,然后選擇數據庫等相關的設置(這里一定要看清每個選項,我就不多說了),得到了各種hbm.xml文件,但是我在運行中卻一直出問題。問題詳情如下:

  

  最后得到的映射文件*.hbm.xml在tomcat啟動時會報錯(我用的是MYSQL),網上查了很多,說是映射的不匹配,但是我查了N久沒什么問題。最后才發現是一個簡單的問題。報的錯如下:

  

嚴重: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/classes/applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.StringIndexOutOfBoundsException: String index out of range: 0
Caused by: java.lang.StringIndexOutOfBoundsException: String index out of range: 0
    at java.lang.String.charAt(String.java:658)
    at org.hibernate.mapping.Table.setSchema(Table.java:643)
    at org.hibernate.cfg.Mappings.addTable(Mappings.java:191)
    at org.hibernate.cfg.HbmBinder.bindRootPersistentClassCommonValues(HbmBinder.java:312)
    at org.hibernate.cfg.HbmBinder.bindRootClass(HbmBinder.java:295)
    at org.hibernate.cfg.HbmBinder.bindRoot(HbmBinder.java:166)
    at org.hibernate.cfg.Configuration.add(Configuration.java:716)
    at org.hibernate.cfg.Configuration.addInputStream(Configuration.java:551)
    at org.hibernate.cfg.Configuration.addResource(Configuration.java:613)
    at org.hibernate.cfg.Configuration.parseMappingElement(Configuration.java:1635)
    at org.hibernate.cfg.Configuration.parseSessionFactory(Configuration.java:1603)
    at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1582)
    at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1556)
    at org.hibernate.cfg.Configuration.configure(Configuration.java:1491)
    at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:634)
    at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:134)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1203)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1172)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:427)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:249)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:155)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:246)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:285)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:352)
    at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:246)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:189)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:49)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4939)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5434)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633)
    at org.apache.catalina.startup.HostConfig.manageApp(HostConfig.java:1558)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:301)
    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
    at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
    at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:620)
    at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:567)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:301)
    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
    at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
    at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1487)
    at javax.management.remote.rmi.RMIConnectionImpl.access$300(RMIConnectionImpl.java:97)
    at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1328)
    at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1420)
    at javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:848)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:322)
    at sun.rmi.transport.Transport$1.run(Transport.java:177)
    at sun.rmi.transport.Transport$1.run(Transport.java:174)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.Transport.serviceCall(Transport.java:173)
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:556)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:811)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:670)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:744)

 

然后,我各種改,最后發現解決方案如下:他默認生成的映射文件的class標簽有一個屬性:schema="",只要把這個屬性去掉就可以了,太坑爹了,搞了我很長時間,這個schema貌似可以填數據庫名吧!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM