zoukankan      html  css  js  c++  java
  • JavaWeb项目之博客系统(二)上

    1.JDBC技术

    来源:http://zengyiqiang2006.blog.163.com/blog/static/102868226201052673216733/

    JDBC技术(访问数据库的一种技术)

    核心主要是使用DriverManager类操作和管理实现Driver接口的实现类, 程序员只需要向这个驱动管理器类要连接对象就可以了

    ( Connection    con=DriverManager.getConnection(RUL) )

    JDBC驱动程序(实现Driver接口的实现类名字)

    通常我们所说的“使用哪一个JDBC驱动程序/驱动类?”实际上是指使用哪一个实现Driver接口的实现类。如是使用Mysql数据库厂商提供的实现类(com.mysql.jdbc.Driver)还是使用 SQL Server 2000 数据库厂商提供的实现类(om.microsoft.jdbc.sqlserver.SQLServerDriver);是使用第三方的实现类还是使用java自身提供的实现类(sun.jdbc.odbc.JdbcOdbcDriver )但是无论使用哪一家驱动程序都要知道相应的url。

    JDBC连接池 技术 :对DriverManager进行了封装和相应的修改,

    连接池其实就是java中的集合如List、Map、Vector等。

    连接池技术的核心是反复使用连接池(集合)中的多个Connection对象,其底层实现还是基于JDBC技术,即DriverManager类操作和管理实现Driver接口的实现类

    总结:

    一: 如何创建多个连接对象?

    参考源代码可知 只需向DriverManager多要几次即可 ,具体可以使用循环语句

    二:如何获取连接池中的Connection对象呢?

    未封装前只需向DriverManager要就可以了,封装后,要向DataSource来要。

    三:Java中的DriverManager对象 作用主要是获取实现Driver接口的实现类的连接对象

    如: Connection    con=DriverManager.getConnection(RUL) )

    四:Java中的DataSource对象 有点像未封装前的DriverManager。它的作用主要是获取第三方组件(连接池)中的连接对象

    如: Context context=new InitialContext() ; //JNDI部分的知识

    DataSource ds=(DataSource)context.lookup( “ java:/comp/env/jdbc/mysqlds ” );

    Connection con=ds.getConnection();

    五:连接池 :实际上就是一个集合,该集合内保存了一定数量的连接对象,所以他管理着整个数据库的连接

    六:数据源: 实际上就是Java中的DataSource对象,主要作用是管理连接池和获取第三方组件(连接池)中的连接对象,有点像   DriverManager,换句话说,各个连接池的管理工作都是由一个叫数据源的对象来操控着,java中DataSource来表示,xml文件中用 <data-source> 这个标签来表示。

    七:获取Connection对象的两种方式 ,

    一种是传统的向DriverManager要, con=DriverManager.getConnection()

    另一种是向DataSource要, con =( (DataSource)new  InitialContext().lookup( “ java:/comp/env/jdbc/ TestDB ” ) ).getConnection() ;

    八:JNDI

    Context context=new InitialContext() ; // JNDI部分的知识

    DataSource ds=(DataSource)context.lookup( “ java:/comp/env/jdbc/mysqlds ” ) ;//利用

    JNDI的lookup方法来查找(tomcat中)已经存在的DataSource对象 。 java:/comp/env

    这是固定的写法

    Connection con=ds.getConnection() ;//只要有了DataSource对象,则就可以获得Connction对象了

    2.Tomcat 6.0 配置数据库连接池

    来源:http://zengyiqiang2006.blog.163.com/blog/static/10286822620105267244342/

    这里是以Mysql数据库为例,其他的数据库都是一样的配置 
    首先将mysql驱动拷贝到tomcat下的lib目录下。C:\Program Files\Apache Software Foundation\Tomcat 6.0\lib 
    然后修改C:\Program Files\Apache Software Foundation\Tomcat 6.0\conf下的context.xml文件,在里面添加如下代码: 
    在Context标签里添加一个属性 reloadable="true" 

    <WatchedResource>WEB-INF/web.xml</WatchedResource><!--这个有就不需要添加--> 
    <Resource name="jdbc/mysqlds" auth="Container" type="javax.sql.DataSource" 
        maxActive="100" maxIdle="30" maxWait="10000" username="root" password="admin" driverClassName="com.mysql.jdbc.Driver"        url="jdbc:mysql://localhost:3306/databasename"/> 

    下面解释一下各属性的含义: 
    name             表示指定的jndi名称 (这个名字这里可以随便写) 
    auth             表示认证方式,一般为Container 
    type             表示数据源床型,使用标准的javax.sql.DataSource 
    maxActive        表示连接池当中最大的数据库连接 
    maxIdle          表示最大的空闲连接数 
    maxWait          当池的数据库连接已经被占用的时候,最大等待时间 
    logAbandoned     表示被丢弃的数据库连接是否做记录,以便跟踪 
    username         表示数据库用户名 
    password         表示数据库用户的密码 
    driverClassName  表示JDBC DRIVER 
    url              表示数据库URL地址

    例子:

    <Context>
    
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
    
    <!—mysql数据源配置-->
    
    <Resource
    
    name="jdbc/mysqlds"
    
    auth="Container"
    
    type="javax.sql.DataSource"
    
    maxActive="100"
    
    maxIdel="30"
    
    maxWait="10000"
    
    username="root"
    
    password="5982285"
    
    driverClassName="com.mysql.jdbc.Driver"
    
    url="jdbc:mysql://localhost/myblog"
    
    />
    
    <!—oracle数据源配置-->
    
    <Resource
    
    name="jdbc/oracleds"
    
    auth="Container"
    
    type="javax.sql.DataSource"
    
    maxActive="100"
    
    maxIdel="30"
    
    maxWait="10000"
    
    username="scott"
    
    password="tiger"
    
    driverClassName="oracle.jdbc.driver.OracleDriver"
    
    url="jdbc:oracle:thin:@localhost:1521:sky"
    
    />
    
    </Context>

    属性说明:name数据源名称,通常取jdbc/XXX的格式

    auth: Container容器

    type: javax.sql.DataSource 注意是javax不是java

    username数据库用户名

    password数据库用户密码

    maxIdle最大空闲数,数据库连接的最大空闲时间。超过空闲时间,数据库连

    接将被标记为不可用,然后被释放。设为0表示无限制。

                        maxActive连接池的最大数据库连接数。设为0表示无限制。

    maxWait 最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示

    无限制。

    driveClassName:  数据库完整的驱动类全称

    url数据库的链接

    网上很多人都说需要在web.xml文件中再配置 其实补配置也是可以的

    配置了<WatchedResource>WEB-INF/web.xml</WatchedResource> 之后 就无需在web.xml文件中配置了

    或者是在context.xml中配置的而不是server.xml配置 因此不需要在web.xml中配置 没有测试

    3.HTML <label> 标签的 for 属性

    for 属性规定 label 与哪个表单元素绑定。

    标记通常以下面两种方式中的一种来和表单控件相联系:将表单控件作为标记标签的内容,这样的就是隐式形式,或者为 <label> 标签下的 for 属性命名一个目标表单 id,这样就是显式形式。

    例如,在 XHTML 中:

    显式的联系:
    <label for="SSN">Social Security Number:</label>
    <input type="text" name="SocSecNum" id="SSn" />
    
    隐式的联系:
    <label>Date of Birth: <input type="text" name="DofB" /></label>

    第一个标记是以显式形式将文本 "Social Security Number:" 和表单的社会安全号码的文本输入控件 ("SocSecNum") 联系起来,它的 for 属性的值和控件的 id 一样,都是 SSN。第二个标记 ("Date of Birth:") 不需要 for 属性,它的相关控件也不需要 id 属性,它们是通过在 <label> 标签中放入 <input> 标签来隐式地连接起来的。

    实例

    带有两个输入字段和相关标记的简单 HTML 表单:

    <form>
      <label for="male">Male</label>
      <input type="radio" name="sex" id="male" />
      <br />
      <label for="female">Female</label>
      <input type="radio" name="sex" id="female" />
    </form>

    4.一个问题:The reference to entity "password" must end with the ';' delimiter.的原因跟解决方法 

    This error is caused by a rogue '&' in database_properties.xml. This xml tag...
    <param name="url" value="jdbc:mysql://129.12.16.16/jwnl?user=myusername&password=mypassword"/>

    should actually read...
    <param name="url" value="jdbc:mysql://129.12.16.16/jwnl?user=myusername&amp;password=mypassword"/>

    This is because the sax xml parsing libraries used by jwnl are generic xml libraries and therefore expect an escaped

    charcter sequence.

    测试成功

    测试页面

    图片

    5.又一个问题:Name jdbc is not bound in this Context

    这个问题我查找了好久,一直没有效果,我的context.xml 和 Mysql驱动程序都是没有问题的,但是就是不停地报这个错!最后我很无语的发现,错误是自己写作了一个单词!

    ds=(DataSource)context.lookup("java:comp/env/jdbc/mysqlds");//注意:第一个单词是java,而不是jdbc!

    网上有人解释说还要在web.xml中添加以下内容:

    <resource-ref>

    <description>blog</description>

    <res-ref-name>jdbc/mysqlds</res-ref-name>

    <res-type>javax.sql.DataSource</res-type>

    <res-auth>Container</res-auth>

    </resource-ref>

    我测试之后还是报错,没用的!

  • 相关阅读:
    DOM的重点核心
    window的Navigator 对象
    meta标签的http-equiv与content解析
    深拷贝与浅拷贝
    web安全CSRF和XSS
    同源策略与跨域问题
    instanceof与constructor的区别
    javascript原型对象与原型链
    Dom事件
    CSS盒模型的介绍
  • 原文地址:https://www.cnblogs.com/yinger/p/2082448.html
Copyright © 2011-2022 走看看