360 likes | 476 Views
自主决定命运 , 创新成就未来 www.loongson.cn. 龙芯 Java 培训. (二)高级应用篇. 靳国杰. 总述. 龙芯JDK是龙芯服务器产品线的重要软件。 本课程共分为两节,第一节是基础应用,第二节是高级应用。 本节课程是龙芯JDK的高级教学,重点介绍龙芯JDK在使用过程中的常见问题。. 课程目标. 掌握在Linux中解决UTF8乱码问题 掌握搭建MySQL数据库,并且在Tomcat中编写JAVA程序访问数据库 掌握使用主流的Java框架 掌握搭建负载平衡机群. 内 容. 乱码问题. MySQL 数据库. Java 框架. 负载平衡.
E N D
自主决定命运,创新成就未来www.loongson.cn 龙芯Java培训 (二)高级应用篇 靳国杰
总述 龙芯JDK是龙芯服务器产品线的重要软件。 本课程共分为两节,第一节是基础应用,第二节是高级应用。 本节课程是龙芯JDK的高级教学,重点介绍龙芯JDK在使用过程中的常见问题。
课程目标 • 掌握在Linux中解决UTF8乱码问题 • 掌握搭建MySQL数据库,并且在Tomcat中编写JAVA程序访问数据库 • 掌握使用主流的Java框架 • 掌握搭建负载平衡机群
内 容 乱码问题 MySQL数据库 Java框架 负载平衡
乱码问题的由来 • 龙芯操作系统:Linux均使用UTF8语言编码 • UTF8:全球语言字符集 • 而在实际应用环境中,大量使用Windows做为开发环境 • Windows使用GB2312编码 • 来自于Windows的文本文件,在Linux中处理时,必须进行字符集转换,否则将出现乱码问题
一个实例 • 在Windows上,使用记事本建立一个含有中文字符的文件 gb.txt • 将gb.txt传送到龙芯机器上,编写 Java程序显示这个文件的内容 /* TestUtf8.java:展示乱码错误 */ import java.io.File; import java.io.FileReader; import java.io.BufferedReader; public class TestUtf8 { public static void main(String[] args) { File file = new File("gb.txt"); String buf = "", temp; try { BufferedReader reader = new BufferedReader(new FileReader(file)); // 一次读入一行 while ((temp = reader.readLine()) != null) { buf += temp; } System.out.println(buf); } catch (Exception e) { e.printStackTrace(); } } }
乱码现象 • 在Windows下显示的文件内容: • TestUtf8.java在龙芯上的运行结果:
在Java中进行语言编码的转换 • 由于Linux使用的是Utf8编码,因此在读入文件的时刻,必须进行由GB2312到UTF8编码的转换 /* TestUtf8.java:能够在龙芯机器上正确显示gb2312编码的文件 */ import java.io.File; import java.io.*; public class TestUtf8 { public static void main(String[] args) { File file = new File("gb.txt"); try { byte[] bytes = new byte[512]; FileInputStream fs = new FileInputStream(file); fs.read(bytes); // 读入原始的二进制字节流 System.out.println(new String(bytes, "GB2312")); //转换成UTF8字符 } catch (Exception e) { e.printStackTrace(); } } }
效果:乱码现象消除! • 正确的显示汉字:
提 示 • 由于历史原因,在Linux中产生乱码的现象频繁出现 • 远程终端显示汉字乱码 • Tomcat中页面显示乱码 • 文件名/目录名乱码 • 解决方式需要针对具体情况而处理
内 容 乱码问题 MySQL数据库 Java框架 负载平衡
MySql简介 • Linux上使用最广泛的开源数据库 • 龙芯上首选的数据库 • 基于“客户端-服务器”结构 • 兼容标准的SQL查询语法 • 功能足够完备,能够满足典型中小企业应用 • 与Java配合良好
安装Mysql • 以Debian系统为例 $ sudo apt-get install mysql-server安装过程中会提示输入数据库服务器的管理密码 • 其它发行版可能有细微区别
启动Mysql服务器 • 启动 $ /etc/init.d/mysql start • 停止 $ /etc/init.d/mysql stop
登录数据库 • 输入命令$ mysql –uroot -ppassword • 其中password为安装时设置的密码
创建数据库、数据表 • 创建新库mysql> create database logintest; • 创建新表mysql> use logintest;mysql> create table user (id text, name text, pwd text); • 显示所有数据库mysql> show databases;
数据的查询和修改 • MySQL支持标准的sql语言 • 添加记录insert into user values ('1', 'gin', 'cpu'); • 查询 select * From <表名>; • 删除 delete from <表名> where <条件>; • 修改 update <表名> set <字段名> = <值>;
在Java程序中访问Mysql数据库 • 下载jdbc的驱动库http://dev.mysql.com/downloads/connector/得到mysql-connector-5.1.8.jar • 安装:将.jar包放入Tomcat的lib文件夹下
程序实例 • 演示功能:在网页中输入用户名和密码,提交后在服务器端检查是否有合法记录
数据库的内容 • user表中,插入一行记录,包含一个用户名和密码
步骤1:建立一个到数据库的Connection String user = "root"; String password = "password"; String driver = "com.mysql.jdbc.Driver"; String url = "jdbc:mysql://127.0.0.1:3306/logintest"; Class.forName(driver).newInstance(); Connection conn = DriverManager.getConnection(url, user,password);
步骤2:检索数据 • 查询数据库,验证用户名和密码 String sql = "select * from user where name = ? and pwd = ?"; PreparedStatement pstmt; pstmt = conn.prepareStatement(sql); pstmt.setString(1, username); pstmt.setString(2, password); // 查询获得结果集 ResultSet rs = pstmt.executeQuery(); if (rs.next()) { suc = true; /* 登录成功*/ }
插入新记录 • 向表中插入新的用户信息 String sql = "insert into user values('2', 'abc', '123456')"; Statement st; st = conn.createStatement(); st.executeUpdate(sql);
内 容 乱码问题 MySQL数据库 Java框架 负载平衡
龙芯支持全部主流Java框架 • 安装、使用方法与PC机完全相同 root@/opt/apache-tomcat-7.0.25/webapps/bbs# ls WEB-INF/lib/ activation-1.1.1.jar httpcore-4.1.jar slf4j-api-1.6.1.jar antlr-2.7.6.jar javassist-3.9.0.jar smtp-1.4.2.jar aopalliance.jar jcaptcha-1.0.jar spring.aop-3.0.5.jar apache-ant-zip-1.8.0.jar jcl-over-slf4j-1.6.1.jar spring.asm-3.0.5.jar c3p0-0.9.1.2.jarjmagick.jar spring.beans-3.0.5.jar commons-codec-1.3.jar json.jar spring.context-3.0.5.jar commons-collections-3.1.jar jta-1.1.jar spring.context.support-3.0.5.jar commons-fileupload-1.2.1.jar jug-2.0.0.jar spring.core-3.0.5.jar commons-io-1.4.jar log4j-over-slf4j-1.6.1.jarspring.expression-3.0.5.jar commons-lang-2.4.jar logback-classic-0.9.27.jar spring.jdbc-3.0.5.jar commons-net-ftp-2.0.jar logback-core-0.9.27.jar spring.orm-3.0.5.jar dom4j-1.6.1.jar lucene-core-3.0.3.jar spring.transaction-3.0.5.jar ehcache-1.6.2.jar mailapi-1.4.2.jar spring.web-3.0.5.jar freemarker-2.3.16.jar memcachedclient-2.0.1.jar spring.web.servlet-3.0.5.jar hibernate-3.3.2.jarmysql-connector-5.1.8.jar spymemcached-2.3.1.jar htmlparser-1.6.jarquartz-1.6.5.jar httpclient-4.0.3.jar
内 容 乱码问题 MySQL数据库 Java框架 负载平衡
负载平衡技术 • Web主机数量的横向扩容 • 几十个服务器做为一个Web站点
安装环境 • Tomcat:Web服务器(多个) • apache:负载平衡服务器(1个) • Tomcat connector:Apache插件(1个),用于将Web请求分发到各Tomcat
安装步骤(1) • 安装apache、Tomcat connector (以Debian为例) $ aptitude install apache2 $ aptitude install apache2-mpm-worker $ aptitude install apache2-utils $ aptitude install apache2.2-bin $ aptitude install apache2.2-common $ aptitude install libapache2-mod-jk
安装步骤(2) • 复制两份tomcat目录 • 例如/opt/tomcat1、/opt/tomcat2 • 修改每个tomcat中的conf/server.xml • Server port改为不同的端口号 • Connector port改为不同的端口号 • Engine name的jvmRoute改为不同名称
安装步骤(3) • 配置Apache [/etc/apache2/httpd.conf] 最后加入 ProxyPass / balancer://tomcatcluster/ lbmethod=byrequests nofailover=Off stickysession=JSESSIONIDtimeout=5 maxattempts=3 ProxyRequests off ProxyPassReverse / balancer://tomcatcluster/ <proxy balancer://tomcatcluster> BalancerMember ajp://localhost:8009 loadfactor=1 route=jvm1 BalancerMember ajp://localhost:9009 loadfactor=1 route=jvm2 </proxy> • 重启Apache
测试(1) • 在两个Tomcat中分别建立test.jsp,里面任意输出不同的字符串 • 在另外一个机器中,使用浏览器访问http://<服务器IP>/test.jsp • 每次刷新页面,能够交替出现来自于两个Tomcat的页面内容
测试(2) • 在另外一个机器中,安装WEB压力测试工具Load Runner • 分别对Apache、两个Tomcat进行压力测试,可以看到负载平衡的能力远高于单个Tomcat
课后习题 • 在Java程序中,怎样将GB2312编码的文本转换成UTF8编码? • JDBC都包含哪些主要函数? • 尝试在龙芯平台上安装一种JAVA框架,并且编写程序测试 • 搭建负载均衡方案的主要步骤?
北京市海淀区中关村科学院南路10号100190 No.10 Kexueyuan South Road,zhongguancun Haidian District,beijing 100190,china