总结Java Web中几个函数的作用

开发 后端
前些天初步看了下一个有关于BBS开发的程序。基于struts的,见到了里面的几个函数,不知道它们的作用,总结了一下Java Web中几个函数的作用。

几个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对象中的所有属性名。

  1. packagemypack;  
  2. importjavax.servlet.*;  
  3. importjavax.servlet.http.*;  
  4. importjava.io.*;  
  5. importjava.util.*;  
  6.  
  7. publicclassCounterServletextendsHttpServlet  
  8. {  
  9. publicstaticfinalStringCONTENT_TYPE="text/html;charset=GB2312";  
  10.  
  11. publicvoidinit(ServletConfigconfig)throwsServletException{  
  12. super.init(config);  
  13. }  
  14.  
  15. publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{  
  16. doPost(request,response);  
  17. }  
  18.  
  19. publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{  
  20. //获得ServletContext的引用  
  21. ServletContextcontext=getServletContext();  
  22. //从ServletContext读取count属性  
  23. Integercount=(Integer)context.getAttribute("count");  
  24.  
  25. //如果count属性还没有设置,那么创建count属性,初始值为0  
  26. //oneandaddittotheServletContext  
  27. if(count==null){  
  28. count=newInteger(0);  
  29. context.setAttribute("count",newInteger(0));  
  30. }  
  31.  
  32. response.setContentType(CONTENT_TYPE);  
  33. PrintWriterout=response.getWriter();  
  34. out.println("<HTML>");  
  35. out.println("<HEAD><TITLE>点击计数</TITLE></HEAD>");  
  36. out.println("<BODY>");  
  37. //输出当前的count属性值  
  38. out.println("<P>当前计数是:"+count+"</P>");  
  39. out.println("</BODY></HTML>");  
  40.  
  41. //创建新的count对象,其值增1  
  42. count=newInteger(count.intValue()+1);  
  43. //将新的count属性存储到ServletContent中  
  44. context.setAttribute("count",count);  
  45. }  
  46. publicvoiddestroy(){  
  47. }  

在web.xml中为CounterServlet类加上<servlet>和<servlet-mapping>元素

  1. <servlet> 
  2. <servlet-name>CounterServlet</servlet-name> 
  3. <servlet-class>mypack.CounterServlet</servlet-class> 
  4. </servlet> 
  5. <servlet-mapping> 
  6. <servlet-name>CounterServlet</servlet-name> 
  7. <url-pattern>/counter</url-pattern> 
  8. </servlet-mapping> 
  9.  
  10. 测试通过。 

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>标签来进行数据库的配置的。

  1. <data-sources> 
  2.  
  3. <data-sourcekeydata-sourcekey="DATASOURCE"type="oracle.jdbc.pool.OracleDataSource"> 
  4. <!--說明--> 
  5. <set-propertypropertyset-propertyproperty="description"value="ExampleDataSourceConfiguration"/> 
  6.  
  7. <!--所用的JDBC驅動類,必須--> 
  8. <set-propertypropertyset-propertyproperty="driverClassName"value="oracle.jdbc.driver.OracleDriver"/> 
  9.  
  10. <!--所用的JDBC的URL,必須--> 
  11. <set-propertypropertyset-propertyproperty="URL"value="jdbc:oracle:thin:@10.171.33.12:1521;DatabaseName=ITDBT"/> 
  12.  
  13. <!--同時打開的***連接數,缺省值為2,可選--> 
  14. <set-propertypropertyset-propertyproperty="maxActive"value="10"/> 
  15.  
  16. <!--同時打開的最小連接數,缺省值為1,可選--> 
  17. <set-propertypropertyset-propertyproperty="minCount"value="1"/> 
  18.  
  19. <!--連接到數據庫的用戶名,必須--> 
  20. <set-propertypropertyset-propertyproperty="user"value="vendorda1"/> 
  21.  
  22. <!--連接到數據庫的密碼,必須--> 
  23. <set-propertypropertyset-propertyproperty="password"value="vendorda1"/> 
  24.  
  25. <!--是否自動COMMIT--> 
  26. <set-propertypropertyset-propertyproperty="autoCommit"value="true"/> 
  27. </data-source> 
  28.  
  29. </data-sources> 

在这个里面配置好之后,如果想要建立一个数据库的链接就可以这样写。

  1. DataSourcedataSource=(DataSource)servlet.getServletContext().getAttribute(Action.DATA_SOURCE_KEY);  
  2. 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属性为实现的。

【编辑推荐】

  1. 浅谈Java SE、Java EE、Java ME三者的区别
  2. Java虚拟机内部构成浅析
  3. 浅谈Java编程语言中创建和使用日期
  4. 详解Java的特点与优势
  5. 浅谈为什么Java接口中不允许定义变量
责任编辑:彭凡 来源: 51CTO
相关推荐

2009-06-30 14:51:19

JSP和Servlet

2009-06-30 17:10:28

JSP和Servlet

2009-06-29 16:24:00

JSP和Servlet

2022-04-06 07:32:41

Java运算符变量

2009-05-05 11:02:25

思科认证考试ID

2018-04-23 10:05:41

Java Web框架Spring

2017-02-27 17:06:43

Java Web开发乱码

2020-09-26 07:19:46

Java

2012-04-02 14:03:08

web缓存

2022-04-02 08:14:02

JavaThreadLoca数据

2009-11-25 17:54:47

PHP数组函数

2011-12-15 16:55:04

TomcatJavajsp

2024-01-25 11:36:08

C++构造函数关键字

2011-11-02 15:42:27

2022-06-07 08:31:44

JavaUnsafe

2023-06-28 08:34:02

Bind()函数JavaScript

2012-04-26 11:39:04

Javastatic变量

2010-04-14 13:22:10

Oracle系统函数

2011-12-30 16:30:39

Java

2020-03-29 20:27:51

Python函数开发
点赞
收藏

51CTO技术栈公众号