随笔-211  评论-26  文章-8  trackbacks-0

   在tomcat5.28中新建一个目录,使得http://127.0.0.1:8080/myweb能使用
因为在tomcat5.28以前都是在sever上改,但现在却没有这功能不过端口8080还是在sever.xml上改
          (1)在\conf\catalina\localhost目录下新建一个myweb.xml文件,其内容如下
- <!--
    Context configuration file for the Tomcat myweb Web App

    $Id: manager.xml,v 1.2 2004/02/20 17:09:29 remm Exp $
  -->
- <Context path="/myweb" docBase="e:\myweb" debug="0" privileged="true">
- <!--  Link to the user database we will get roles from
  -->
  </Context>
         那个目录就是在e盘底下的myweb目录下,其中个人虚拟目录里面的东西学问也是大大着的。。


在MYSQL数据库上有默认的test数据库,我们新建一个test.jsp并放在root目录中,用http://localhost:8080/test.jsp查看
如成功,网页将正常运行。页面无任何数据。
<%@ page contentType="text/html;charset=gb2312" %>
<%
java.sql.Connection conn;
java.lang.String strConn;
Class.forName("org.gjt.mm.mysql.Driver");
conn= java.sql.DriverManager.getConnection("jdbc:mysql://localhost/test","test","");
%>
在此,我在数据库新建用户test,密码为空
数据连接驱动程序为mm.mysql-2.0.4-bin.jar放在tomcat5.0/common/lib中
注意:起先应该先启动mysql服务,net start mysql,不然就不能用呢。如果是mm.mysql-2.0.4-bin.jar,就算是root帐户,,密码只能为空,不然的话就出现以下错误:
java.sql.SQLException: Communication failure during handshake. Is there a server running on localhost:3306?
 at org.gjt.mm.mysql.MysqlIO.init(MysqlIO.java:327)
 at org.gjt.mm.mysql.Connection.connectionInit(Connection.java:261)
 at org.gjt.mm.mysql.jdbc2.Connection.connectionInit(Connection.java:89)
 at org.gjt.mm.mysql.Driver.connect(Driver.java:167)
 at java.sql.DriverManager.getConnection(DriverManager.java:523)
这时我们只能把mm.mysql-2.0.4-bin.jar换成mysql-connector-java-3.1.5-gamma-bin.jar
下载地址为http://www.minq.se/products/dbvis/drivers.html
Class.forName("com.mysql.jdbc.Driver")
 url为jdbc:mysql://<host>:<port3306>/<database>


另外在access上创建数据库并在odbc数据源上设置,它利用自带的jdbc-odbc连接桥也可以实现访问数据库的功能
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection conDB=DriverManager.getConnection("jdbc:odbc:BookDB");

resin也可以装一下,,可以与tomcat并发使用。。。呵呵

/*向数据库里面添加汉字时*/
<%@ page contentType="text/html; charset=GB2312" %>
<%@ page language="java" import="java.sql.*,java.io.*"%>
<html>
<body>
<center>
往数据库中添加数据:<hr>
<%
try
{
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
Connection con=java.sql.DriverManager.getConnection("jdbc:mysql://localhost/jspdev","root","614");
Statement stmt=con.createStatement();
stmt.execute("insert into contact(userName,mobile) values('陈军',136555555)");
out.println("添加数据成功");
stmt.close();
con.close();
}
catch(Exception e)
{
e.printStackTrace();
}
%>
<center>
</body>
</html>
这时数据库里面的userName怎么会是??

mysql> select * from contact;
+----------+-----------+-------+------+-------------+------+
| userName | mobile | phone | mail | lastcontact | mem |
+----------+-----------+-------+------+-------------+------+
| ?? | 136555555 | NULL | NULL | NULL | NULL |
+----------+-----------+-------+------+-------------+------+
1 row in set (0.02 sec)


这时<%@ page contentType="text/html;charset=gb2312"%>去掉就会成功的添加入数据
我只不过把前面的<%@ page contentType="text/html;charset=gb2312"%>去掉就行呢

<%@ page language="java" import="java.sql.*,java.io.*"%>
<html>
<body>
<center>
往数据库中添加数据:<hr>
<%
try
{


Class.forName("org.gjt.mm.mysql.Driver").newInstance();


Connection con=java.sql.DriverManager.getConnection("jdbc:mysql://localhost/jspdev","root","614");
PreparedStatement pstmt=con.prepareStatement("insert into contact values(?,?,?,?,?,?)");

pstmt.setString(1,"王小华");
pstmt.setInt(2,136234234);
pstmt.setString(3,"010455554");
pstmt.setString(4,"lxh@some.com");
pstmt.setDate(5,new java.sql.Date(new java.util.Date().getTime()));
pstmt.setString(6,"32");
pstmt.execute();

pstmt.setString(1,"刘玲玲");
pstmt.setInt(2,136234234);
pstmt.setString(3,"010455554");
pstmt.setString(4,"lxh@some.com");
pstmt.setDate(5,new java.sql.Date(new java.util.Date().getTime()));
pstmt.setString(6,"c");
pstmt.execute();

pstmt.setString(1,"李小华");
pstmt.setInt(2,136234234);
pstmt.setString(3,"010455554");
pstmt.setString(4,"lxh@some.com");
pstmt.setDate(5,new java.sql.Date(new java.util.Date().getTime()));
pstmt.setString(6,"98");

pstmt.execute();
pstmt.close();

Statement stmt=con.createStatement();

stmt.execute("insert into contact(userName,mobile) values('陈军',136555555)");
out.println("添加数据成功");


stmt.close();
con.close();
}
catch(Exception e)
{
e.printStackTrace();
}
%>
<center>
</body>
</html>

这时测试一下,数据库就不再有任何乱码,就ok呢

mysql> select * from contact;
+----------+-----------+-----------+--------------+---------------------+------+

| userName | mobile | phone | mail | lastcontact | mem |

+----------+-----------+-----------+--------------+---------------------+------+

| 李小华 | 136234234 | 010455554 | lxh@some.com | 2005-05-07 00:00:00 | 98 |

| 刘玲玲 | 136234234 | 010455554 | lxh@some.com | 2005-05-07 00:00:00 | c |

| 王小华 | 136234234 | 010455554 | lxh@some.com | 2005-05-07 00:00:00 | 32 |

| 陈军 | 136555555 | NULL | NULL | NULL | NULL |

+----------+-----------+-----------+--------------+---------------------+------+

4 rows in set (0.00 sec)

这时你来http://127.0.0.1:8080/myweb/insert.jsp页面看一下,你就会发现里面的字符全是乱码,

ÍùÊý¾Ý¿âÖÐÌí¼ÓÊý¾Ý£º
--------------------------------------------------------------------------------
Ìí¼ÓÊý¾Ý³É¹¦
不过你在 查看/编码 选择简体中文 就会变成

往数据库中添加数据:
--------------------------------------------------------------------------------
添加数据成功
这时你应该知道页面为什么会乱码,因为已被我们去掉<%@ page contentType="text/html;charset=gb2312"%>,它的功能是页面的字体控制。
然而用<%@ page contentType="text/html;charset=iso8859_1"%>则数据库里面不会有乱码,且页面上也不会有乱码。。
而从数据库里面读取汉字的时候则需要转换
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page language="java"%>
<%@ page import="java.sql.*,java.io.*"%>
<%! String trans(String chi)
{
   String result=null;
   byte temp[];
   try{
        temp=chi.getBytes("iso-8859-1");
        result=new String(temp);
        }
   catch(UnsupportedEncodingException e)
     {
        System.out.println(e.toString());
     }
return result;
  }
  %>
<html>
<body>
<center>
<html>
<body>
以下是从mysql数据库读取的数据:<hr>
<table border=1>
<tr><td>姓名</td><td>手机</td><td>电话</td><td>email</td><td>最后的联系时间</td><td>备注</td></tr>
<%
   try
     {
     Class.forName("org.gjt.mm.mysql.Driver").newInstance();
     Connection con=java.sql.DriverManager.getConnection("jdbc:mysql://localhost/jspdev","root","614");
     Statement stmt=con.createStatement();
     ResultSet rst=stmt.executeQuery("select * from contact;");
        while(rst.next())
          {
            out.println("<tr>");
            out.println("<td>"+trans(rst.getString("userName"))+"</td>");
            out.println("<td>"+rst.getInt("mobile")+"</td>");
            out.println("<td>"+rst.getString("phone")+"</td>");
            out.println("<td>"+rst.getString("mail")+"</td>");
            out.println("<td>"+rst.getDate("lastcontact")+"</td>");
            out.println("<td>"+trans(rst.getString("mem"))+"</td>");
            out.println("</tr>");
         }
   rst.close();
   stmt.close();
   con.close();
   }
   catch(Exception e)
     {
       e.printStackTrace();
    }
    %>
</table>
</center>
</body>
</html>
   
这时才可以精确的显示出来……
说明:
首先,mysql 数据库中的东西都是二进制存放的,支持任何数据,当然包括中文。你到命令行下
insert into testtable values ( '中文' );
select * from testtable;
全都显示正常。
java 内部使用 unicode ,而 mysql 缺省使用 iso-8859_1

1 . <%@ page contentType="text/html;charset=gb2312"%>

2. request.setCharacterEncoding("gb2312");

3. String s=rs.getString(1);
s=new String((s.getBytes("ISO-8859-1"),"gb2312");

4. jdbc:mysql://hostName[:3306]/databaseName?user=userName&password=PassWord&useUnicode=true&characterEncoding=GBK

posted on 2005-04-24 21:30 dragon 阅读(520) 评论(0)  编辑  收藏 所属分类: jsp