﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-嗜夜-文章分类-JSP</title><link>http://www.blogjava.net/connie/category/43972.html</link><description>JAVA</description><language>zh-cn</language><lastBuildDate>Sat, 03 Jul 2010 21:42:57 GMT</lastBuildDate><pubDate>Sat, 03 Jul 2010 21:42:57 GMT</pubDate><ttl>60</ttl><item><title>Struts2 + hibernate3 + Spring2 整合配置(转)</title><link>http://www.blogjava.net/connie/articles/320910.html</link><dc:creator>嗜夜</dc:creator><author>嗜夜</author><pubDate>Thu, 13 May 2010 08:45:00 GMT</pubDate><guid>http://www.blogjava.net/connie/articles/320910.html</guid><wfw:comment>http://www.blogjava.net/connie/comments/320910.html</wfw:comment><comments>http://www.blogjava.net/connie/articles/320910.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/connie/comments/commentRss/320910.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/connie/services/trackbacks/320910.html</trackback:ping><description><![CDATA[<p style="line-height: 26px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 14px; padding-left: 0px; color: #666666; font-family: Arial; font-size: 13px; ">一、 Spring+Hibernate整合：&nbsp;<br style="line-height: normal; " />
Spring整合Hibernate，是做了一个很大的调整的，因为spring可以把管理Hibernate的工作都做了，以前的hibernate.cfg.xml文件都去掉了，而将这些内容都交给了spring来管理了。&nbsp;<br style="line-height: normal; " />
1、 applicationContext.xml文件中应该配置如下内容：&nbsp;<br style="line-height: normal; " />
Xml代码&nbsp;<br style="line-height: normal; " />
//配置数据连接类&nbsp;&nbsp;&nbsp;<br style="line-height: normal; " />
&lt;bean id="dataSource"&nbsp;<br style="line-height: normal; " />
class="org.apache.commons.dbcp.BasicDataSource"&gt;&nbsp;<br style="line-height: normal; " />
&lt;property name="driverClassName"&nbsp;<br style="line-height: normal; " />
&nbsp;&nbsp; value="org.gjt.mm.mysql.Driver"&gt;&nbsp;<br style="line-height: normal; " />
&lt;/property&gt;&nbsp;<br style="line-height: normal; " />
&lt;property name="url" value="jdbc:mysql://localhost:3306/test"&gt;&lt;/property&gt;&nbsp;<br style="line-height: normal; " />
&lt;property name="username" value="root"&gt;&lt;/property&gt;&nbsp;<br style="line-height: normal; " />
&lt;/bean&gt;&nbsp;<br style="line-height: normal; " />
//配置session工厂类&nbsp;&nbsp;&nbsp;<br style="line-height: normal; " />
&lt;bean id="sessionFactory"&nbsp;<br style="line-height: normal; " />
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"&gt;&nbsp;<br style="line-height: normal; " />
&lt;property name="dataSource"&gt;&nbsp;<br style="line-height: normal; " />
&nbsp;&nbsp; &lt;ref bean="dataSource" /&gt;&nbsp;<br style="line-height: normal; " />
&lt;/property&gt;&nbsp;<br style="line-height: normal; " />
&lt;property name="hibernateProperties"&gt;&nbsp;<br style="line-height: normal; " />
&nbsp;&nbsp; &lt;props&gt;&nbsp;<br style="line-height: normal; " />
&nbsp;&nbsp;&nbsp; &lt;prop key="hibernate.dialect"&gt;&nbsp;<br style="line-height: normal; " />
&nbsp;&nbsp;&nbsp;&nbsp; org.hibernate.dialect.MySQLDialect&nbsp;&nbsp;&nbsp;<br style="line-height: normal; " />
&nbsp;&nbsp;&nbsp; &lt;/prop&gt;&nbsp;<br style="line-height: normal; " />
&nbsp;&nbsp;&nbsp; &lt;prop key="hibernate.show_sql"&gt;true&lt;/prop&gt;&nbsp;<br style="line-height: normal; " />
&nbsp;&nbsp; &lt;/props&gt;&nbsp;<br style="line-height: normal; " />
&lt;/property&gt;&nbsp;<br style="line-height: normal; " />
&lt;property name="mappingResources"&gt;&nbsp;<br style="line-height: normal; " />
&nbsp;&nbsp; &lt;value&gt;com/hejianjiao/vo/Person.hbm.xml&lt;/value&gt;&nbsp;<br style="line-height: normal; " />
&lt;/property&gt;&nbsp;<br style="line-height: normal; " />
&lt;/bean&gt;</p>
<p style="line-height: 26px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 14px; padding-left: 0px; color: #666666; font-family: Arial; font-size: 13px; "><br style="line-height: normal; " />
2、可以使用spring中的HibernateDAOSupport与HibernateTemplate类来进行数据持久化操作：&nbsp;<br style="line-height: normal; " />
A、HibernateDAOSupport类中定义了对session、sessionFactory的操作方法与getHibernateTemplate方法来获得一个HibernateTemplate实例；&nbsp;<br style="line-height: normal; " />
B、HibernateTemplate类中定义了对数据持久化的各种封装的方法，我们可以用它来对数据进行操作。&nbsp;<br style="line-height: normal; " />
因此在使用时，我们可以继承HibernateDAOSupport类，然后实例化HibernateTemplate类来进行数据持久化。</p>
<p style="line-height: 26px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 14px; padding-left: 0px; color: #666666; font-family: Arial; font-size: 13px; ">二、 Spring+Struts2整合：&nbsp;<br style="line-height: normal; " />
1、spring配置在web.xml文件中的上下文监听器:&nbsp;<br style="line-height: normal; " />
Xml代码<br style="line-height: normal; " />
&lt;context-param&gt;&nbsp;&nbsp;&nbsp;<br style="line-height: normal; " />
&lt;param-name&gt;contextConfigLocation&lt;/param-name&gt;&nbsp;&nbsp;&nbsp;<br style="line-height: normal; " />
&lt;param-value&gt;/WEB-INF/applicationContext*.xml&lt;/param-value&gt;&nbsp;&nbsp;&nbsp;<br style="line-height: normal; " />
&lt;/context-param&gt;&nbsp;&nbsp;&nbsp;<br style="line-height: normal; " />
&nbsp;&nbsp;&nbsp;<br style="line-height: normal; " />
&lt;listener&gt;&nbsp;&nbsp;&nbsp;<br style="line-height: normal; " />
&lt;listener-class&gt;org.springframwork.web.content.ContextLoaderListener&lt;/listener-class&gt;&nbsp;&nbsp;&nbsp;<br style="line-height: normal; " />
&lt;/listener&gt;&nbsp;&nbsp;</p>
<p style="line-height: 26px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 14px; padding-left: 0px; color: #666666; font-family: Arial; font-size: 13px; ">2、struts2配置在web.xml文件中的过滤器:&nbsp;<br style="line-height: normal; " />
Xml代码<br style="line-height: normal; " />
&lt;filter&gt;&nbsp;&nbsp;&nbsp;<br style="line-height: normal; " />
&lt;filter-name&gt;struts2&lt;/filter-name&gt;&nbsp;&nbsp;&nbsp;<br style="line-height: normal; " />
&lt;filter-class&gt;org.apache.struts2.dispatcher.FilterDispatcher&lt;/filter-class&gt;&nbsp;&nbsp;&nbsp;<br style="line-height: normal; " />
&lt;/filter&gt;&nbsp;&nbsp;&nbsp;<br style="line-height: normal; " />
&nbsp;&nbsp;&nbsp;<br style="line-height: normal; " />
&lt;filter-mapping&gt;&nbsp;&nbsp;&nbsp;<br style="line-height: normal; " />
&lt;filter-name&gt;struts2&lt;/filter-name&gt;&nbsp;&nbsp;&nbsp;<br style="line-height: normal; " />
&lt;url-patter&gt;/*&lt;/url-patter&gt;&nbsp;&nbsp;&nbsp;<br style="line-height: normal; " />
&lt;/filter-mapping&gt;&nbsp;&nbsp;</p>
<p style="line-height: 26px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 14px; padding-left: 0px; color: #666666; font-family: Arial; font-size: 13px; ">3、设置struts.xml文件，就可以使用spring的IOC来管理struts的Action：&nbsp;<br style="line-height: normal; " />
Xml代码<br style="line-height: normal; " />
&lt;constent name="struts.objectFactory" value="spring" /&gt;&nbsp;&nbsp;</p>
<p style="line-height: 26px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 14px; padding-left: 0px; color: #666666; font-family: Arial; font-size: 13px; ">4、第三步设置后，以后在struts.xml 文件中配置一个action时，它的class就不是一个类了，而是在applicationContext.xml文件中定义过的类的ID,在struts.xml文件中就只需要引用定义好的类的id 就可以了。&nbsp;<br style="line-height: normal; " />
然后特别要注意的一个问题：action是一个请求就是一个action对象，而在spring中则不是的，它是自动分配类的实例的，是使用的单态模式来生产类的实例的，不符合action，因此在applicationContext.xml文件中定义每个action时，都要在类后加上:&nbsp;<br style="line-height: normal; " />
Xml代码<br style="line-height: normal; " />
scope="prototype" 属性&nbsp;&nbsp;</p>
<p style="line-height: 26px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 14px; padding-left: 0px; color: #666666; font-family: Arial; font-size: 13px; ">三、 三者组合开发：&nbsp;<br style="line-height: normal; " />
一般在组合开发时，没有什么难的，只要把上面两步做好就可以是三个组合开发了。<br style="line-height: normal; " />
上图则是对于进行组合开发时，一般使用的系统架构：&nbsp;<br style="line-height: normal; " />
1、 先从最底层开发，先开发POJO类，和Hibernate映射文件。它相当于系统的数据库层。&nbsp;<br style="line-height: normal; " />
2、 再开发DAO层，它是对于数据进行持久化的一层，专门处理各种数据增、删、改、查的功能。并且使用DAO工厂模式，以保证和上层没有任何的联系，并且可以方便于类与接口的扩展。&nbsp;<br style="line-height: normal; " />
3、 第三是开发manager层，它相当于软件的业务逻辑层，即专门处理各种业务逻辑。实现系统的业务处理功能。并且它隔离事务，使与下层的数据持久和上层的数据操作没有任何的联系。&nbsp;<br style="line-height: normal; " />
4、 Action层，也即软件的表示层，处理action的接收与回复。各action由spring管理。</p>
<p style="line-height: 26px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 14px; padding-left: 0px; color: #666666; font-family: Arial; font-size: 13px; ">五、 组合开发中的一些问题：</p>
<p style="line-height: 26px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 14px; padding-left: 0px; color: #666666; font-family: Arial; font-size: 13px; ">1、 在组合开发中，常见的一个问题就是session的管理，当我们使用HibernateTemplate操作数据库时，可以不对session进行显示的操作，spring可以自动处理session的打开与关闭。&nbsp;<br style="line-height: normal; " />
我们可以在web.xml文件中显示的配置一个session管理的过滤器，它专门帮助我们关闭session：</p>
<p style="line-height: 26px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 14px; padding-left: 0px; color: #666666; font-family: Arial; font-size: 13px; ">Xml代码<br style="line-height: normal; " />
&lt;filter&gt;&nbsp;&nbsp;&nbsp;<br style="line-height: normal; " />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;filter-name&gt;lazyLoadingFilter&lt;/filter-name&gt;&nbsp;&nbsp;&nbsp;<br style="line-height: normal; " />
&lt;filter-class&gt;&nbsp;&nbsp;&nbsp;<br style="line-height: normal; " />
org.springframwork.orm.hibernate3.support.OpenSessionInViewFilter&nbsp;&nbsp;&nbsp;&nbsp;<br style="line-height: normal; " />
&lt;/filter-class&gt;&nbsp;&nbsp;&nbsp;<br style="line-height: normal; " />
&lt;/filter&gt;&nbsp;&nbsp;&nbsp;<br style="line-height: normal; " />
&nbsp;&nbsp;&nbsp;<br style="line-height: normal; " />
&lt;filter-mapping&gt;&nbsp;&nbsp;&nbsp;<br style="line-height: normal; " />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;filter-name&gt;lazyLoadingFilter&lt;/filter-name&gt;&nbsp;&nbsp;&nbsp;<br style="line-height: normal; " />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;url-pattern&gt;*.action&lt;/url-pattern&gt;&nbsp;&nbsp;&nbsp;<br style="line-height: normal; " />
&lt;/filter-mapping&gt;&nbsp;&nbsp;&nbsp;<br style="line-height: normal; " />
注：它一定要在struts2的过滤器之前。因为web.xml文件的过滤器执行是有顺序的。而session一定在前面进行。&nbsp;&nbsp;</p>
<p style="line-height: 26px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 14px; padding-left: 0px; color: #666666; font-family: Arial; font-size: 13px; ">注：它一定要在struts2的过滤器之前。因为web.xml文件的过滤器执行是有顺序的。而session一定在前面进行。<br style="line-height: normal; " />
它会在所有的action处理完了，页面显示完了，就会自动关闭session。</p>
<p style="line-height: 26px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 14px; padding-left: 0px; color: #666666; font-family: Arial; font-size: 13px; ">六、 spring事务处理</p>
<p style="line-height: 26px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 14px; padding-left: 0px; color: #666666; font-family: Arial; font-size: 13px; ">1、事务的处理也交给了spring来管理，要在applicationContext.xml文件中上配置事务管理类：&nbsp;<br style="line-height: normal; " />
Xml代码<br style="line-height: normal; " />
//实施事务管理的bean&nbsp;&nbsp;&nbsp;&nbsp;<br style="line-height: normal; " />
&lt;bean id=&#8221;transactionManager&#8221;&nbsp;&nbsp;&nbsp;&nbsp;<br style="line-height: normal; " />
class=&#8221;org.springframwork.orm.hibernate3.HibernateTransactionManager&#8221;&gt;&nbsp;&nbsp;&nbsp;<br style="line-height: normal; " />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name=&#8221;sessionFactory&#8221;&gt;&nbsp;&nbsp;&nbsp;<br style="line-height: normal; " />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ref bean=&#8221;sessionFactory&#8221; /&gt;&nbsp;&nbsp;&nbsp;<br style="line-height: normal; " />
&lt;/property&gt;&nbsp;&nbsp;&nbsp;<br style="line-height: normal; " />
&lt;/bean&gt;&nbsp;&nbsp;</p>
<p style="line-height: 26px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 14px; padding-left: 0px; color: #666666; font-family: Arial; font-size: 13px; ">它是通过sessionFactory来管理，因此在传进来一个sessionFactory来接管事务处理。&nbsp;<br style="line-height: normal; " />
2、 声明式事务处理：&nbsp;<br style="line-height: normal; " />
在spring中对事务进行管理时，可以显示地进行事务处理的定义：&nbsp;<br style="line-height: normal; " />
Xml代码<br style="line-height: normal; " />
//给事务添加的属性&nbsp;&nbsp;&nbsp;&nbsp;<br style="line-height: normal; " />
&lt;tx:advice id=&#8221;txAdvice&#8221; transaction-manager=&#8221;transactionManager&#8221;&gt;&nbsp;&nbsp;&nbsp;<br style="line-height: normal; " />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;tx:attributes &gt;&nbsp;&nbsp;&nbsp;<br style="line-height: normal; " />
//propagation表示的是事务的传播特性，使用required时，是当检测到add开头的方法时，就看此时有没有开启的事务，如果有则将方法放进事务中去，如果没有，则新建一个事务。然后将方法放进去。&nbsp;&nbsp;&nbsp;&nbsp;<br style="line-height: normal; " />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;tx:method name=&#8221;add*&#8221; propagation=&#8221;REQUIRED&#8221;&gt;&nbsp;&nbsp;&nbsp;<br style="line-height: normal; " />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;tx:method name=&#8221;delete*&#8221; propagation=&#8221;REQUIRED&#8221;&gt;&nbsp;&nbsp;&nbsp;<br style="line-height: normal; " />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;tx:method name=&#8221;update*&#8221; propagation=&#8221;REQUIRED&#8221;&gt;&nbsp;&nbsp;&nbsp;<br style="line-height: normal; " />
//如果检测到其它的方法，则给其只读数据库的属性。即当本方法在读时，其它的方法不能再去写了。保证一个事务的完整性。&nbsp;&nbsp;&nbsp;&nbsp;<br style="line-height: normal; " />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;tx:method name=&#8221;*&#8221; read-only=&#8221;true&#8221;&gt;&nbsp;&nbsp;&nbsp;<br style="line-height: normal; " />
&lt;/tx:attributes&gt;&nbsp;&nbsp;&nbsp;<br style="line-height: normal; " />
&lt;/tx:advice&gt;&nbsp;&nbsp;&nbsp;<br style="line-height: normal; " />
对于事务的其它传播属性，则可以参考其它文档进行相关的了解。</p>
<p style="line-height: 26px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 14px; padding-left: 0px; color: #666666; font-family: Arial; font-size: 13px; ">上一个配置是针对于所有包中类的事务处理方法的设置。下面一段是&lt;aop:config/&gt; 的定义，它确保由 'txAdvice' bean定义的事务通知在应用中合适的点被执行。首先我们定义了 一个切面，它匹配 HibernateDAO 接口定义的所有操作，我们把该切面叫做 'allManagerMethod'。然后我们用一个通知器（advisor）把这个切面与 'txAdvice' 绑定在一起，表示当 'allManagerMethod' 执行时，'txAdvice' 定义的通知事务逻辑将被执行。这就是AOP切面工程：&nbsp;<br style="line-height: normal; " />
Xml代码<br style="line-height: normal; " />
&lt;aop:config&gt;&nbsp;&nbsp;&nbsp;<br style="line-height: normal; " />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;aop:pointcut id=&#8221;allManagerMethod&#8221;&nbsp;&nbsp;&nbsp;&nbsp;<br style="line-height: normal; " />
expression=&#8221;execution(*&nbsp;&nbsp; com.hejianjiao.hibernate.HibernateDAO.*(..))&#8221;/&gt;&nbsp;&nbsp;&nbsp;<br style="line-height: normal; " />
//调用上面配置的事务属性，可以将它给本aop pointcut。&nbsp;&nbsp;&nbsp;&nbsp;<br style="line-height: normal; " />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;aop:advisor advice-ref=&#8221;txAdvice&#8221; pointcut-ref=&#8221;allManagerMethod&#8221;/&gt;&nbsp;&nbsp;&nbsp;<br style="line-height: normal; " />
//如果还有其它的定义，则可以再加上pointcut、advisor来定义本切面点的事务逻辑。&nbsp;&nbsp;&nbsp;&nbsp;<br style="line-height: normal; " />
&lt;/aop:config&gt;&nbsp;&nbsp;&nbsp;<br style="line-height: normal; " />
//expression中的内容是要执行本切面的一个接口，中的所有方法：如：一个接口中定义了操作数据的方法：com.hejianjiao.hibernate.HibernateDAO，则下面execution括号中的内容就为：* com.hejianjiao.hibernate.HibernateDAO.*(..)。而如果在com.hejianjiao.hibernate包中还有其它的类也有操作方法，我们要一起定义的话，就可以写为：* com.hejianjiao.*.*(..)，其中(..)表示的是方法，前面的第一个*是操作的接口或者类。&nbsp;<br style="line-height: normal; " />
上面的配置将为由 'HibernateDAO' 定义的bean创建一个代理对象，这个代理对象被装配了事务通知，所以当它的相应方法被调用时，一个事务将被启动、挂起、被标记为只读，或者其它（根据该方法所配置的事务语义）。</p>
<img src ="http://www.blogjava.net/connie/aggbug/320910.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/connie/" target="_blank">嗜夜</a> 2010-05-13 16:45 <a href="http://www.blogjava.net/connie/articles/320910.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts2一个小技巧：首页显示动态数据</title><link>http://www.blogjava.net/connie/articles/320714.html</link><dc:creator>嗜夜</dc:creator><author>嗜夜</author><pubDate>Wed, 12 May 2010 08:33:00 GMT</pubDate><guid>http://www.blogjava.net/connie/articles/320714.html</guid><wfw:comment>http://www.blogjava.net/connie/comments/320714.html</wfw:comment><comments>http://www.blogjava.net/connie/articles/320714.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/connie/comments/commentRss/320714.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/connie/services/trackbacks/320714.html</trackback:ping><description><![CDATA[<span  style="font-family: 宋体; font-size: 21px; line-height: 18px; "><span style="font-size: 8pt; "><span style="font-size: 12pt; "><span style="font-size: 12pt; "><span style="font-size: 18pt; "><span style="font-size: 14pt; "><span style="font-size: 14pt; "><span style="font-size: 14pt; "><span style="font-size: 12pt; ">往往我们需要在首页显示动态数据，但是只有通过一个action设定数据才能在页面获得动态数据，而且web主页不能设成一个action。解决的办法是，将主页设成一个html页例如index.html，然后这个文件写上如下内容即可实现目的。</span></span></span></span></span></span></span></span></span>
<div>
<div class="highlighter">
<ol start="1" class="highlighter-xml" style="margin-top: 5px; margin-right: 0px; margin-bottom: 5px; margin-left: 35px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: none; ">
    <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 2px; padding-right: 0px; padding-bottom: 2px; padding-left: 0px; list-style-type: decimal; "><span class="tag">&lt;</span><span class="tag-name">html</span><span class="tag">&gt;</span></li>
    <li class="alt" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 2px; padding-right: 0px; padding-bottom: 2px; padding-left: 0px; list-style-type: decimal; ">&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">head</span><span class="tag">&gt;</span></li>
    <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 2px; padding-right: 0px; padding-bottom: 2px; padding-left: 0px; list-style-type: decimal; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">&lt;!--在这里指定action--&gt;</span></li>
    <li class="alt" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 2px; padding-right: 0px; padding-bottom: 2px; padding-left: 0px; list-style-type: decimal; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">META</span>&nbsp;<span class="attribute">HTTP-EQUIV</span>=<span class="attribute-value">"Refresh"</span>&nbsp;<span class="attribute">CONTENT</span>=<span class="attribute-value">"0;URL=mainPageAction"</span><span class="tag">&gt;</span></li>
    <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 2px; padding-right: 0px; padding-bottom: 2px; padding-left: 0px; list-style-type: decimal; ">&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">head</span><span class="tag">&gt;</span></li>
    <li class="alt" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 2px; padding-right: 0px; padding-bottom: 2px; padding-left: 0px; list-style-type: decimal; ">&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">body</span><span class="tag">&gt;</span></li>
    <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 2px; padding-right: 0px; padding-bottom: 2px; padding-left: 0px; list-style-type: decimal; ">&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">body</span><span class="tag">&gt;</span></li>
    <li class="alt" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 2px; padding-right: 0px; padding-bottom: 2px; padding-left: 0px; list-style-type: decimal; "><span class="tag">&lt;/</span><span class="tag-name">html</span><span class="tag">&gt;</span></li>
</ol>
</div>
</div>
<img src ="http://www.blogjava.net/connie/aggbug/320714.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/connie/" target="_blank">嗜夜</a> 2010-05-12 16:33 <a href="http://www.blogjava.net/connie/articles/320714.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>购物车的实现方法</title><link>http://www.blogjava.net/connie/articles/319779.html</link><dc:creator>嗜夜</dc:creator><author>嗜夜</author><pubDate>Fri, 30 Apr 2010 03:55:00 GMT</pubDate><guid>http://www.blogjava.net/connie/articles/319779.html</guid><wfw:comment>http://www.blogjava.net/connie/comments/319779.html</wfw:comment><comments>http://www.blogjava.net/connie/articles/319779.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/connie/comments/commentRss/319779.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/connie/services/trackbacks/319779.html</trackback:ping><description><![CDATA[目前购物车的实现主要是通过cookie、session或结合数据库的方式。下面分析一下它们的机制及作用。<br />
<br />
1. cookie<br />
<br />
&nbsp;
cookie是由服务器产生，存储在客户端的一段信息。它定义了一种Web服务器在客户端存储和返回信息的机制，cookie文件它包含域、路径、生存
期、和由服务器设置的变量值等内容。当用户以后访问同一个Web服务器时，浏览器会把cookie原样发送给服务器。通过让服务器读取原先保存到客户端的
信息，网站能够为浏览者提供一系列的方便，例如在线交易过程中标识用户身份、安全要求不高的场合避免用户重复输入名字和密码、门户网站的主页定制、有针对
性地投放广告等等。利用cookie的特性，大大扩展了WEB应用程序的功能，不仅可以建立服务器与客户机的联系，因为cookie可以由服务器定制，因
此还可以将购物信息生成cookie值存放在客户端，从而实现购物车的功能。用基于cookie的方式实现服务器与浏览器之间的会话或购物车，有以下特
点：<br />
<br />
n
cookie存储在客户端，且占用很少的资源，浏览器允许存放300个cookie，每个cookie的大小为4KB，足以满足购物车的要求，同时也减轻
了服务器的负荷；<br />
<br />
n
cookie为浏览器所内置，使用方便。即使用户不小心关闭了浏览器窗口，只要在cookie定义的有效期内，购物车中的信息也不会丢失；<br />
<br />
n
cookie不是可执行文件，所以不会以任何方式执行，因此也不会带来病毒或攻击用户的系统；<br />
<br />
n
基于cookie的购物车要求用户浏览器必须支持并设置为启用cookie，否则购物车则失效；<br />
<br />
n
存在着关于cookie侵犯访问者隐私权的争论，因此有些用户会禁止本机的cookie功能。<br />
<br />
2. session<br />
<br />
&nbsp;
session是实现购物车的另一种方法。session提供了可以保存和跟踪用户的状态信息的功能，使当前用户在session中定义的变量和对象能在
页面之间共享，但是不能为应用中其他用户所访问，它与cookie最重大的区别是，session将用户在会话期间的私有信息存储在服务器端，提高了安全
性。在服务器生成session后，客户端会生成一个sessionid识别号保存在客户端，以保持和服务器的同步。这个sessionid是只读的，如
果客户端禁止cookie功能，session会通过在URL中附加参数，或隐含在表单中提交等其他方式在页面间传送。因此利用session实施对用户
的管理则更为安全、有效。<br />
<br />
&nbsp;    同样，利用session也能实现购物车，这种方式的特点是：<br />
<br />
n
session用新的机制保持与客户端的同步，不依赖于客户端设置；<br />
<br />
n
与cookie相比，session是存储在服务器端的信息，因此显得更为安全，因此可将身份标示，购物等信息存储在session中；<br />
<br />
n
session会占用服务器资源，加大服务器端的负载，尤其当并发用户很多时，会生成大量的session，影响服务器的性能；<br />
<br />
n
因为session存储的信息更敏感，而且是以文件形式保存在服务器中，因此仍然存在着安全隐患。<br />
<br />
3.
结合数据库的方式<br />
<br />
&nbsp;
这也是目前较普遍的模式，在这种方式中，数据库承担着存储购物信息的作用，session或cookie则用来跟踪用户。这种方式具有以下特点：<br />
<br />
n
数据库与cookie分别负责记录数据和维持会话，能发挥各自的优势，使安全性和服务器性能都得到了提高；<br />
<br />
n
每一个购物的行为，都要直接建立与数据库的连接，直至对表的操作完成后，连接才释放。当并发用户很多时，会影响数据库的性能，因此，这对数据库的性能提出
了更高的要求；<br />
<br />
n         使cookie维持会话有赖客户端的支持。<br />
<br />
各种方式的选择：<br />
<br />
&nbsp;
虽然cookie可用来实现购物车，但必须获得浏览器的支持，再加上它是存储在客户端的信息，极易被获取，所以这也限制了它存储更多，更重要的信息。所以
一般cookie只用来维持与服务器的会话，例如国内最大的当当网络书店就是用cookie保持与客户的联系，但是这种方式最大的缺点是如果客户端不支持
cookie就会使购物车失效。<br />
<br />
&nbsp;    Session
能很好地与交易双方保持会话，可以忽视客户端的设置。在购物车技术中得到了广泛的应用。但session的文件属性使其仍然留有安全隐患。<br />
<br />
结
合数据库的方式虽然在一定程度上解决了上述的问题，但从上面的例子可以看出：在这种购物流程中涉及到对数据库表的频繁操作，尤其是用户每选购一次商品，都
要与数据库进行连接，当用户很多的时候就加大了服务器与数据库的负荷<br />
&nbsp;<br />
<br />
<br />
<span style="color: #ff0000;">这里面说的确实很详细</span><br />
我们公司采用的是数据库的方式<br />
1、用户浏览系统
，获取用户机器的MAC地址<br />
2、如果用户购买物品，添加到数据库里面，同时插入机器的MAC地址，也是用户的ID标示<br />
3、如果用户登录系
统，用用户真实的ID，更新当前机器的MAC对应的记录。<br />
4、如果结帐的话，更新用户的id，删除购物车里面的东西<br />
5、用户没有登录，购
物车记录根据MAC读取记录，如果登录系统根据用户的ID，读取记录
<img src ="http://www.blogjava.net/connie/aggbug/319779.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/connie/" target="_blank">嗜夜</a> 2010-04-30 11:55 <a href="http://www.blogjava.net/connie/articles/319779.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于struts 与 Velocity</title><link>http://www.blogjava.net/connie/articles/319673.html</link><dc:creator>嗜夜</dc:creator><author>嗜夜</author><pubDate>Thu, 29 Apr 2010 03:16:00 GMT</pubDate><guid>http://www.blogjava.net/connie/articles/319673.html</guid><wfw:comment>http://www.blogjava.net/connie/comments/319673.html</wfw:comment><comments>http://www.blogjava.net/connie/articles/319673.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/connie/comments/commentRss/319673.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/connie/services/trackbacks/319673.html</trackback:ping><description><![CDATA[http://www.ibm.com/developerworks/cn/java/j-sr1.html#download<br />
<br />
http://www.ibm.com/developerworks/cn/java/j-lo-struts2-velocity/<br />
<img src ="http://www.blogjava.net/connie/aggbug/319673.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/connie/" target="_blank">嗜夜</a> 2010-04-29 11:16 <a href="http://www.blogjava.net/connie/articles/319673.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>解决a different object with the same identifier value was already associated with </title><link>http://www.blogjava.net/connie/articles/318700.html</link><dc:creator>嗜夜</dc:creator><author>嗜夜</author><pubDate>Sun, 18 Apr 2010 16:42:00 GMT</pubDate><guid>http://www.blogjava.net/connie/articles/318700.html</guid><wfw:comment>http://www.blogjava.net/connie/comments/318700.html</wfw:comment><comments>http://www.blogjava.net/connie/articles/318700.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/connie/comments/commentRss/318700.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/connie/services/trackbacks/318700.html</trackback:ping><description><![CDATA[拷贝别人的，问题就解决了<br />
<br />
这个错误我一共遇到过两次，一直没有找到很好的解决方案，这个错误产生原因相信大家都知道，因为在hibernate中同一个session里面有了两个
相同标识但是是不同实体，当这时运行saveOrUpdate(object)操作的时候就会报这个错误。呵呵，也许你会说，你这么说跟没说没什么区别，
我承认，呵呵，我不知道具体为什么会产生这个错误，要不然也不会很久都没有解决，现在，给出一个临时的解决方案，给向我一样，没有办法找到根源的人一个能
够继续执行下去的方法（当然是对的，只是不是从产生原因入手）
<br />
<br />
其实要解决这个问题很简单，只需要进行session.clean()操作就可以解决了，但是你在clean操作后面又进行了
saveOrUpdate(object)操作，有可能会报出"Found two representations of same
collection"，我找了很多资料，没有什么很好的解释，其中这篇文章帮助最大http://opensource.atlassian.com
/projects/hibernate/browse/HHH-509。
<br />
<br />
最后通过session.refresh(object)方法就可以解决了，注意，当object不是数据库中已有数据的对象的时候，不能使用
session.refresh(object)因为refresh是从hibernate的session中去重新取object，如果session
中没有这个对象，则会报错所以当你使用saveOrUpdate(object)之前还需要判断一下
<br />
<br />
当然这个问题最容易解决的办法还是使用Hibernate里面自带的merge()方法。不过我始终觉得碰到问题就用这种软件自带的非常用方法
（和saveOrUpdate()，save(),update()相比）感觉十分不爽。
<br />
<br />
后来我还发现这种错误经常出现在一对多映射和多对多映射，请大家在使用一对多和多对多映射的时候要小心一些
<br />
<br />
<br />
Category是树形结构，以下是实现修改功能的代码，一开始，我用了getHibernateTemplate().update()
<br />
<br />
结果出现a different object with the same identifier value was already
associated with the session
<br />
<br />
，上网查了查，使用了getSession().flush();
<br />
&nbsp; getSession().clear();
<br />
<br />
之后，另外一个问题出现了：Found two representations of same collection
<br />
<br />
于是乎，继续找办法解决，最后发现getHibernateTemplate().merge(category);
<br />
<br />
可以彻底解决问题，然而原理到底是如何，却是弄不明白。
<br />
<br />
//修改category<br />
&nbsp;&nbsp;&nbsp; public void updateCategory(Category category) {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //按照传进来的category，先把原有的category读取出来<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Category cc=(Category)getHibernateTemplate()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .get(Category.class, category.getId());<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //把原有的孩子拿到<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; category.setChildren(cc.getChildren());<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //把原有的父亲拿到<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; category.setParent(cc.getParent());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //保存修改<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getSession().flush();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getSession().clear();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //不要用update()方法<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getHibernateTemplate().merge(category);<br />
<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
<br />
<pre style="display: none;" name="code" class="java">//修改category
public void updateCategory(Category category) {
//按照传进来的category，先把原有的category读取出来
Category cc=(Category)getHibernateTemplate()
.get(Category.class, category.getId());
//把原有的孩子拿到
category.setChildren(cc.getChildren());
//把原有的父亲拿到
category.setParent(cc.getParent());
//保存修改
getSession().flush();
getSession().clear();
//不要用update()方法
getHibernateTemplate().merge(category);
}
</pre>
<img src ="http://www.blogjava.net/connie/aggbug/318700.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/connie/" target="_blank">嗜夜</a> 2010-04-19 00:42 <a href="http://www.blogjava.net/connie/articles/318700.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在Dreamweaver(DM)中创建jsp站点+Tomcat服务器</title><link>http://www.blogjava.net/connie/articles/314752.html</link><dc:creator>嗜夜</dc:creator><author>嗜夜</author><pubDate>Sun, 07 Mar 2010 07:17:00 GMT</pubDate><guid>http://www.blogjava.net/connie/articles/314752.html</guid><wfw:comment>http://www.blogjava.net/connie/comments/314752.html</wfw:comment><comments>http://www.blogjava.net/connie/articles/314752.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/connie/comments/commentRss/314752.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/connie/services/trackbacks/314752.html</trackback:ping><description><![CDATA[一、首先在Tomcat
5.5的webapps目录下建立一个test文件夹，作为站点根目录，将站点首页文件index.jsp放入此目录下，在test文件夹下建立一个
WEB-INF目录，里面放入web.xml文件，<br />
<br />
目录结构如下： <br />
<br />
<p> </p>
<p>[test] <br />
&nbsp;&nbsp;  index.jsp<br />
&nbsp;&nbsp;  [WEB-INF] <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  web.xml</p>
<p>web.xml文件内容如下：</p>
<p>&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;</p>
<p>&lt;web-app xmlns="http://java.sun.com/xml/ns/j2ee" <br />
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" <br />
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" <br />
version="2.4"&gt;</p>
<p>&lt;display-name&gt;Welcome Tomcat+Dreamweaver
Test&lt;/display-name&gt; <br />
&lt;description&gt; <br />
Welcome to Tomcat+Dreamweaver <br />
&lt;/description&gt;</p>
<p>&lt;/web-app&gt;<br />
<br />
这个目录结构就是一般WEB应用的标准目录结构。</p>
<div class="post">
<div class="postcontent"> </div>
</div>
<div class="userData"> </div>
<div style="display: none; color: red;" showsummary="False" showmessagebox="True"> </div>
<div>
<p><font face="宋体">二、启动Dreamweaver MX2004（在Dreamweaver8中也一样）<br />
<br />
先要新建一个站点，如下图所示操作：<br />
<br />
<img src="http://www.java3z.com/cwbwebhome/article/article4/22/dw1.gif" width="581" height="381"  alt="" /><br />
</font></p>
<p><font face="宋体">从管理站点选取新建站点：<br />
<br />
<img src="http://www.java3z.com/cwbwebhome/article/article4/22/dw2.gif" width="282" height="241"  alt="" /><br />
<br />
按如下向导进行，点击下一步进行：<br />
<br />
<img src="http://www.java3z.com/cwbwebhome/article/article4/22/dw3.gif" width="484" height="297"  alt="" /> <br />
<br />
<br />
<br />
<img src="http://www.java3z.com/cwbwebhome/article/article4/22/dw4.gif" width="508" height="244"  alt="" /> <br />
<br />
<br />
<img src="http://www.java3z.com/cwbwebhome/article/article4/22/dw5.gif" width="508" height="317"  alt="" /> <br />
<br />
<br />
<br />
<img src="http://www.java3z.com/cwbwebhome/article/article4/22/dw6.gif" width="508" height="225"  alt="" /> <br />
</font></p>
<p><font face="宋体"><br />
<img src="http://www.java3z.com/cwbwebhome/article/article4/22/dw7.gif" width="508" height="251"  alt="" /> </font></p>
<p><font face="宋体">测试URL可以是：<a href="http://localhost:8080/test">http://localhost:8080/test</a>
不能缺少:8080端口(tomcat默认的端口），如果你修改了端口，那么在这个地方就是你修改过的端口号；<br />
</font></p>
<p><font face="宋体"><br />
<img src="http://www.java3z.com/cwbwebhome/article/article4/22/dw8.gif" width="508" height="349"  alt="" /> <br />
<br />
</font></p>
<p><font face="宋体"><br />
站点创建完成后，Dreamweaver会将站点文件信息导入到Dreamweaver之中<br />
<br />
<img src="http://www.java3z.com/cwbwebhome/article/article4/22/dw10.gif" width="581" height="381"  alt="" /> <br />
<br />
双击站点中的文件jcs.jsp,Dreamweaver会打开此文件，我们可以对其编辑<br />
<br />
<br />
<img src="http://www.java3z.com/cwbwebhome/article/article4/22/dw12.gif" width="581" height="381"  alt="" /> <br />
<br />
<br />
编辑完成之后，启动Tomcat 5.5,并按键盘上的F12键，Dreamweaver将打开浏览器，显示jcs.jsp的内容。<br />
<br />
<img src="http://www.java3z.com/cwbwebhome/article/article4/22/dw13.gif" width="462" height="263"  alt="" /> </font></p>
</div>
<img src ="http://www.blogjava.net/connie/aggbug/314752.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/connie/" target="_blank">嗜夜</a> 2010-03-07 15:17 <a href="http://www.blogjava.net/connie/articles/314752.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse连接SQL SERVER 2000主要操作</title><link>http://www.blogjava.net/connie/articles/314061.html</link><dc:creator>嗜夜</dc:creator><author>嗜夜</author><pubDate>Sat, 27 Feb 2010 06:17:00 GMT</pubDate><guid>http://www.blogjava.net/connie/articles/314061.html</guid><wfw:comment>http://www.blogjava.net/connie/comments/314061.html</wfw:comment><comments>http://www.blogjava.net/connie/articles/314061.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/connie/comments/commentRss/314061.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/connie/services/trackbacks/314061.html</trackback:ping><description><![CDATA[<br />
<div>　　首先需要下一个SQL Server 2000 driver for JDBC，关于这些补丁的问题，判断是否可以用最重要一个条件就是在执行程序的时候是否会出现这个提示：Error establishing socket 。如果出现这个错误通常就是SQL Server 2000的补丁没打。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 然后就是把SQL Server 2000 driver for JDBC安装后生成的三个jar文件加到classpath中，这三个分别是msbase.jar mssqlserver.jar msutil.jar 然后再要做的一件事就是要让我们常用的IDE Eclipse知道这三个文件。方法如下：打开window菜单的perferences...子菜单，选择java / build path / user librarise，点击 NEW 随便输入名字（最好跟jar包相同，好看点，呵呵~~~）点击 ADD JARS... 选择这三个JAR文件中对应的那个。然后就是把这些jar包加入新建的工程中，方法如下：右键单击项目 选择 perferences 选择java build path 点击ADD Library 选择USER Library选择刚才建的 Library OK就好了，也可以在新建项目的时候就选择加入。最好再把下面这个程序copy过去，执行，显示&#8220;Connection Successful!&#8221;。至此，在Eclipse中连接SQL Server 2000完成，安心地做其他的工作。 <br />
测试程序： <br />
import java.sql.*; <br />
<br />
public class TestDB <br />
{ <br />
public static void main(String[] args) <br />
{ <br />
String driverName = "com.microsoft.jdbc.sqlserver.SQLServerDriver"; <br />
String dbURL = "jdbc:microsoft:sqlserver://localhost:1433; DatabaseName=pubs"; <br />
String userName = "sa"; <br />
String userPwd = ""; <br />
Connection dbConn = null; <br />
<br />
try <br />
{ <br />
Class.forName(driverName); <br />
dbConn = DriverManager.getConnection(dbURL, userName, userPwd); <br />
System.out.println("Connection Successful!"); <br />
} <br />
catch (Exception e) <br />
{ <br />
e.printStackTrace(); <br />
} <br />
} <br />
} </div>
<img src ="http://www.blogjava.net/connie/aggbug/314061.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/connie/" target="_blank">嗜夜</a> 2010-02-27 14:17 <a href="http://www.blogjava.net/connie/articles/314061.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Servlet与JavaBean比较</title><link>http://www.blogjava.net/connie/articles/313469.html</link><dc:creator>嗜夜</dc:creator><author>嗜夜</author><pubDate>Sat, 20 Feb 2010 08:15:00 GMT</pubDate><guid>http://www.blogjava.net/connie/articles/313469.html</guid><wfw:comment>http://www.blogjava.net/connie/comments/313469.html</wfw:comment><comments>http://www.blogjava.net/connie/articles/313469.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/connie/comments/commentRss/313469.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/connie/services/trackbacks/313469.html</trackback:ping><description><![CDATA[<table style="direction: ltr;" border="2" cellpadding="2" cellspacing="2" height="351" width="902">
    <tbody>
        <tr>
            <td>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
            </td>
            <td>&nbsp;Servlet</td>
            <td>&nbsp;JavaBean</td>
        </tr>
        <tr>
            <td>&nbsp;运行地点</td>
            <td>&nbsp;服务器端</td>
            <td>&nbsp;可以是客户端，也可以使服务器端</td>
        </tr>
        <tr>
            <td>&nbsp;运行角色</td>
            <td>&nbsp;控制组件 <br />
            </td>
            <td>&nbsp;业务逻辑组件 <br />
            </td>
        </tr>
        <tr align="left" valign="middle">
            <td>&nbsp;实现方式</td>
            <td>&nbsp;继承HttpServlet类</td>
            <td>&nbsp;对继承没有要求 <br />
            </td>
        </tr>
        <tr align="left" valign="middle">
            <td>&nbsp;属性</td>
            <td>&nbsp;不要求 <br />
            </td>
            <td>&nbsp;要求私有属性</td>
        </tr>
        <tr>
            <td>&nbsp;接口编写</td>
            <td>&nbsp;实现处理不同HTTP方法的接口，例如doGet是处理HTTP GET方法的接口<br />
            </td>
            <td>&nbsp;针对属性，有不同的设定及获取方法，例如set/get方法</td>
        </tr>
        <tr align="left" valign="middle">
            <td>&nbsp;加载方式</td>
            <td>&nbsp;修改web应用配置文件web.xml，可以在服务器启动时自动加载，也可以运行时加载</td>
            <td>&nbsp;在JSP页面通过&lt;jsp:useBean&gt;标签开始加载，若内存中有相关JavaBean对象，则直接进行引用，否则重新创建 <br />
            </td>
        </tr>
        <tr>
            <td valign="top">&nbsp;调用方式<br />
            </td>
            <td valign="top">&nbsp;当访问某个URL时，开始调用Servlet<br />
            </td>
            <td valign="top">&nbsp;直接调用<br />
            </td>
        </tr>
        <tr>
            <td valign="top">&nbsp;卸载方式<br />
            </td>
            <td valign="top">&nbsp;通常在服务器关闭时，进行卸载<br />
            </td>
            <td valign="top">&nbsp;有不同的有效期。page,request,session,application<br />
            </td>
        </tr>
    </tbody>
</table>
<br />
<img src ="http://www.blogjava.net/connie/aggbug/313469.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/connie/" target="_blank">嗜夜</a> 2010-02-20 16:15 <a href="http://www.blogjava.net/connie/articles/313469.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>tomcat配置</title><link>http://www.blogjava.net/connie/articles/313428.html</link><dc:creator>嗜夜</dc:creator><author>嗜夜</author><pubDate>Fri, 19 Feb 2010 16:22:00 GMT</pubDate><guid>http://www.blogjava.net/connie/articles/313428.html</guid><wfw:comment>http://www.blogjava.net/connie/comments/313428.html</wfw:comment><comments>http://www.blogjava.net/connie/articles/313428.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/connie/comments/commentRss/313428.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/connie/services/trackbacks/313428.html</trackback:ping><description><![CDATA[第一步：下载jdk和tomcat：JDK下载&nbsp; Tomcat下载<br />
&nbsp;&nbsp;&nbsp; 最新的jdk为1.6.10，tomcat为6.0，建议jdk1.4以上，tomcat4.0以上<br />
第二步：安装和配置你的jdk和tomcat：执行jdk和tomcat的安装程序，然后设置按照路径进行安装即可。<br />
1.安装jdk以后，需要配置一下环境变量，在我的电脑-&gt;属性-&gt;高级-&gt;环境变量-&gt;系统变量中添加以下环境变量<br />
<br />
(假定你的jdk安装在C:"Program Files"Java）： <br />
JAVA_HOME=C:"Program Files"Java"jdk1.6.0_10 <br />
classpath=.;%JAVA_HOME%"lib"dt.jar;%JAVA_HOME%"lib"tools.jar;（.;一定不能少，因为它代表当前路径) <br />
path=%JAVA_HOME%"bin <br />
<br />
&nbsp;接着可以写一个简单的java程序来测试JDK是否已安装成功： <br />
public class Test{ <br />
public static void main(String args[]){ <br />
System.out.println("This is a test program."); <br />
} <br />
} <br />
<br />
&nbsp;<br />
将上面的这段程序保存为文件名为Test.java的文件。 <br />
然后打开命令提示符窗口，cd到你的Test.java所在目录，然后键入下面的命令 &nbsp;<br />
javac Test.java <br />
java Test &nbsp;<br />
此时如果看到打印出来This is a test program.的话说明安装成功了，如果没有打印出这句话，你需要仔细检<br />
<br />
查一下你的配置情况。 <br />
<br />
2.安装Tomcat后，在我的电脑-&gt;属性-&gt;高级-&gt;环境变量-&gt;系统变量中添加以下环境变量(假定你的tomcat安装在<br />
<br />
c:"tomcat）： <br />
CATALINA_HOME：c:"tomcat<br />
CATALINA_BASE：c:"tomcat<br />
TOMCAT_HOME: C:"Tomcat<br />
然后修改环境变量中的classpath，把tomat安装目录下的common"lib下的servlet.jar追加到classpath中去，<br />
<br />
修改后的classpath如下： <br />
classpath=.;%JAVA_HOME%"lib"dt.jar;%JAVA_HOME%"lib"tools.jar;%CATALINA_HOME%"common"lib"servlet-<br />
<br />
api.jar; <br />
【注意最新版本的Tomcat中可能没有common这个文件夹了。所以servlet-api.jar应该的路径为<br />
%CATALINA_HOME%"lib"servlet-api.jar;请根据自己的情况自己修改！】<br />
接着可以启动tomcat，在IE中访问http://localhost:8080，如果看到tomcat的欢迎页面的话说明安装成功了。 <br />
第三步：建立自己的jsp app目录 <br />
1.到Tomcat的安装目录的webapps目录，可以看到ROOT，examples, tomcat-docs之类Tomcat自带的的目录； <br />
2.在webapps目录下新建一个目录，起名叫myapp； <br />
3.myapp下新建一个目录WEB-INF，注意，目录名称是区分大小写的； <br />
4.WEB-INF下新建一个文件web.xml，内容如下： <br />
&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt; <br />
<br />
&lt;!DOCTYPE web-app <br />
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" <br />
"http://java.sun.com/dtd/web-app_2_3.dtd"&gt; <br />
<br />
&lt;web-app&gt; <br />
&lt;display-name&gt;My Web Application&lt;/display-name&gt; <br />
&lt;description&gt; <br />
A application for test. <br />
&lt;/description&gt; <br />
&lt;/web-app&gt; <br />
<br />
&nbsp;<br />
<br />
5.在myapp下新建一个测试的jsp页面，文件名为index.jsp，文件内容如下： <br />
<br />
&lt;html&gt;<br />
&lt;body&gt;<br />
&lt;center&gt; <br />
Now time is: &lt;%=new java.util.Date()%&gt; <br />
&lt;/center&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt; <br />
&nbsp;<br />
<br />
6.重启Tomcat <br />
7.打开浏览器，输入http://localhost:8080/myapp/index.jsp 看到当前时间的话说明就成功了。<br />
<br />
第四步：<strong><span style="color: rgb(151, 104, 255);"><strong>建立自己的Servlet</strong></span></strong><br />
写入你的第一个Servlet:<br />
在你新建的Application myapp/WEB-INF/classes/test目录下新建HelloWorld.java<br />
<br />
package test;<br />
<br />
<br />
import java.io.*;<br />
&nbsp;import javax.servlet.*;<br />
&nbsp;import javax.servlet.http.*;<br />
&nbsp;public class HelloWorld extends HttpServlet<br />
&nbsp; {<br />
&nbsp;&nbsp;&nbsp; public void doGet(HttpServletRequest request,HttpServletResponse response)th<br />
rows ServletException,IOException<br />
&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; response.setContentType("text/html"); <br />
&nbsp;&nbsp;&nbsp; PrintWriter out = response.getWriter();<br />
&nbsp;&nbsp;&nbsp; out.println("&lt;html&gt;&lt;head&gt;&lt;title&gt;");<br />
&nbsp;&nbsp;&nbsp; out.println("This is my first Servlet");<br />
&nbsp;&nbsp;&nbsp; out.println("&lt;/title&gt;&lt;/head&gt;&lt;body&gt;");<br />
&nbsp;&nbsp;&nbsp; out.println("&lt;h1&gt;Hello,World!&lt;/h1&gt;");<br />
&nbsp;&nbsp;&nbsp; out.println("&lt;/body&gt;&lt;/html&gt;");<br />
&nbsp; &nbsp;<br />
&nbsp;&nbsp; }<br />
&nbsp;&nbsp; }<br />
&nbsp;<br />
<br />
然后照样用javac HelloWorld.java来编译这个文件，如果出现无法import javax.servl<br />
et.*<br />
&nbsp;&nbsp; 那么就是应该把C:"Tomcat"common"lib里面的servlet-api.jar文件拷贝到C:"JDK"jre"lib"ext中，再次编<br />
<br />
译，就没有问题了！<br />
&nbsp;&nbsp; 然后在Tomcat目录里面的C:"Tomcat"webapps"myapp里面按如下的文件结构：<br />
&nbsp;&nbsp; myapp"index.jsp<br />
&nbsp;&nbsp; myapp"WEB-INF"classes"test"HelloWorld.class(把上面生成的HelloWorld.class文件放在这个<br />
里面)<br />
&nbsp;然后在浏览器中输入http://localhost:8080/myapp/HelloWorld,于是Server众望所归的报错了:Error 404--<br />
<br />
Not Found <br />
&nbsp;怎么回事呢？<br />
Servlet必须使用C:"Tomcat"webapps"myapp"WEB-INF这个目录下面的web.xml文件进行注册，<br />
用EditPlus打开这个web.xml文件，<br />
在&lt;web-app&gt;&lt;/web-app&gt;添加下面这段程序:<br />
<br />
&lt;servlet&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;HelloWorld&lt;/servlet-name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;servlet-class&gt;test.HelloWorld&lt;/servlet-class&gt;<br />
&nbsp;&lt;/servlet&gt;<br />
&nbsp;&lt;servlet-mapping&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;HelloWorld&lt;/servlet-name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;url-pattern&gt;/HelloWorld&lt;/url-pattern&gt;<br />
&nbsp;&nbsp; &lt;/servlet-mapping&gt;<br />
&nbsp;<br />
<br />
&nbsp;为什么呢？<br />
&nbsp;因为 这样的结构<br />
&nbsp;&nbsp; &lt;servlet&gt;<br />
&nbsp;&nbsp; &lt;servlet-name&gt;HelloWorld&lt;/servlet-name&gt;<br />
&nbsp;&nbsp; &lt;servlet-class&gt;test.HelloWorld&lt;/servlet-class&gt;//类的路径<br />
&nbsp;&nbsp; &lt;/servlet&gt;<br />
表示指定包含的servlet类.<br />
而以下的结构<br />
&nbsp;&nbsp; &lt;servlet-mapping&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;HelloWorld&lt;/servlet-name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;url-pattern&gt;/HelloWorld&lt;/url-pattern&gt;<br />
&nbsp;&nbsp; &lt;/servlet-mapping&gt;<br />
&nbsp;表示指定HelloServlet应当映射到哪一种URL模式。<br />
<br />
在修改web.xml完毕过后，重新启动Server，然后再输入http://localhost:8080/myapp/HelloWorld,，那么偌<br />
<br />
大一个Hello,World!等<br />
着你呢，恭喜你!<br />
<br />
第五步：<strong><span style="color: rgb(151, 104, 255);"><strong>建立自己的java Bean</strong></span></strong><br />
<br />
1. 在你新建的Application myapp/WEB-INF/classes/test目录下新建TestBean.java<br />
<br />
package test;<br />
public class TestBean<br />
{<br />
&nbsp;&nbsp;&nbsp; private String name =null;<br />
&nbsp;&nbsp;&nbsp; public TestBean(String nameInit){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.name = nameInit;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public void setName(String newName){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.name=newName;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public String getName(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return this.name;<br />
&nbsp;&nbsp;&nbsp; }<br />
}<br />
&nbsp;<br />
<br />
然后照样用javac TestBean.java来编译这个文件。<br />
<br />
2.然后在你新建的应用程序目录myapp下新建一个新的jsp文件：testBean.jsp<br />
<br />
&lt;%@ page import="test.TestBean" %&gt;<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;title&gt;Test Bean&lt;/title&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;center&gt;<br />
&lt;%<br />
&nbsp;&nbsp; TestBean testBean = new TestBean("Http://yexin218.cublog.cn");<br />
&nbsp;%&gt;<br />
Java Bean Test:<br />
&nbsp;&nbsp;&nbsp; The author's blog address is&lt;%=testBean.getName()%&gt;<br />
&lt;/center&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;<br />
&nbsp;<br />
<br />
好了，确定各个文件的位置：<br />
<br />
myapp"index.jsp<br />
myapp"testBean.jsp<br />
myapp"WEB-INF"web.xml<br />
myapp"WEB-INF"classes"test"HelloWorld.class<br />
myapp"WEB-INF"classes"test"TestBean.class<br />
&nbsp;<br />
<br />
3.重启Tomcat如果需要的话，在浏览器输入:http://localhost:8080/myapp/testBean.jsp 幸运的话就会看到:<br />
<br />
Java Bean Test: The author's blog address isHttp://yexin218.cublog.cn <br />
<br />
这样就完成了整个Tomcat下的jsp、servlet和javabean的配置。 <br />
<br />
第六步：配置虚拟目录<br />
<br />
打开 Tomcat6.0"conf"server.xml 文件，在 &lt;Host&gt; 和 &lt;/Host&gt; 之间加入<br />
<br />
&lt;Context path="/myapp" docBase="D:"myapp" debug="0" reloadable="true" crossContext="true" /&gt;<br />
<img src ="http://www.blogjava.net/connie/aggbug/313428.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/connie/" target="_blank">嗜夜</a> 2010-02-20 00:22 <a href="http://www.blogjava.net/connie/articles/313428.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>servlet</title><link>http://www.blogjava.net/connie/articles/313420.html</link><dc:creator>嗜夜</dc:creator><author>嗜夜</author><pubDate>Fri, 19 Feb 2010 11:57:00 GMT</pubDate><guid>http://www.blogjava.net/connie/articles/313420.html</guid><wfw:comment>http://www.blogjava.net/connie/comments/313420.html</wfw:comment><comments>http://www.blogjava.net/connie/articles/313420.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/connie/comments/commentRss/313420.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/connie/services/trackbacks/313420.html</trackback:ping><description><![CDATA[Servlet是一种服务器端的Java应用程序，具有独立于平台和协议的特性,可以生成动态的Web页面。
它担当客户请求（Web浏览器或其他HTTP客户程序）与服务器响应（HTTP服务器上的数据库或应用程序）的中间层。 Servlet是位于Web
服务器内部的服务器端的Java应用程序，与传统的从命令行启动的Java应用程序不同，Servlet由Web服务器进行加载，该Web服务器必须包含
支持Servlet的Java虚拟机。<br />
<br />
<h2>servlet的工作模式</h2>
客户端发送请求至服务器 <br />
服务器启动并调用Servlet，Servlet根据客户端请求生成响应内容并将其传给服务器 <br />
服务器将响应返回客户端<br />
<br />
<h2 class="">Java Servlet 与 Applet 的比较</h2>
<strong>相似之处： </strong><br />
* 它们不是独立的应用程序，没有main()方法。 <br />
* 它们不是由用户或程序员调用，而是由另外一个应用程序(容器)调用。 <br />
* 它们都有一个生存周期，包含init()和destroy()方法。 <br />
<strong>不同之处：</strong> <br />
* <a target="_blank" href="http://baike.baidu.com/view/150834.htm">Applet</a>具有很好的图形界面(AWT)，与浏览器一起，在客户端运行。 <br />
* Servlet 则没有图形界面，运行在服务器端。<br />
<br />
<h2 class="">与传统CGI的比较</h2>
与传统的CGI和许多其他类似CGI的技术相比，Java Servlet具有更高的效率，更容易使用，功能更强大，具有更好的可移植性，更节省投资。在未来的技术发展过程中，Servlet有可能彻底取代CGI。<br />
在传统的<a target="_blank" href="http://baike.baidu.com/view/32614.htm">CGI</a>中，每个请求都要启动一个新的进程，如果CGI程序本身的执行时间较短，启动进程所需要的开销很可能反而超过实际执行时间。而在Servlet中，每个请求由一个轻量级的Java线程处理(而不是重量级的操作系统进程)。 <br />
在传统CGI中，如果有N个并发的对同一CGI程序的请求，则该CGI程序的代码在内存中重复装载了N次；而对于Servlet，处理请求的是N个线程，只需要一份Servlet类代码。在性能优化方面，Servlet也比CGI有着更多的选择。 <br />
<br />
<h2 class="">Java Servlet 与 JSP 的比较</h2>
JavaServer Pages(<a target="_blank" href="http://baike.baidu.com/view/3387.htm">JSP</a>)
是一种实现普通静态HTML和动态HTML混合编码的技术，JSP并没有增加任何本质上不能用Servlet实现的功能。但是，在JSP中编写静态
HTML更加方便，不必再用println语句来输出每一行HTML代码。更重要的是，借助内容和外观的分离，页面制作中不同性质的任务可以方便地分开：
比如，由页面设计者进行HTML设计，同时留出供Servlet程序员插入动态内容的空间。<br />
<br />
<strong>doGet()方法</strong><br />
当一个客户通过HTML 表单发出一个HTTP GET请求或直接请求一个URL时，doGet()方法被调用。与GET请求相关的参数添加到URL的后面，并与这个请求一起发送。当不会修改服务器端的数据时，应该使用doGet()方法。<br />
<br />
<strong>doPost()方法</strong><br />
当一个客户通过HTML 表单发出一个HTTP POST请求时，doPost()方法被调用。与POST请求相关的参数作为一个单独的HTTP 请求从浏览器发送到服务器。当需要修改服务器端的数据时，应该使用doPost()方法。<br />
<img src ="http://www.blogjava.net/connie/aggbug/313420.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/connie/" target="_blank">嗜夜</a> 2010-02-19 19:57 <a href="http://www.blogjava.net/connie/articles/313420.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSP的重定向有两种：forward和sendRedirect</title><link>http://www.blogjava.net/connie/articles/313166.html</link><dc:creator>嗜夜</dc:creator><author>嗜夜</author><pubDate>Tue, 16 Feb 2010 07:17:00 GMT</pubDate><guid>http://www.blogjava.net/connie/articles/313166.html</guid><wfw:comment>http://www.blogjava.net/connie/comments/313166.html</wfw:comment><comments>http://www.blogjava.net/connie/articles/313166.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/connie/comments/commentRss/313166.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/connie/services/trackbacks/313166.html</trackback:ping><description><![CDATA[一、原理.<br />
1、 Forward<br />
这种方式是在服务器端作的重定向。服务器往client发送数据的过程是这样的：服务器在向客户端发送数据之前，是先将数据输出到缓冲区，然后将缓冲区中数据发送给client端。什么时候将缓冲区里的数据发送给client端呢？（1）当对来自client的request处理完，并把所有数据输出到缓冲区，（2）当缓冲区满，（3）在程序中调用缓冲区的输出方法out.flush()或 response.flushbuffer()，web container才将缓冲区中的数据发送给client。<br />
这种重定向方式是利用服务器端的缓冲区机制，在把缓冲区的数据发送到客户端之前，原来的数据不发送，将执行转向重定向页面，发送重定向页面的数据，重定向调用页的数据将被清除。如果在&lt;JSP:FORWORD&gt;之前有很多输出，前面的输出已使缓冲区满，将自动输出到客户端，那么这种重定向方式将不起作用，这一点应该特别注意。<br />
public void doPost(HttpServletRequest request,HttpServletResponse response)&nbsp; throws ServletException,IOException<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; response.setContentType("text/html; charset=UTF-8");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ServletContext sc = getServletContext();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RequestDispatcher rd = null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rd = sc.getRequestDispatcher("/index.jsp");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rd.forward(request, response);<br />
}<br />
2、 sendRedirect<br />
这种方式是在客户端作的重定向处理。该方法通过修改HTTP协议的HEADER部分,对浏览器下达重定向指令的，让浏览器对在location中指定的URL提出请求，使浏览器显示重定向网页的内容。该方法可以接受绝对的或相对的URLs。如果传递到该方法的参数是一个相对的URL，那么Web container在将它发送到客户端前会把它转换成一个绝对的URL。public void doPost(HttpServletRequest request,HttpServletResponse response)&nbsp;&nbsp; throws ServletException,IOException<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; response.setContentType("text/html; charset=UTF-8");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; response.sendRedirect("/index.jsp");<br />
}<br />
&nbsp;<br />
二、区别.<br />
1、forward重定向是在容器内部实现的同一个Web应用程序的重定向，所以forward方法只能重定向到同一个Web应用程序中的一个资源，重定向后浏览器地址栏URL不变，而sendRedirect方法可以重定向到任何URL， 因为这种方法是修改http头来实现的，URL没什么限制，重定向后浏览器地址栏URL改变。<br />
2、forward重定向将原始的HTTP请求对象（request）从一个servlet实例传递到另一个实例，而采用sendRedirect方式两者不是同一个application。<br />
3、基于第二点，参数的传递方式不一样。forward的form参数跟着传递，所以在第二个实例中可以取得HTTP请求的参数。sendRedirect只能通过链接传递参数，response.sendRedirect(&#8220;login.jsp?param1=a&#8221;)。<br />
4、sendRedirect能够处理相对URL，自动把它们转换成绝对URL，如果地址是相对的，没有一个&#8216;/&#8217;，那么Web container就认为它是相对于当前的请求URI的。比如，如果为response.sendRedirect("login.jsp")，则会从当前servlet 的URL路径下找login.jsp： http://10.1.18.8:8081/dms/servlet/Servlet 重定向的URL: http://10.1.18.8:8081/dms/servlet/login.jsp，如果为response.sendRedirect("/login.jsp")则会从当前应用径下查找url:http://10.1.18.8:8081/login.jsp。而forward不能这样处理相对路径。<br />
<img src ="http://www.blogjava.net/connie/aggbug/313166.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/connie/" target="_blank">嗜夜</a> 2010-02-16 15:17 <a href="http://www.blogjava.net/connie/articles/313166.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jsp中的对象 详解</title><link>http://www.blogjava.net/connie/articles/313164.html</link><dc:creator>嗜夜</dc:creator><author>嗜夜</author><pubDate>Tue, 16 Feb 2010 06:07:00 GMT</pubDate><guid>http://www.blogjava.net/connie/articles/313164.html</guid><wfw:comment>http://www.blogjava.net/connie/comments/313164.html</wfw:comment><comments>http://www.blogjava.net/connie/articles/313164.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/connie/comments/commentRss/313164.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/connie/services/trackbacks/313164.html</trackback:ping><description><![CDATA[<div class="cnt">
<p>1.request对象</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 客户端的请求信息被封装在request对象中，通过它才能了解到客户的需求，然后做出响应。它是HttpServletRequest类的实例。</p>
<p>序号 方 法 说 明 <br />
1&nbsp;&nbsp; object getAttribute(String name) 返回指定属性的属性值 <br />
2&nbsp;&nbsp; Enumeration getAttributeNames() 返回所有可用属性名的枚举 <br />
3&nbsp;&nbsp; String getCharacterEncoding() 返回字符编码方式 <br />
4&nbsp;&nbsp; int getContentLength() 返回请求体的长度（以字节数） <br />
5&nbsp;&nbsp; String getContentType() 得到请求体的MIME类型 <br />
6&nbsp;&nbsp; ServletInputStream getInputStream() 得到请求体中一行的二进制流 <br />
7&nbsp;&nbsp; String getParameter(String name) 返回name指定参数的参数值 <br />
8&nbsp;&nbsp; Enumeration getParameterNames() 返回可用参数名的枚举 <br />
9&nbsp;&nbsp; String[] getParameterValues(String name) 返回包含参数name的所有值的数组 <br />
10&nbsp;&nbsp; String getProtocol() 返回请求用的协议类型及版本号 <br />
11&nbsp;&nbsp; String getScheme() 返回请求用的计划名,如:http.https及ftp等 <br />
12&nbsp;&nbsp; String getServerName() 返回接受请求的服务器主机名 <br />
13&nbsp;&nbsp; int getServerPort() 返回服务器接受此请求所用的端口号 <br />
14&nbsp;&nbsp; BufferedReader getReader() 返回解码过了的请求体 <br />
15&nbsp;&nbsp; String getRemoteAddr() 返回发送此请求的客户端IP地址 <br />
16&nbsp;&nbsp; String getRemoteHost() 返回发送此请求的客户端主机名 <br />
17&nbsp;&nbsp; void setAttribute(String key,Object obj) 设置属性的属性值 <br />
18&nbsp;&nbsp; String getRealPath(String path) 返回一虚拟路径的真实路径 <br />
19&nbsp;&nbsp; String getMethod() 返回本次请求的HTTP方法，如GET、POST等。默认为GET。<br />
20&nbsp;&nbsp; String getRequestURL() 返回访问的URL。<br />
<br />
</p>
<p>&lt;%@ page contentType="text/html;charset=gb2312"%&gt;<br />
&lt;%request.setCharacterEncoding("gb2312");%&gt;<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;title&gt;request对象_例1&lt;/title&gt;<br />
&lt;/head&gt;<br />
&lt;body bgcolor="#FFFFF0"&gt;<br />
&lt;form action="" method="post"&gt;<br />
&nbsp;&nbsp; &lt;input type="text" name="qwe"&gt;<br />
&nbsp;&nbsp; &lt;input type="submit" value="提交"&gt;<br />
&lt;/form&gt;<br />
请求方式：&lt;%=request.getMethod()%&gt;&lt;br&gt;<br />
请求的资源：&lt;%=request.getRequestURI()%&gt;&lt;br&gt;<br />
请求用的协议：&lt;%=request.getProtocol()%&gt;&lt;br&gt;<br />
请求的文件名：&lt;%=request.getServletPath()%&gt;&lt;br&gt;<br />
请求的服务器的IP：&lt;%=request.getServerName()%&gt;&lt;br&gt;<br />
请求服务器的端口：&lt;%=request.getServerPort()%&gt;&lt;br&gt;<br />
客户端IP地址：&lt;%=request.getRemoteAddr()%&gt;&lt;br&gt;<br />
客户端主机名：&lt;%=request.getRemoteHost()%&gt;&lt;br&gt;<br />
表单提交来的值：&lt;%=request.getParameter("qwe")%&gt;&lt;br&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt; <br />
&lt;%@ page contentType="text/html;charset=gb2312"%&gt;<br />
&lt;%request.setCharacterEncoding("gb2312");%&gt;<br />
&lt;%@ page import="java.util.Enumeration"%&gt;<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&nbsp;&nbsp; &lt;title&gt;request对象_例2&lt;/title&gt;<br />
&lt;/head&gt;<br />
&lt;body bgcolor="#FFFFF0"&gt;<br />
&lt;form action="" method="post"&gt;<br />
&nbsp;&nbsp;&nbsp; 用户名：&lt;input type="text" name="username"&gt;&amp;nbsp;&amp;nbsp;<br />
&nbsp;&nbsp;&nbsp; 密 码：&lt;input type="text" name="userpass"&gt;&amp;nbsp;&amp;nbsp;<br />
&nbsp;&nbsp;&nbsp; &lt;input type="submit" value="进入" &gt;<br />
&lt;/form&gt;<br />
&lt;%<br />
String str="";<br />
if(request.getParameter("username")!=null &amp;&amp; request.getParameter("userpass")!=null){<br />
&nbsp;&nbsp;&nbsp; Enumeration enumt = request.getParameterNames();<br />
&nbsp;&nbsp;&nbsp; while(enumt.hasMoreElements()){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; str=enumt.nextElement().toString();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.println(str+":"+request.getParameter(str)+"&lt;br&gt;");<br />
&nbsp;&nbsp;&nbsp; }<br />
}<br />
%&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt; <br />
&lt;%@ page contentType="text/html;charset=gb2312"%&gt;<br />
&lt;%request.setCharacterEncoding("gb2312");%&gt;<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;title&gt;request对象_例3&lt;/title&gt;<br />
&lt;/head&gt;<br />
&lt;body bgcolor="#FFFFF0"&gt;<br />
&lt;form action="" method="post"&gt;<br />
&nbsp;&nbsp; 擅长：&lt;input type="checkbox" name="cb" value="VC++"&gt;VC++&amp;nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input type="checkbox" name="cb" value="JAVA"&gt;JAVA&amp;nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input type="checkbox" name="cb" value="DELPHI"&gt;DELPHI&amp;nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input type="checkbox" name="cb" value="VB"&gt;VB&amp;nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;br&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input type="submit" value="进入" name="qwe"&gt;<br />
&lt;/form&gt;<br />
&lt;%<br />
if(request.getParameter("qwe")!=null ){<br />
&nbsp;&nbsp;&nbsp; for(int i=0;i&lt;request.getParameterValues("cb").length;i++){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.println("cb"+i+":"+request.getParameterValues("cb")[i]+"&lt;br&gt;");<br />
&nbsp;&nbsp;&nbsp; }<br />
}<br />
%&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt; <br />
<br />
</p>
<p>2.response对象</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; response对象包含了响应客户请求的有关信息，但在JSP中很少直接用到它。它是HttpServletResponse类的实例。</p>
<p>序号 方 法 说 明 <br />
1&nbsp;&nbsp; String getCharacterEncoding() 返回响应用的是何种字符编码 <br />
2&nbsp;&nbsp; ServletOutputStream getOutputStream() 返回响应的一个二进制输出流 <br />
3&nbsp;&nbsp; PrintWriter getWriter() 返回可以向客户端输出字符的一个对象 <br />
4&nbsp;&nbsp; void setContentLength(int len) 设置响应头长度 <br />
5&nbsp;&nbsp; void setContentType(String type) 设置响应的MIME类型 <br />
6&nbsp;&nbsp; sendRedirect(java.lang.String location) 重新定向客户端的请求 <br />
7&nbsp;&nbsp; setHeader(java.lang.String name, java.lang.String value)&nbsp; 设置一个指定的报头及其值。<br />
8&nbsp;&nbsp; addCookie(Cookie cookie)&nbsp; 天骄一个Cookie对象，将相关信息以Cookie形式保存到客户端。<br />
</p>
<p>&lt;%@ page language="java" contentType="text/html; charset=gb2312"%&gt;<br />
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&gt;<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"&gt;<br />
&lt;title&gt;Insert title here&lt;/title&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;table border="0"&gt;<br />
&lt;%<br />
response.setHeader("Pragma","No=cache");<br />
response.setHeader("Cache-Control","no-cache");<br />
response.setHeader("Expores","0");<br />
response.setHeader("Refresh","2");<br />
Integer i =(Integer)session.getAttribute("num");<br />
int m=1;<br />
if(i!=null){<br />
&nbsp;&nbsp;&nbsp; m=i.intValue();<br />
&nbsp;&nbsp;&nbsp; m++;<br />
}<br />
Integer j = new Integer(m);<br />
session.setAttribute("num",j);<br />
String str="";<br />
for(int k=0;k&lt;m;k++){<br />
&nbsp;&nbsp;&nbsp; str="*";<br />
&nbsp;&nbsp;&nbsp; for(int n =0;n&lt;k;n++){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; str+="*";<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; %&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;tr&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;td align="center"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;%=str %&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/tr&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;%<br />
}<br />
%&gt;<br />
&lt;/table&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;<br />
</p>
<p>3.session对象</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; session对象指的是客户端与服务器的一次会话，从客户连到服务器的一个WebApplication开始，直到客户端与服务器断开连接为止。它是HttpSession类的实例.</p>
<p>序号 方 法 说 明 <br />
1&nbsp;&nbsp; long getCreationTime() 返回SESSION创建时间<br />
2&nbsp;&nbsp; public String getId() 返回SESSION创建时JSP引擎为它设的惟一ID号<br />
3&nbsp;&nbsp; long getLastAccessedTime() 返回此SESSION里客户端最近一次请求时间<br />
4&nbsp;&nbsp; int getMaxInactiveInterval() 返回两次请求间隔多长时间此SESSION被取消(ms)<br />
5&nbsp;&nbsp; String[] getValueNames() 返回一个包含此SESSION中所有可用属性的数组<br />
6&nbsp;&nbsp; void invalidate() 取消SESSION，使SESSION不可用<br />
7&nbsp;&nbsp; boolean isNew() 返回服务器创建的一个SESSION,客户端是否已经加入<br />
8&nbsp;&nbsp; void removeValue(String name) 删除SESSION中指定的属性<br />
9&nbsp;&nbsp; void setMaxInactiveInterval() 设置两次请求间隔多长时间此SESSION被取消(ms) <br />
10&nbsp; void setAttribute(java.lang.String name, java.lang.Object value)&nbsp; 向session中添加一个属性及其值，这个属性值可以是一个对象<br />
11&nbsp; void getAttribute(java.lang.String name)&nbsp; 返回一个session中指定属性名的属性值对象<br />
&nbsp;&nbsp;&nbsp;&nbsp; 　 </p>
<p>&lt;%@ page contentType="text/html;charset=gb2312"%&gt;<br />
&lt;%@ page import="java.util.*" %&gt;<br />
&lt;html&gt;<br />
&lt;head&gt;&lt;title&gt;session对象_例1&lt;/title&gt;&lt;head&gt;<br />
&lt;body&gt;&lt;br&gt;<br />
&nbsp;&nbsp;&nbsp;
session的创建时间:&lt;%=session.getCreationTime()%&gt;&amp;nbsp;&amp;nbsp;&amp;
lt;%=new Date(session.getCreationTime())%&gt;&lt;br&gt;&lt;br&gt;<br />
&nbsp;&nbsp;&nbsp; session的Id号:&lt;%=session.getId()%&gt;&lt;br&gt;&lt;br&gt;<br />
&nbsp;&nbsp;&nbsp;
客户端最近一次请求时间:&lt;%=session.getLastAccessedTime()%&gt;&amp;nbsp;&amp;
nbsp;&lt;%=new java.sql.
Time(session.getLastAccessedTime())%&gt;&lt;br&gt;&lt;br&gt;<br />
&nbsp;&nbsp;&nbsp; 两次请求间隔多长时间此SESSION被取消(ms):&lt;%=session.getMaxInactiveInterval()%&gt;&lt;br&gt;&lt;br&gt;<br />
&nbsp;&nbsp;&nbsp; 是否是新创建的一个SESSION:&lt;%=session.isNew()?"是":"否"%&gt;&lt;br&gt;&lt;br&gt;<br />
&lt;%<br />
&nbsp;&nbsp; session.putValue("name","7777777");<br />
&nbsp;&nbsp; session.putValue("nmber","147369");<br />
%&gt;<br />
&lt;%<br />
&nbsp;&nbsp; for(int i=0;i&lt;session.getValueNames().length;i++)<br />
&nbsp;&nbsp; out.println(session.getValueNames()[i]+"="+session.getValue(session.getValueNames()[i]));<br />
%&gt;<br />
&lt;!--返回的是从格林威治时间(GMT)1970年01月01日0：00：00起到计算当时的毫秒数--&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt; <br />
&nbsp;</p>
<p>4.out对象</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; out对象是JspWriter类的实例,是向客户端输出内容常用的对象</p>
<p>序号 方 法 说 明 <br />
1&nbsp;&nbsp; void clear() 清除缓冲区的内容 <br />
2&nbsp;&nbsp; void clearBuffer() 清除缓冲区的当前内容 <br />
3&nbsp;&nbsp; void flush() 清空流 <br />
4&nbsp;&nbsp; int getBufferSize() 返回缓冲区以字节数的大小，如不设缓冲区则为0 <br />
5&nbsp;&nbsp; int getRemaining() 返回缓冲区还剩余多少可用 <br />
6&nbsp;&nbsp; boolean isAutoFlush() 返回缓冲区满时，是自动清空还是抛出异常 <br />
7&nbsp;&nbsp; void close() 关闭输出流 <br />
&nbsp;&nbsp;&nbsp;&nbsp; 　 </p>
<p>&lt;<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#37;&#64;&#112;&#97;&#103;&#101;">%@page</a> contentType="text/html;charset=gb2312"%&gt;<br />
&lt;html&gt;&lt;head&gt;&lt;title&gt;out对象_例1:缓存测试&lt;/title&gt;&lt;/head&gt;<br />
&lt;<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#37;&#64;&#112;&#97;&#103;&#101;">%@page</a> buffer="1kb"%&gt;<br />
&lt;body&gt;<br />
&lt;%<br />
&nbsp;&nbsp; for(int i=0;i&lt;2000;i++)<br />
&nbsp;&nbsp; out.println(i+"{"+out.getRemaining()+"}");<br />
%&gt;&lt;br&gt;<br />
缓存大小：&lt;%=out.getBufferSize()%&gt;&lt;br&gt;<br />
剩余缓存大小：&lt;%=out.getRemaining()%&gt;&lt;br&gt;<br />
自动刷新：&lt;%=out.isAutoFlush()%&gt;&lt;br&gt;<br />
&lt;%--out.clearBuffer();--%&gt;<br />
&lt;%--out.clear();--%&gt;<br />
&lt;!--缺省情况下:服务端要输出到客户端的内容,不直接写到客户端,而是先写到一个输出缓冲区中.只有在下面三中情况下，才会把该缓冲区的内容输出到客户端上： <br />
1.该JSP网页已完成信息的输出 <br />
2.输出缓冲区已满 <br />
3.JSP中调用了out.flush()或response.flushbuffer() <br />
--&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt; <br />
<br />
<br />
</p>
<p>5.page对象</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; page对象就是指向当前JSP页面本身，有点象类中的this指针，它是java.lang.Object类的实例</p>
<p>序号 方 法 说 明 <br />
1&nbsp;&nbsp; class getClass 返回此Object的类 <br />
2&nbsp;&nbsp; int hashCode() 返回此Object的hash码 <br />
3&nbsp;&nbsp; boolean equals(Object obj) 判断此Object是否与指定的Object对象相等 <br />
4&nbsp;&nbsp; void copy(Object obj) 把此Object拷贝到指定的Object对象中 <br />
5&nbsp;&nbsp; Object clone() 克隆此Object对象 <br />
6&nbsp;&nbsp; String toString() 把此Object对象转换成String类的对象 <br />
7&nbsp;&nbsp; void notify() 唤醒一个等待的线程 <br />
8&nbsp;&nbsp; void notifyAll() 唤醒所有等待的线程 <br />
9&nbsp;&nbsp; void wait(int timeout) 使一个线程处于等待直到timeout结束或被唤醒 <br />
10&nbsp;&nbsp; void wait() 使一个线程处于等待直到被唤醒 <br />
11&nbsp;&nbsp; void enterMonitor() 对Object加锁 <br />
12&nbsp;&nbsp; void exitMonitor() 对Object开锁 <br />
&nbsp;&nbsp;&nbsp;&nbsp; 　 </p>
<p>6.application对象</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;
application对象实现了用户间数据的共享，可存放全局变量。它开始于服务器的启动，直到服务器的关闭，在此期间，此对象将一直存在；这样在用户
的前后连接或不同用户之间的连接中，可以对此对象的同一属性进行操作；在任何地方对此对象属性的操作，都将影响到其他用户对此的访问。服务器的启动和关闭
决定了application对象的生命。它是ServletContext类的实例。</p>
<p>序号 方 法 说 明 <br />
1&nbsp;&nbsp; Object getAttribute(String name) 返回给定名的属性值 <br />
2&nbsp;&nbsp; Enumeration getAttributeNames() 返回所有可用属性名的枚举 <br />
3&nbsp;&nbsp; void setAttribute(String name,Object obj) 设定属性的属性值 <br />
4&nbsp;&nbsp; void removeAttribute(String name) 删除一属性及其属性值 <br />
5&nbsp;&nbsp; String getServerInfo() 返回JSP(SERVLET)引擎名及版本号 <br />
6&nbsp;&nbsp; String getRealPath(String path) 返回一虚拟路径的真实路径 <br />
7&nbsp;&nbsp; ServletContext getContext(String uripath) 返回指定WebApplication的application对象 <br />
8&nbsp;&nbsp; int getMajorVersion() 返回服务器支持的Servlet API的最大版本号 <br />
9&nbsp;&nbsp; int getMinorVersion() 返回服务器支持的Servlet API的最大版本号 <br />
10&nbsp;&nbsp; String getMimeType(String file) 返回指定文件的MIME类型 <br />
11&nbsp;&nbsp; URL getResource(String path) 返回指定资源(文件及目录)的URL路径 <br />
12&nbsp;&nbsp; InputStream getResourceAsStream(String path) 返回指定资源的输入流 <br />
13&nbsp;&nbsp; RequestDispatcher getRequestDispatcher(String uripath) 返回指定资源的RequestDispatcher对象 <br />
14&nbsp;&nbsp; Servlet getServlet(String name) 返回指定名的Servlet <br />
15&nbsp;&nbsp; Enumeration getServlets() 返回所有Servlet的枚举 <br />
16&nbsp;&nbsp; Enumeration getServletNames() 返回所有Servlet名的枚举 <br />
17&nbsp;&nbsp; void log(String msg) 把指定消息写入Servlet的日志文件 <br />
18&nbsp;&nbsp; void log(Exception exception,String msg) 把指定异常的栈轨迹及错误消息写入Servlet的日志文件 <br />
19&nbsp;&nbsp; void log(String msg,Throwable throwable) 把栈轨迹及给出的Throwable异常的说明信息 写入Servlet的日志文件 <br />
<br />
</p>
<p>&lt;%@ page contentType="text/html;charset=gb2312"%&gt;<br />
&lt;html&gt;<br />
&lt;head&gt;&lt;title&gt;APPLICATION对象_例1&lt;/title&gt;&lt;head&gt;<br />
&lt;body&gt;&lt;br&gt;<br />
JSP(SERVLET)引擎名及版本号:&lt;%=application.getServerInfo()%&gt;&lt;br&gt;&lt;br&gt;<br />
返回/application1.jsp虚拟路径的真实路径:&lt;%=application.getRealPath("/application1.jsp")%&gt;&lt;br&gt;&lt;br&gt;<br />
服务器支持的Servlet API的大版本号:&lt;%=application.getMajorVersion()%&gt;&lt;br&gt;&lt;br&gt;<br />
服务器支持的Servlet API的小版本号:&lt;%=application.getMinorVersion()%&gt;&lt;br&gt;&lt;br&gt;<br />
指定资源(文件及目录)的URL路径:&lt;%=application.getResource("/cookie.jsp")%&gt;<br />
&lt;%<br />
application.setAttribute("name","*****");<br />
out.println(application.getAttribute("name"));<br />
application.removeAttribute("name");<br />
out.println(application.getAttribute("name"));<br />
%&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt; <br />
<br />
&lt;%@ page contentType="text/html;charset=gb2312"%&gt;<br />
&lt;html&gt;<br />
&lt;head&gt;&lt;title&gt;APPLICATION对象_例2&lt;/title&gt;&lt;head&gt;<br />
&lt;body&gt;&lt;br&gt;<br />
&lt;!--由于application一直存在于服务器端，可以利用此特性对网页记数--&gt;<br />
&lt;%<br />
if(application.getAttribute("count")==null)<br />
application.setAttribute("count","1");<br />
else<br />
application.setAttribute("count",Integer.toString(Integer.valueOf(application.getAttribute("count").toString()).intValue()+1));<br />
%&gt;<br />
你是第&lt;%=application.getAttribute("count")%&gt;位访问者<br />
&lt;/body&gt;<br />
&lt;!--由于getAttribute()方法得到的是一个Object类型对象,用getString()方法转化为String类型--&gt;<br />
&lt;!--用Integer类的valueOf()方法把得到的String转化成Integer的对象,在用intValue()方法得到int
型,再加1,最后把计算的结果用Integer.toString()方法转化成setAttribute()方法所要求的String类型--&gt;<br />
&lt;/html&gt; <br />
&lt;%@ page contentType="text/html;charset=gb2312"%&gt;<br />
&lt;html&gt;<br />
&lt;head&gt;&lt;title&gt;APPLICATION对象_例3&lt;/title&gt;&lt;head&gt;<br />
&lt;body&gt;&lt;br&gt;<br />
&lt;!--由于application一直存在于服务器端，可以利用此特性对网页记数--&gt;<br />
&lt;%<br />
String str=application.getAttribute("count").toString();//getAttribute("count")返回的是Object类型<br />
int i=0;<br />
if(str==null)<br />
application.setAttribute("count","1");<br />
else<br />
i=Integer.parseInt(str); //out.println(i);<br />
application.setAttribute("count",++i+"");<br />
%&gt;<br />
你是第&lt;%=application.getAttribute("count")%&gt;位访问者<br />
&lt;/body&gt;<br />
&lt;/html&gt; <br />
</p>
<p>7.exception对象</p>
<p>&nbsp;&nbsp; exception对象是一个例外对象，当一个页面在运行过程中发生了例外，就产生这个对象。如果一个JSP页面要应用此对象，就必须把isErrorPage设为true，否则无法编译。他实际上是java.lang.Throwable的对象</p>
<p>序号 方 法 说 明 <br />
1&nbsp;&nbsp; String getMessage() 返回描述异常的消息 <br />
2&nbsp;&nbsp; String toString() 返回关于异常的简短描述消息 <br />
3&nbsp;&nbsp; void printStackTrace() 显示异常及其栈轨迹 <br />
4&nbsp;&nbsp; Throwable FillInStackTrace() 重写异常的执行栈轨迹&nbsp;</p>
<p>8.pageContext对象</p>
<p>&nbsp;&nbsp;&nbsp;
pageContext对象提供了对JSP页面内所有的对象及名字空间的访问，也就是说他可以访问到本页所在的SESSION，也可以取本页面所在的
application的某一属性值，他相当于页面中所有功能的集大成者，它的本 类名也叫pageContext。</p>
<p>序号 方 法 说 明 <br />
1&nbsp;&nbsp; JspWriter getOut() 返回当前客户端响应被使用的JspWriter流(out) <br />
2&nbsp;&nbsp; HttpSession getSession() 返回当前页中的HttpSession对象(session) <br />
3&nbsp;&nbsp; Object getPage() 返回当前页的Object对象(page) <br />
4&nbsp;&nbsp; ServletRequest getRequest() 返回当前页的ServletRequest对象(request) <br />
5&nbsp;&nbsp; ServletResponse getResponse() 返回当前页的ServletResponse对象(response) <br />
6&nbsp;&nbsp; Exception getException() 返回当前页的Exception对象(exception) <br />
7&nbsp;&nbsp; ServletConfig getServletConfig() 返回当前页的ServletConfig对象(config) <br />
8&nbsp;&nbsp; ServletContext getServletContext() 返回当前页的ServletContext对象(application) <br />
9&nbsp;&nbsp; void setAttribute(String name,Object attribute) 设置属性及属性值 <br />
10&nbsp;&nbsp; void setAttribute(String name,Object obj,int scope) 在指定范围内设置属性及属性值 <br />
11&nbsp;&nbsp; public Object getAttribute(String name) 取属性的值 <br />
12&nbsp;&nbsp; Object getAttribute(String name,int scope) 在指定范围内取属性的值 <br />
13&nbsp;&nbsp; public Object findAttribute(String name) 寻找一属性,返回起属性值或NULL <br />
14&nbsp;&nbsp; void removeAttribute(String name) 删除某属性 <br />
15&nbsp;&nbsp; void removeAttribute(String name,int scope) 在指定范围删除某属性 <br />
16&nbsp;&nbsp; int getAttributeScope(String name) 返回某属性的作用范围 <br />
17&nbsp;&nbsp; Enumeration getAttributeNamesInScope(int scope) 返回指定范围内可用的属性名枚举 <br />
18&nbsp;&nbsp; void release() 释放pageContext所占用的资源 <br />
19&nbsp;&nbsp; void forward(String relativeUrlPath) 使当前页面重导到另一页面 <br />
20&nbsp;&nbsp; void include(String relativeUrlPath) 在当前位置包含另一文件 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　&nbsp;&nbsp;</p>
<p>&lt;<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#37;&#64;&#112;&#97;&#103;&#101;">%@page</a> contentType="text/html;charset=gb2312"%&gt;<br />
&lt;html&gt;&lt;head&gt;&lt;title&gt;pageContext对象_例1&lt;/title&gt;&lt;/head&gt;<br />
&lt;body&gt;&lt;br&gt;<br />
&lt;%<br />
request.setAttribute("name","霖苑编程");<br />
session.setAttribute("name","霖苑计算机编程技术培训");<br />
//session.putValue("name","计算机编程");<br />
application.setAttribute("name","培训");<br />
%&gt;<br />
request设定的值：&lt;%=pageContext.getRequest().getAttribute("name")%&gt;&lt;br&gt;<br />
session设定的值：&lt;%=pageContext.getSession().getAttribute("name")%&gt;&lt;br&gt;<br />
application设定的值：&lt;%=pageContext.getServletContext().getAttribute("name")%&gt;&lt;br&gt;<br />
范围1内的值：&lt;%=pageContext.getAttribute("name",1)%&gt;&lt;br&gt;<br />
范围2内的值：&lt;%=pageContext.getAttribute("name",2)%&gt;&lt;br&gt;<br />
范围3内的值：&lt;%=pageContext.getAttribute("name",3)%&gt;&lt;br&gt;<br />
范围4内的值：&lt;%=pageContext.getAttribute("name",4)%&gt;&lt;br&gt;<br />
&lt;!--从最小的范围page开始，然后是reques、session以及application--&gt;<br />
&lt;%pageContext.removeAttribute("name",3);%&gt;<br />
pageContext修改后的session设定的值：&lt;%=session.getValue("name")%&gt;&lt;br&gt;<br />
&lt;%pageContext.setAttribute("name","应用技术培训",4);%&gt;<br />
pageContext修改后的application设定的值：&lt;%=pageContext.getServletContext().getAttribute("name")%&gt;&lt;br&gt;<br />
值的查找：&lt;%=pageContext.findAttribute("name")%&gt;&lt;br&gt;<br />
属性name的范围：&lt;%=pageContext.getAttributesScope("name")%&gt;&lt;br&gt;<br />
&lt;/body&gt;&lt;/html&gt; <br />
<br />
</p>
<p>9.config对象</p>
<p>&nbsp;&nbsp;&nbsp; config对象是在一个Servlet初始化时，JSP引擎向它传递信息用的，此信息包括Servlet初始化时所要用到的参数（通过属性名和属性值构成）以及服务器的有关信息（通过传递一个ServletContext对象）</p>
<p>序号 方 法 说 明 <br />
1&nbsp;&nbsp; ServletContext getServletContext() 返回含有服务器相关信息的ServletContext对象 <br />
2&nbsp;&nbsp; String getInitParameter(String name) 返回初始化参数的值 <br />
3&nbsp;&nbsp; Enumeration getInitParameterNames() 返回Servlet初始化所需所有参数的枚举 <br />
</p>
</div>
<img src ="http://www.blogjava.net/connie/aggbug/313164.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/connie/" target="_blank">嗜夜</a> 2010-02-16 14:07 <a href="http://www.blogjava.net/connie/articles/313164.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>