今天上午Struts算是基本上講完了,還有一些零碎的東西要自己看,老師準備剩下的三四天講一下EJB和webLogic,這個周六周日要上課了。
企業(yè)級JavaBean,遠程方法調用,在weblogic中配置連接池,配置數據源,操作數據庫,一天天過的真快,時間不夠用了,不知怎么搞得還有點感冒,難受,有點不支了。
該怎樣……
多有深意,呵呵……
第八,在配置連接池的時候,如果測試不通,而且沒有任何異常,請檢查數據源xml的配置,特別是文件名的后綴名問題,比如寫成了book.xml.text
今天講了講Sruts配置文件,可以有多個struts-config.xml,在web.xml中設置,還有就是可以設置一個虛擬ActionForm,以解決大量頁面將產生大量的ActionForm,另外解決這個問題的方法就是在jsp頁面中設置一個隱藏標簽,以在ActionForm中區(qū)分是哪個jsp頁面的事件。
虛擬ActionForm,就是用DynaActionForm類,在struts-config.xml中配置ActionForm屬性,….
今天老師還沒回來
做老師的網上書店的例子
發(fā)現幾個問題,想記錄一下,以后引以為戒。
一是,在Struts-config.xml中
映射ActionForm
須這樣寫
<form-beans>
<form-bean name="booklistform" type="bookshop.form.BookListForm"/>
<form-bean name="shoppingform" type="bookshop.form.ShoppingForm"/>
</form-beans>
這樣寫是不正確的
<form-beans>
<form-bean name="shoppingform" type="bookshop.form.ShoppingForm"/>
</form-beans>
<form-beans>
<form-bean name="booklistform" type="bookshop.form.BookListForm"/>
</form-beans>
二是,ActionForm中的屬性必須和jsp頁中的標簽一一對應,否則會出錯。
三是,在標簽中一定注意格式,屬性值的雙引號不能缺。
四是,request. getAttribute()和request. getParameter()的區(qū)別
五是,不能在自定義Tag里或在Servlet里輸出Struts標簽
六是,HashMap中得到所有的鍵值
//HashMap book = (HashMap)(super.pageContext.getSession().getAttribute("shpping"));
Object[] strid = (book.keySet().toArray());
七是,在jsp頁面中使用userbean不需在web.xml中映射,直接
<jsp:userBean id=”” class=””></jsp:userBean>
Servelt要在web.xml中映射
在Struts中,ActionForm和Action都要在Struts-config.xml中映射
八是,腦袋不轉了,睡覺去,再整理。
這幾天一直在休息,老師出差了,昨天研究了在tomcat下配置jndi,發(fā)現在tomcat5.0和5.5下配置還有些不一樣,老師是使用得5.0,按照老師那樣配在5.5下就是不行,把下面這段xml放在tomcat的server.xml中的<Host></Host>標簽里面
<Context path="/book" docBase="d:/bookdemodata" debug="0" reloadable="true">
<Resource name="jdbc/book" auth="Container" type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/book">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=book</value>
</parameter>
<parameter>
<name>username</name>
<value>sa</value>
</parameter>
<parameter>
<name>password</name>
<value></value>
</parameter>
<parameter>
<name>maxActive</name>
<value>20</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>10</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>-1</value>
</parameter>
<parameter>
<name>removeAbandoned</name>
<!-- Abandoned DB connections are removed and recycled -->
<value>true</value>
</parameter>
<parameter>
<name>removeAbandonedTimeout</name>
<!-- Use the removeAbandonedTimeout parameter to set the number of seconds a DB connection has been idle before it is considered abandoned. -->
<value>60</value>
</parameter>
<parameter>
<name>logAbandoned</name>
<!-- Log a stack trace of the code which abandoned -->
<value>false</value>
</parameter>
</ResourceParams>
</Context>
如果是在5.0下就沒有問題,測試通過,而在5.5下面這樣寫就有錯誤了,到網上搜了些資料,說它們兩個配置還是有些不一樣的
在tomcat5.5下conf\Catalina\localhost目錄下新建一個針對自己項目的xml文件
<?xml version="1.0" encoding="UTF-8"?>
<Context path="/addressbook" docBase="/addressbook" debug="0" reloadable="true">
<Resource
auth="Container"
name="jdbc/address"
type="javax.sql.DataSource"
password=""
driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"
maxIdle="10"
maxWait="100000"
username="sa"
url="jdbc:microsoft:sqlserver://localhost:1433;databasename=addressbooksample"
maxActive="20"/>
</Context>
文件名叫addressbook.xml這里的文件名是隨便起的,在tomcat啟動的時候會自動加載這個目錄下的所有xml文件,OK 這樣就調試通過了,而且看起來這樣配置要比在5.0下配置簡單。
還有一個方法
就是把sql的配置資源
<Resource
auth="Container"
name="jdbc/address"
type="javax.sql.DataSource"
password=""
driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"
maxIdle="10"
maxWait="100000"
username="sa"
url="jdbc:microsoft:sqlserver://localhost:1433;databasename=addressbooksample"
maxActive="20"/>
放入conf文件夾下的Context.xml中的<Context></Context>標簽內,就可以了
再有就是在java代碼中取得Connection的時候就不能像原來這樣寫了
Context initContext = new InitialContext();
Context envContext = (Context)initContext.lookup("java:comp/env");
DataSource ds = (DataSource)envContext.lookup("jdbc/addressbook");
conn = ds.getConnection();
這樣寫我試過也不行,tomcat會有異常
這樣寫就沒錯
Context initContext = new InitialContext();
DataSource ds = (DataSource)initContext.lookup("java:comp/env/jdbc/address");
conn = ds.getConnection();
經過一番研究試驗,終于搞定了,但是其中玄機還不知是為何
像這個東西"java:comp/env"是啥意思(JNDI查找的Tomcat的默認名字)
Oh.god,我弄錯了
Context initContext = new InitialContext();
Context envContext = (Context)initContext.lookup("java:comp/env");
DataSource ds = (DataSource)envContext.lookup("jdbc/address");
conn = ds.getConnection();
和這樣寫
Context initContext = new InitialContext();
DataSource ds = (DataSource)initContext.lookup("java:comp/env/jdbc/address");
conn = ds.getConnection();
都沒錯,都能出來數據
今天開始講Xml,講了一天算是完了,什么沒聽著,真是沒有重點,下午下課跟因此而郁悶的郭去書店買書了,唉,真是郁悶。
今天,J2EE Web組件編程技術這門課的最后一天,講了兩個例子,接觸到了MVC設計模式,M-Model V-View C-Controller,例子用到了javaBean + Servlet + jsp
跟在學java基礎的時候,小崔講的一樣,現在更深入的更實際的理解了他那時候說的MVC,哈哈,那時候說MVC,模糊。
下周開始J2EE Struts 及 XML,呵呵,真的希望不再是這個老師講了,真是受不了,遲到,講課東拉西扯,80%廢話,沒有重點,敷衍提出的問題,不實事求是,我懷疑這家伙是不是做過開發(fā),就會念幻燈念課本,當然也有好的一面,…..沒有特別好的。
在這兩個星期里,認識jsp,熟悉html、javaScript,熟悉jsp,javaBean,Servlet,MVC,還是有不少新的東西,并且項jsp、html以前沒什么基礎的,現在也把那些常用標簽拿來就寫了。早上講對象初始化的過程,首先定義一個對象的引用,然后開辟內存空間,然后給成員變量初始化,然后把這個內存空間的指針給開始定義,老師這么講,那么象String s = “string”;就直接分配空間存放”string”,等在網上問問,我懷疑它間接調用了String的構造方法。
上午開始講Servlet,我的理解,Servlet就是一個在Tomcat這樣的Servlet容器中執(zhí)行的類,跟jsp頁面沒有必然聯(lián)系,跟javaBean不同,javaBean好像必須通過jap利用<jsp:useBean….<jsp:setProperty….來使用。
在有就是在web.xml中映射Servlet時
<servlet>
<servlet-name>myservlet</servlet-name>
<servlet-class>MyServlet.FirstServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>myservlet</servlet-name>
<url-pattern>/firstservlet</url-pattern>
</servlet-mapping>
一,上面必須被包含在<web-app></web-app>中
二,在<url-pattern>/firstservlet</url-pattern>標簽中,firstservlet前必須有”/”