java-2高级应用篇

Download Report

Transcript java-2高级应用篇

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