Tomcat5.0+mysql配置JDBCRealm,DBCP,ssl,中文乱码处理

原创 2004年08月05日 20:34:00

准备环境:
1.j2sdk-1_4_2-windows-i586.exe //jdk
2.mysql-4.0.20d-win.zip  //mysql数据库
3.mysqlcc-0.9.4-win32.zip //mysqlGUI控制
4.jakarta-tomcat-5.0.27.exe //tomcat服务器
5.mysql-connector-java-3.0.14-production.zip //内含mysql驱动

安装步骤:
1.安装jdk
2.安装tomcat
3.安装mysql
4.安装mysqlcc
5.将驱动包解压,拷贝mysql-connector-java-3.0.14-production-bin.jar到tomcat/common/lib下
或者下载mm.mysql-2.0.14-you-must-unjar-me.jar,解压后拷贝其中的mm.mysql-2.0.14-bin.jar

Tomcat5.0配置 安装密码 198277
1.配置manager 管理应用程序
在conf/server.xml 中
添加如下

<Service name="Catalina">
...

 <Context path="/manager" debug="0" privileged="true"
          docBase="/usr/local/kinetic/tomcat5/server/webapps/manager">
 </Context>

</Service>

限制ip访问配置
<Context path="/manager" debug="0" privileged="true"
         docBase="/usr/local/kinetic/tomcat5/server/webapps/manager">
         <Valve className="org.apache.catalina.valves.RemoteAddrValve"
                allow="127.0.0.1"/>
</Context>
测试为:http://localhost:8080/manager/html

2.配置JDBCRealm容器管理安全,以mysql-4.0数据库为例
a.拷贝驱动mm.mysql-2.0.14-bin.jar到common/lib/下
b.在数据库ycg中建表
  
 create table users (
  user_name         varchar(15) not null primary key,
  user_pass         varchar(15) not null
);

create table user_roles (
  user_name         varchar(15) not null,
  role_name         varchar(15) not null,
  primary key (user_name, role_name)
);

c.修改server.xml如下(默认数据库为root,无密码,如果有形如:connectionURL="jdbc:mysql://localhost/authority?user=dbuser&amp;password=dbpass")
      <Realm  className="org.apache.catalina.realm.JDBCRealm" debug="99"
             driverName="org.gjt.mm.mysql.Driver"
          connectionURL="jdbc:mysql://localhost/ycg?user=root"
         connectionName="" connectionPassword=""
              userTable="users" userNameCol="user_name" userCredCol="user_pass"
          userRoleTable="user_roles" roleNameCol="role_name" />

d.在数据库中添加入tomcat的默认配置数据:

+-----------+-----------+
| user_name | role_name |
+-----------+-----------+
| admin     | admin     |
| admin     | manager   |
| both      | role1     |
| both      | tomcat    |
| role1     | role1     |
| tomcat    | tomcat    |
+-----------+-----------+
+-----------+-----------+
| user_name | user_pass |
+-----------+-----------+
| tomcat    | tomcat    |
| both      | tomcat    |
| role1     | tomcat    |
| admin     | 198277    |
+-----------+-----------+

e.启动mysql,启动tomcat,此后tomcat将从数据库中读用户规则认证.默认的conf/tomcat-users.xml失效

3.DBCP的配置
a.设置
             <parameter>
              <name>removeAbandoned</name>
              <value>true</value>
            </parameter>

 可使失效的数据连接重新启用.
配套设置
  
             <parameter>
              <name>removeAbandonedTimeout</name>
              <value>60</value>
            </parameter>
失效时间
如果要写入日志
设置
            <parameter>
              <name>logAbandoned</name>
              <value>true</value>
            </parameter>
以上三个默认都是false
b.以mysql为例,配置数据连接池
c.配置新的用户与数据库,必须设定密码,空密码将导致连接失败
e.
指定root密码:mysqladmin -u root -h localhost password "198277"
(需修改上面的jdbcrealm设置connectionURL="jdbc:mysql://localhost/ycg?user=root&amp;password=198277")
命令mysql进入匿名连接到服务器
密码访问
shell> mysql -h host -u user -p
Enter password: ********

//如果root没有密码,以下是不成功的.(试过了)
 mysql> GRANT ALL PRIVILEGES ON *.* TO javauser@localhost
    ->   IDENTIFIED BY 'javadude' WITH GRANT OPTION;
mysql> create database javatest;
mysql> use javatest;
mysql> create table testdata (
    ->   id int not null auto_increment primary key,
    ->   foo varchar(25),
    ->   bar int);

在conf/server.xml中<host></host>中添加
<Context path="/DBTest" docBase="DBTest"
        debug="5" reloadable="true" crossContext="true">

  <Logger className="org.apache.catalina.logger.FileLogger"
             prefix="localhost_DBTest_log." suffix=".txt"
             timestamp="true"/>

  <Resource name="jdbc/TestDB"
               auth="Container"
               type="javax.sql.DataSource"/>

  <ResourceParams name="jdbc/TestDB">
    <parameter>
      <name>factory</name>
      <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
    </parameter>

    <!-- Maximum number of dB connections in pool. Make sure you
         configure your mysqld max_connections large enough to handle
         all of your db connections. Set to 0 for no limit.
         -->
    <parameter>
      <name>maxActive</name>
      <value>100</value>
    </parameter>

    <!-- Maximum number of idle dB connections to retain in pool.
         Set to 0 for no limit.
         -->
    <parameter>
      <name>maxIdle</name>
      <value>30</value>
    </parameter>

    <!-- Maximum time to wait for a dB connection to become available
         in ms, in this example 10 seconds. An Exception is thrown if
         this timeout is exceeded.  Set to -1 to wait indefinitely.
         -->
    <parameter>
      <name>maxWait</name>
      <value>10000</value>
    </parameter>

    <!-- MySQL dB username and password for dB connections  -->
    <parameter>
     <name>username</name>
     <value>javauser</value>
    </parameter>
    <parameter>
     <name>password</name>
     <value>javadude</value>
    </parameter>

    <!-- Class name for the old mm.mysql JDBC driver - uncomment this entry and comment next
         if you want to use this driver - we recommend using Connector/J though
    <parameter>
       <name>driverClassName</name>
       <value>org.gjt.mm.mysql.Driver</value>
    </parameter>
     -->
   
    <!-- Class name for the official MySQL Connector/J driver -->
    <parameter>
       <name>driverClassName</name>
       <value>com.mysql.jdbc.Driver</value>
    </parameter>
   
    <!-- The JDBC connection url for connecting to your MySQL dB.
         The autoReconnect=true argument to the url makes sure that the
         mm.mysql JDBC Driver will automatically reconnect if mysqld closed the
         connection.  mysqld by default closes idle connections after 8 hours.
         -->
    <parameter>
      <name>url</name>
      <value>jdbc:mysql://localhost:3306/javatest?autoReconnect=true</value>
    </parameter>


         <parameter>
              <name>removeAbandoned</name>
              <value>true</value>
            </parameter>

    <parameter>
              <name>removeAbandonedTimeout</name>
              <value>60</value>
            </parameter>
      <parameter>
              <name>logAbandoned</name>
              <value>true</value>
            </parameter>
  </ResourceParams>
</Context>

f.在web服务中调用.配置web.xml 如:
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    version="2.4">
  <description>MySQL Test App</description>
  <resource-ref>
      <description>DB Connection</description>
      <res-ref-name>jdbc/TestDB</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth>
  </resource-ref>
</web-app>
g.测试用test.jsp
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<sql:query var="rs" dataSource="jdbc/TestDB">
select id, foo, bar from testdata
</sql:query>

<html>
  <head>
    <title>DB Test</title>
  </head>
  <body>

  <h2>Results</h2>
 
<c:forEach var="row" items="${rs.rows}">
    Foo ${row.foo}<br/>
    Bar ${row.bar}<br/>
</c:forEach>

  </body>
</html>

h.新建web应用
下载jakarta-taglibs-standard-1.1.0
copy jstl.jar and standard.jar to your web app's WEB-INF/lib

DBTest/
 WEB-INF/
  web.xml
  lib/
   jstl.jar
   standard.jar
 test.jsp
拷贝到webapps/ 下
i.启动mysql,tomcat
访问:
http://localhost:8080/DBTest/test.jsp
显示:
 Results
 Foo hello
 Bar 12345

4.ssl的配置,以jdk1.4.2为例
a.进入%JAVA_HOME%/bin
运行命令:keytool -genkey -alias tomcat -keyalg RSA
以tomcat 安装密码为198277,ketool设置密码为198277为例
输入keystore密码:  198277
您的名字与姓氏是什么?
  [Unknown]:  ycg
您的组织单位名称是什么?
  [Unknown]:  nju
您的组织名称是什么?
  [Unknown]:  nju
您所在的城市或区域名称是什么?
  [Unknown]:  nanjing
您所在的州或省份名称是什么?
  [Unknown]:  jiangsu
该单位的两字母国家代码是什么
  [Unknown]:  nd
CN=ycg, OU=nju, O=nju, L=nanjing, ST=jiangsu, C=nd 正确吗?
  [否]:  y

输入<tomcat>的主密码
        (如果和 keystore 密码相同,按回车):  198277
b.在你的D:/Documents and Settings/的当前用户目录下可以找到.keystore文件.将其拷贝到conf/文件夹下.
c.在server.xml 中找到

    <!--
    <Connector port="8443"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" disableUploadTimeout="true"
               acceptCount="100" debug="0" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS" />
    -->
    去掉注释

添加配置字段:keystoreFile="/conf/.keystore" keystorePass="198277"
如: <!-- Define a SSL Coyote HTTP/1.1 Connector on port 8443 -->
  
    <Connector port="8443"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" disableUploadTimeout="true"
               acceptCount="100" debug="0" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS" keystoreFile="/conf/.keystore"
      keystorePass="198277"/>
d.测试为:
https://localhost:8443
e.在自己的程序中添加ssl认证方式为:
在web.xml 中<web-app></web-app>添加
<security-constraint>
<web-resource-collection>
<web-resource-name>Success</web-resource-name>
<url-pattern>/</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
f.用上提为例就是
修改web.xml 为
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    version="2.4">

 <description>MySQL Test App</description>

<security-constraint>
<web-resource-collection>
<web-resource-name>Success</web-resource-name>
<url-pattern>/</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>


  <resource-ref>
      <description>DB Connection</description>
      <res-ref-name>jdbc/TestDB</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth>
  </resource-ref>
</web-app>
访问:
https://localhost:8443/DBTest/test.jsp

g.如果与2配置的jdbcRealm结合起来进行表单认证
先在user_roles表中添加user_name:ycg role_name:web-user
在users表中添加user_name:ycg user_pass:198277

然后在web.xml中添加
<auth-constraint>
<role-name>web-user</role-name>
</auth-constraint>

<login-config>
 <auth-method>BASIC</auth-method>
 <realm-name>My Member Area</realm-name>
</login-config>

修改后的web.xml如:
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    version="2.4">

 <description>MySQL Test App</description>

<security-constraint>
<web-resource-collection>
<web-resource-name>Success</web-resource-name>
<url-pattern>/</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>web-user</role-name>
</auth-constraint>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
<login-config>
 <auth-method>BASIC</auth-method>
 <realm-name>My Member Area</realm-name>
</login-config>
 
  <resource-ref>
      <description>DB Connection</description>
      <res-ref-name>jdbc/TestDB</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth>
  </resource-ref>
</web-app>

测试:
http://localhost:8080/DBTest/test.jsp
将通过ssl连接,并进行表单认证.用户密码可在user_roles,和users中添加.

5.中文乱码问题:
mysql 默认编码 iso
tomcat request 传输编码 iso
如果要显示中文
在*.jsp中添加
<head>
<%@ page
language="java"
contentType="text/html; charset=GB18030"
pageEncoding="GB18030"
%>
</head>
如果是数据传输中的乱码(如用servlet从mysql数据库读出的数据)
用以下两个转码函数转码,如果不清楚由哪种编码转成哪种编码,就多尝试.
 //转码GBK转ISO
 public String toISO(String input) {
  try {
    byte[] bytes = input.getBytes("GBK");
    return new String(bytes,"ISO8859-1");
  }catch(Exception ex) {
  }
  return input;

 }
 
 //转码IS0转GBK
 public String toGBK(String input) {
  try {
   byte[] bytes = input.getBytes("ISO8859-1");
   return new String(bytes,"GBK");
  }catch(Exception ex) {
  }
  return input;
 }
例如:
当你发现你在mysql中想搜索中文是遇到编码问题时使用:
String sql = "select sum(number) from studentTable where grade="+toISO("大三");
当你从mysql数据库中读出的数据送到jsp显示为乱码时
rs = st.executeQuery(...);
studentBean.setStudentName(toGBK(rs.getString("studentName")));

以上配置都测试成功.主要参考tomcat5.0的帮助文档.其中如有错误的认识,还望不吝赐教.

spring 配置文件中dbcp连接池,jdbc连接池 引入 配置文件properties,但是不能用$符号引用里面的变量问题

spring 配置 注意红色字体 (1)懒加载要设为true,(2)引入配置文件 注意不能懒加载不能设为false,否则$不能引入配置文件中的变量 第一种配置.jdbc连接池 ...
  • u013378306
  • u013378306
  • 2016年03月04日 22:05
  • 4464

mysql数据库连接池使用(一)dbcp方式的配置

Apache的数据库连接池 DBCP的常用配置说明,因为项目中用到了需要对其封装,所以必须先了解怎么配置以及各个配置字段的含义,理解的基础上开发我们自己的数据库连接池。可以参考官网dbcp官网。 d...
  • qq_30739519
  • qq_30739519
  • 2016年03月12日 16:49
  • 8120

java配置dbcp连接池(数据库连接池)示例

最近一个项目遇到了一个问题,tomcat跑一段时间后,项目就会造成类似死锁状态,所有的servlet都无法访问,造成网络堵塞的现象。我项目中使用的连接池是c3p0,网上有人说是c3p0的bug,不知是...
  • jdfkldjlkjdl
  • jdfkldjlkjdl
  • 2015年06月24日 21:15
  • 2805

pb导入mysql5.0中中文乱码

  • 2013年10月09日 19:48
  • 195KB
  • 下载

tomcat配置文件修改解决中文乱码

  • 2015年03月10日 17:48
  • 429B
  • 下载

中文乱码--MySQL5.0中文问题及JDBC数据库连接和JSP汉字编码问题解决方法总

MySQL5.0中文问题解决方案如下:    1、在dos环境下,用mysql --default-character-set=gbk -hlocalhost-u root -p 这句话进入mysql...
  • A__To__Z
  • A__To__Z
  • 2011年06月23日 17:23
  • 525

解决PHP+mysql处理中文乱码的独家方案

  • 2014年06月03日 11:12
  • 687KB
  • 下载

java+mysql中文乱码处理

  • 2011年10月27日 23:01
  • 36KB
  • 下载

MYSQl处理中文乱码.txt

  • 2013年10月20日 16:06
  • 1KB
  • 下载

java;jsp;tomcat;mysql;hibernate;编码中文乱码全面解决方案

一、Java、JSP编码开发工具会有好多地方设置编码这个不解少了,这里不介绍了。 java与mysq编码对应:java中的常用编码 UTF-8;GBK;GB2312;ISO-8859-1; 对应mys...
  • u011251014
  • u011251014
  • 2015年11月10日 20:47
  • 229
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Tomcat5.0+mysql配置JDBCRealm,DBCP,ssl,中文乱码处理
举报原因:
原因补充:

(最多只允许输入30个字)