几个Java Web函数的作用
一,ServletContext():(zz)
Servlet容器在启动时会加载Web应用,并为每个Java Web应用创建唯一的ServletContext对象。可以把ServletContext看成是一个Web应用的服务器端组件的共享内存。在ServletContext中可以存放共享数据,它提供了4个读取或设置共享数据的方法。
1)setAttribute(Stringname,Objectobject):把一个对象和一个属性名绑定,将这个对象存储在ServletContext中;
2)getAttribute(Stringname):根据指定的属性名返回所绑定的对象;
3)removeAttribute(Stringname):根据给定的属性名从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属性还没有设置,那么创建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>点击计数</TITLE></HEAD>");
- out.println("<BODY>");
- //输出当前的count属性值
- out.println("<P>当前计数是:"+count+"</P>");
- out.println("</BODY></HTML>");
- //创建新的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)关闭浏览器,再打开新浏览器还是在原来基础上加1(即便由IE换成Opera);
3)如果重启Tomcat服务器,再访问CounterServlet,则count又初始化为0;
4)复制helloapp应用,改为helloapp1,再发布helloapp1,通过不同的浏览器窗口分别访问helloapp及helloapp1中的CounterServlet,发现这两个Web应用拥有各自独立的count属性。
即ServletContext对象只在Web应用被关闭时才被销毁;不同的Web应用,ServletContext各自独立存在。
二,以前不知道在struts-config.xml中还可以写数据库的配置,现在知道了,是可以在struts-config.xml中下<data-source>标签来进行数据库的配置的。
- <data-sources>
- <data-sourcekeydata-sourcekey="DATASOURCE"type="oracle.jdbc.pool.OracleDataSource">
- <!--說明-->
- <set-propertypropertyset-propertyproperty="description"value="ExampleDataSourceConfiguration"/>
- <!--所用的JDBC驅動類,必須-->
- <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"/>
- <!--同時打開的***連接數,缺省值為2,可選-->
- <set-propertypropertyset-propertyproperty="maxActive"value="10"/>
- <!--同時打開的最小連接數,缺省值為1,可選-->
- <set-propertypropertyset-propertyproperty="minCount"value="1"/>
- <!--連接到數據庫的用戶名,必須-->
- <set-propertypropertyset-propertyproperty="user"value="vendorda1"/>
- <!--連接到數據庫的密碼,必須-->
- <set-propertypropertyset-propertyproperty="password"value="vendorda1"/>
- <!--是否自動COMMIT-->
- <set-propertypropertyset-propertyproperty="autoCommit"value="true"/>
- </data-source>
- </data-sources>
在这个里面配置好之后,如果想要建立一个数据库的链接就可以这样写。
- DataSourcedataSource=(DataSource)servlet.getServletContext().getAttribute(Action.DATA_SOURCE_KEY);
- Connectionconnection=dataSource.getConnection();
三,ActionMessage的作用(zz)
ActionMessage、ActionMessages、saveMessages()、saveErrors()、之间的关系及用法
ActionMessage功能是:用来产生STRUTS消息的包括正常消息和错误消息。注(原有ActionError方法来产生错误消息,但已废弃,但仍可使用。)例:ActionMessage(key,object);其中key为在appication.properties中指的key值。object为消息中要传入的参数,这里实现了动态传入。如果要传多个参数时,object处可以改为数组。
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.设为true时代表以message_key为key取出ActionMessages.它与<html:errors/>的主要区别是,它可以取正常消息或错误消息(即以error_key或message_key为KEY),通过设置message属性true或false来实现。
以上这些过程的实现都是通过操作(page到application)四个范围当中的attribte属性为实现的。
【编辑推荐】