一ServletContext():(zz)
Servlet容器在启动时会加载Web应用并为每个Java Web应用创建唯一的ServletContext对象可以把ServletContext看成是一个Web应用的服务器端组件的共享内存在ServletContext中可以存放共享数据它提供了个读取或设置共享数据的方法
)setAttribute(StringnameObjectobject):把一个对象和一个属性名绑定将这个对象存储在ServletContext中
)getAttribute(Stringname):根据指定的属性名返回所绑定的对象
)removeAttribute(Stringname):根据给定的属性名从ServletContext中删除相应的操作
)getAttributeNames():返回Enumeration对象它包含了存储在ServletContext对象中的所有属性名
packagemypack;
importjavaxservlet*;
importjavaxservlethttp*;
importjavaio*;
importjavautil*;
publicclassCounterServletextendsHttpServlet
{
publicstaticfinalStringCONTENT_TYPE=text/html;charset=GB;
publicvoidinit(ServletConfigconfig)throwsServletException{
superinit(config);
}
publicvoiddoGet(HttpServletRequestrequestHttpServletResponseresponse)throwsServletExceptionIOException{
doPost(requestresponse);
}
publicvoiddoPost(HttpServletRequestrequestHttpServletResponseresponse)throwsServletExceptionIOException{
//获得ServletContext的引用
ServletContextcontext=getServletContext();
//从ServletContext读取count属性
Integercount=(Integer)contextgetAttribute(count);
//如果count属性还没有设置那么创建count属性初始值为
//oneandaddittotheServletContext
if(count==null){
unt=newInteger();
ntextsetAttribute(countnewInteger());
}
responsesetContentType(CONTENT_TYPE);
PrintWriterout=responsegetWriter();
outprintln(<HTML>);
outprintln(<HEAD><TITLE>点击计数</TITLE></HEAD>);
outprintln(<BODY>);
//输出当前的count属性值
outprintln(<P>当前计数是+count+</P>);
outprintln(</BODY></HTML>);
//创建新的count对象其值增
unt=newInteger(countintValue()+);
//将新的count属性存储到ServletContent中
ntextsetAttribute(countcount);
}
publicvoiddestroy(){
}
}
在webxml中为CounterServlet类加上<servlet>和<servletmapping>元素
<servlet>
<servletname>CounterServlet</servletname>
<servletclass>mypackCounterServlet</servletclass>
</servlet>
<servletmapping>
<servletname>CounterServlet</servletname>
<urlpattern>/counter</urlpattern>
</servletmapping>
测试通过
)刷新页面count加
)关闭浏览器再打开新浏览器还是在原来基础上加(即便由IE换成Opera)
)如果重启Tomcat服务器再访问CounterServlet则count又初始化为
)复制helloapp应用改为helloapp再发布helloapp通过不同的浏览器窗口分别访问helloapp及helloapp中的CounterServlet发现这两个Web应用拥有各自独立的count属性
即ServletContext对象只在Web应用被关闭时才被销毁不同的Web应用ServletContext各自独立存在
二以前不知道在strutsconfigxml中还可以写数据库的配置现在知道了是可以在strutsconfigxml中下<datasource>标签来进行数据库的配置的
<datasources>
<datasourcekeydatasourcekey=DATASOURCEtype=oraclejdbcpoolOracleDataSource>
<!说明>
<setpropertypropertysetpropertyproperty=descriptionvalue=ExampleDataSourceConfiguration/>
<!所用的JDBC驱动类必须>
<setpropertypropertysetpropertyproperty=driverClassNamevalue=oraclejdbcdriverOracleDriver/>
<!所用的JDBC的URL必须>
<setpropertypropertysetpropertyproperty=URLvalue=jdbc:oracle:thin:@:;DatabaseName=ITDBT/>
<!同时打开的最大连接数缺省值为可选>
<setpropertypropertysetpropertyproperty=maxActivevalue=/>
<!同时打开的最小连接数缺省值为可选>
<setpropertypropertysetpropertyproperty=minCountvalue=/>
<!连接到数据库的用户名必须>
<setpropertypropertysetpropertyproperty=uservalue=vendorda/>
<!连接到数据库的密码必须>
<setpropertypropertysetpropertyproperty=passwordvalue=vendorda/>
<!是否自动COMMIT>
<setpropertypropertysetpropertyproperty=autoCommitvalue=true/>
</datasource>
</datasources>
在这个里面配置好之后如果想要建立一个数据库的链接就可以这样写
DataSourcedataSource=(DataSource)servletgetServletContext()getAttribute(ActionDATA_SOURCE_KEY);
Connectionconnection=dataSourcegetConnection();
三ActionMessage的作用(zz)
ActionMessageActionMessagessaveMessages()saveErrors()之间的关系及用法
ActionMessage功能是用来产生STRUTS消息的包括正常消息和错误消息注(原有ActionError方法来产生错误消息但已废弃但仍可使用)例ActionMessage(keyobject);其中key为在appicationproperties中指的key值object为消息中要传入的参数这里实现了动态传入如果要传多个参数时object处可以改为数组
ActionMessages功能是作为容器(map)来存ActionMessage的例:ActionMessagesams=newActionMessages()amsadd(idActionMessage)
saveErrors功能是用来存储ActionMessages例saveErrors(ActionMessagesscope)这里有个隐性的error_key作为KEY与ActionMessages对应scope值为:applicationsessionrequestpage默认为page范围
saveMessages功能是用来存储ActionMessages例saveMessages(ActionMessagesscope)这里有个隐性的message_key作为KEY与ActionMessages对应scope值为:applicationsessionrequestpage默认为page范围
取出ActionMessage消息STRUTS提供了两种标签
<html:errors/>意思是从page范围(范围由小到大从page到application)开始以error_key为key寻找ActionMessages要取具体的ActionMessage可以用<html:errorsproperty=id/>
<html:messageid=var/><bean:writename=var/>意思是迭代找出所有ActionMessage赋值给var然后通过bean标签输出要取具体的ActionMessage可以用<html:messageid=varproperty=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属性为实现的