總結(jié)Java Web中幾個函數(shù)的作用
幾個Java Web函數(shù)的作用
一,ServletContext():(zz)
Servlet容器在啟動時會加載Web應用,并為每個Java Web應用創(chuàng)建唯一的ServletContext對象??梢园裇ervletContext看成是一個Web應用的服務器端組件的共享內(nèi)存。在ServletContext中可以存放共享數(shù)據(jù),它提供了4個讀取或設(shè)置共享數(shù)據(jù)的方法。
1)setAttribute(Stringname,Objectobject):把一個對象和一個屬性名綁定,將這個對象存儲在ServletContext中;
2)getAttribute(Stringname):根據(jù)指定的屬性名返回所綁定的對象;
3)removeAttribute(Stringname):根據(jù)給定的屬性名從ServletContext中刪除相應的操作;
4)getAttributeNames():返回Enumeration對象,它包含了存儲在ServletContext對象中的所有屬性名。
- packagemypack;
- importjavax.servlet.*;
- importjavax.servlet.http.*;
- importjava.io.*;
- importjava.util.*;
- publicclassCounterServletextendsHttpServlet
- {
- publicstaticfinalStringCONTENT_TYPE="text/html;charset=GB2312";
- publicvoidinit(ServletConfigconfig)throwsServletException{
- super.init(config);
- }
- publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
- doPost(request,response);
- }
- publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
- //獲得ServletContext的引用
- ServletContextcontext=getServletContext();
- //從ServletContext讀取count屬性
- Integercount=(Integer)context.getAttribute("count");
- //如果count屬性還沒有設(shè)置,那么創(chuàng)建count屬性,初始值為0
- //oneandaddittotheServletContext
- if(count==null){
- count=newInteger(0);
- context.setAttribute("count",newInteger(0));
- }
- response.setContentType(CONTENT_TYPE);
- PrintWriterout=response.getWriter();
- out.println("<HTML>");
- out.println("<HEAD><TITLE>點擊計數(shù)</TITLE></HEAD>");
- out.println("<BODY>");
- //輸出當前的count屬性值
- out.println("<P>當前計數(shù)是:"+count+"</P>");
- out.println("</BODY></HTML>");
- //創(chuàng)建新的count對象,其值增1
- count=newInteger(count.intValue()+1);
- //將新的count屬性存儲到ServletContent中
- context.setAttribute("count",count);
- }
- publicvoiddestroy(){
- }
- }
在web.xml中為CounterServlet類加上<servlet>和<servlet-mapping>元素
- <servlet>
- <servlet-name>CounterServlet</servlet-name>
- <servlet-class>mypack.CounterServlet</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>CounterServlet</servlet-name>
- <url-pattern>/counter</url-pattern>
- </servlet-mapping>
- 測試通過。
1)刷新頁面,count加1;
2)關(guān)閉瀏覽器,再打開新瀏覽器還是在原來基礎(chǔ)上加1(即便由IE換成Opera);
3)如果重啟Tomcat服務器,再訪問CounterServlet,則count又初始化為0;
4)復制helloapp應用,改為helloapp1,再發(fā)布helloapp1,通過不同的瀏覽器窗口分別訪問helloapp及helloapp1中的CounterServlet,發(fā)現(xiàn)這兩個Web應用擁有各自獨立的count屬性。
即ServletContext對象只在Web應用被關(guān)閉時才被銷毀;不同的Web應用,ServletContext各自獨立存在。
二,以前不知道在struts-config.xml中還可以寫數(shù)據(jù)庫的配置,現(xiàn)在知道了,是可以在struts-config.xml中下<data-source>標簽來進行數(shù)據(jù)庫的配置的。
- <data-sources>
- <data-sourcekeydata-sourcekey="DATASOURCE"type="oracle.jdbc.pool.OracleDataSource">
- <!--說明-->
- <set-propertypropertyset-propertyproperty="description"value="ExampleDataSourceConfiguration"/>
- <!--所用的JDBC驅(qū)動類,必須-->
- <set-propertypropertyset-propertyproperty="driverClassName"value="oracle.jdbc.driver.OracleDriver"/>
- <!--所用的JDBC的URL,必須-->
- <set-propertypropertyset-propertyproperty="URL"value="jdbc:oracle:thin:@10.171.33.12:1521;DatabaseName=ITDBT"/>
- <!--同時打開的***連接數(shù),缺省值為2,可選-->
- <set-propertypropertyset-propertyproperty="maxActive"value="10"/>
- <!--同時打開的最小連接數(shù),缺省值為1,可選-->
- <set-propertypropertyset-propertyproperty="minCount"value="1"/>
- <!--連接到數(shù)據(jù)庫的用戶名,必須-->
- <set-propertypropertyset-propertyproperty="user"value="vendorda1"/>
- <!--連接到數(shù)據(jù)庫的密碼,必須-->
- <set-propertypropertyset-propertyproperty="password"value="vendorda1"/>
- <!--是否自動COMMIT-->
- <set-propertypropertyset-propertyproperty="autoCommit"value="true"/>
- </data-source>
- </data-sources>
在這個里面配置好之后,如果想要建立一個數(shù)據(jù)庫的鏈接就可以這樣寫。
- DataSourcedataSource=(DataSource)servlet.getServletContext().getAttribute(Action.DATA_SOURCE_KEY);
- Connectionconnection=dataSource.getConnection();
三,ActionMessage的作用(zz)
ActionMessage、ActionMessages、saveMessages()、saveErrors()、之間的關(guān)系及用法
ActionMessage功能是:用來產(chǎn)生STRUTS消息的包括正常消息和錯誤消息。注(原有ActionError方法來產(chǎn)生錯誤消息,但已廢棄,但仍可使用。)例:ActionMessage(key,object);其中key為在appication.properties中指的key值。object為消息中要傳入的參數(shù),這里實現(xiàn)了動態(tài)傳入。如果要傳多個參數(shù)時,object處可以改為數(shù)組。
ActionMessages功能:是作為容器(map)來存ActionMessage的。例::ActionMessagesams=newActionMessages().ams.add("id",ActionMessage).
saveErrors功能:是用來存儲ActionMessages,例:saveErrors(ActionMessages,scope)這里有個隱性的error_key作為KEY與ActionMessages對應。scope值為:application,session,request,page.默認為page范圍。
saveMessages功能:是用來存儲ActionMessages,例:saveMessages(ActionMessages,scope)這里有個隱性的message_key作為KEY與ActionMessages對應。scope值為:application,session,request,page.默認為page范圍。
取出ActionMessage消息STRUTS提供了兩種標簽:
1.<html:errors/>意思是從page范圍(范圍由小到大從page到application)開始以error_key為key尋找ActionMessages,要取具體的ActionMessage可以用<html:errorsproperty="id"/>
2.<html:messageid="var"/><bean:writename="var"/>意思是迭代找出所有ActionMessage賦值給var,然后通過bean標簽輸出。要取具體的ActionMessage可以用<html:messageid="var"property="id"/><bean:writename="var"/>,這里html:message標簽有個默認message屬性,它的默認值為false,代表以error_key為key取出ActionMessages.設(shè)為true時代表以message_key為key取出ActionMessages.它與<html:errors/>的主要區(qū)別是,它可以取正常消息或錯誤消息(即以error_key或message_key為KEY),通過設(shè)置message屬性true或false來實現(xiàn)。
以上這些過程的實現(xiàn)都是通過操作(page到application)四個范圍當中的attribte屬性為實現(xiàn)的。
【編輯推薦】