当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 3 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 构建我的LAMJ
帖子发表于 : 2009-03-10 14:29 

注册: 2006-12-19 9:18
帖子: 55
送出感谢: 0 次
接收感谢: 0 次
LAMP大家都听过,几乎是无人不晓无人不知。LAMJ?无非是把PHP换成JSP。纯粹是为了个人爱好而这么命名,不过我相信也有很多人乐此不疲的。
现在简要介绍如何搭建LAMJ——Linux+Apache+MySQL+JSP。
我们以Ubuntu-server-8.10作为Linux环境。
1.构建Java环境
在ubuntu下配置java可以说既简单又不简单。熟悉的人都知道,ubuntu下有默认的jdk,也就是open-jdk。但是很多人都不喜欢用。卸载执行:
代码:
sudo apt-get autoremove openjdk-6*

取而代之的是SUN的jdk。在这里我们选用java6,作为java环境。
代码:
echo 安装jdk
sudo apt-get install sun-java6-bin sun-java6-jdk sun-java6-jre sun-java6-source sun-java6-plugin sun-java6-fonts sun-java6-javadb -y
echo 设置系统的默认jdk 为 java-6-sun
sudo update-java-alternatives -s java-6-sun
echo 选择默认 java
sudo update-alternatives --config java

代码:
echo 编辑 jvm 将 /usr/lib/jvm/java-6-sun 这一行移动到配置块的顶部。
sudo vim /etc/jvm

代码:
echo 配置系统环境
sudo vim /etc/environment

参考如下
代码:
JAVA_HOME="/usr/lib/jvm/java-6-sun"
CLASSPATH=".:$JAVA_HOME/lib:$JAVA_HOME/jre/lib"
PATH="$JAVA_HOME/bin:$JAVA_HOME/jre/bin"
PATH="$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
LANG="zh_CN.UTF-8"
LANGUAGE="zh_CN:zh:en_US:en"


2.构建Tomcat环境
这里以Tomcat6为例
代码:
echo 安装tomcat6
sudo apt-get install tomcat6 tomcat6-admin tomcat6-common tomcat6-user -y

这个时候试试http://localhost:8080/,如果tomcat正常启动,你应该看到一个欢迎页面。
当然这个时候你还不能对这个tomcat进行管理,还需要对用户权限进行设置。
代码:
echo 设置tomcat用户
sudo vim /var/lib/tomcat6/conf/tomcat-users.xml

<tomcat-users>注释部分去掉,加入以下内容
代码:
  <role rolename="manager"/>
  <role rolename="admin"/>
  <user username="admin" password="admin" roles="admin,manager"/>

代码:
echo重启Tomcat
sudo /etc/init.d/tomcat6 restart

试试看http://localhost:8080/host-manager/html控制台应该可以用了,当然如果是生产环境,不建议打开该注释。
同时要注意,为了防止字符集与系统不一致导致的输入字符错误,我们需要设定字符集。
代码:
echo 字符集设定
sudo vim /var/lib/tomcat6/conf/server.xml

找到<Connector /> 加入以下属性,统一控制输入字符集
代码:
URIEncoding="UTF-8"

尤其是AJP的8009端口,以往通常改掉8080端口的字符集,我们以为万事大吉,突然发现输入字符串搜索后,得到的都是乱码,是因为服务器通过Apache做了跳转,漏掉了8009的配置通常就会如此。

你可以通过控制页面来部署你的应用,也可以手工构建你的应用,路径是
代码:
/var/lib/tomcat6/webapps/


如果你见到这个异常
代码:
 
java.net.SocketException: java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:3306 connect,resolve)
Communications link failure Last packet sent to the server was 0
那么恭喜你,在linux下这个问题是必然,linux对权限控制很严格。你需要修改授权。
代码:
sudo vim /var/lib/tomcat6/conf/policy.d/04webapps.policy
/};
#末尾追加授权
#如果是其他IP对应修改localhost
    // All Web Application can access localhost mysql
    permission java.net.SocketPermission "localhost:3306", "connect";
#重启tomcat
sudo /etc/init.d/tomcat6 restart

这样问题就可以解决了,总觉得修改这个policy.d应该有一个命令,暂时不做追究,日后补充。

3.构建Apache环境
这里以Apache2为例
代码:
echo 安装apache2
sudo apt-get install apache2 apache2-utils apache2-mpm-worker -y

访问http://localhost看看是不是能够看到It works!,这就说明apache正常启动了。
如果你希望通过一种简单的GUI方式控制你的Apache,建议你使用WebMin。
稍后,我们介绍如何将Apache与Tomcat整合。
4.构建MySQL
这里以MySQL5为例
代码:
echo 安装MySQL
sudo apt-get install mysql-server mysql-client -y

如果你需要在你的ubuntu下以GUI方式控制你的MySQL,建议你安装MySQL-GUI工具。
代码:
sudo apt-get install -y mysql-admin mysql-query-browser mysql-gui-tools-common

安装最后会提示你输入root帐号的密码,这个root帐号是mysql的root帐号。
代码:
echo 登录MySQL
mysql -u root -p

提示输入密码,输入刚才安装MySQL时的密码即可。
以上步骤,完成了mysql的安装,但是这样完全不能满足我们的使用,主要的问题在于以下两点:

1.字符集问题。
2.远程访问问题。

我们依次解决此类问题。
代码:
echo 设置字符集
sudo vim /etc/mysql/my.cnf

找到 [mysqld] 在末尾加上以下内容:
代码:
#Set the default character set.
default-character-set=UTF8

找到[client] 在末尾加上以下内容:
代码:
#Set the default character set.
default-character-set=UTF8

重启MySQL
代码:
sudo /etc/init.d/mysql restart

登录你的MySQL,执行以下语句。
代码:
mysql> show   variables   like   "%colla%";   
+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database   | utf8_general_ci |
| collation_server     | utf8_general_ci |
+----------------------+-----------------+
3 rows in set (0.00 sec)

mysql> show   variables   like   "%char%";   
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

MySql 默认的字符集是 latin1,如果你能看到上述的结果说明字符集已经统一到UTF8了。
接着我们处理,远程访问问题。
MySQL的远程访问,就是我们通过ip访问MySQL服务,MySQL对于安全的要求是非常严格的,需要授权。
代码:
GRANT ALL PRIVILEGES ON *.* TO root@192.168.1.111 IDENTIFIED BY 'admin';

这里的root帐号不一定是mysql自身的那个root账户,可以自定义,根据需要设定。通过授权,我们可以在IP为192.168.1.111的主机上登录该MySQL的服务了,这里的密码是admin。

5.构建简单JSP工程
首先,需要构建目录结构,这里我们把项目定为lamj。
lamj\
|
|----index.jsp
|----WEB-INF\
|___|----web.xml
|___|----classes\
|___|----lib\
|___|___|----mysql-connector-java-5.1.6-bin.jar
附上web.xml
代码:
<?xml version="1.0" encoding="UTF-8"?>
<web-app
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns="http://java.sun.com/xml/ns/javaee"
   xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
   id="WebApp_ID"
   version="2.5">
   <display-name>lamj</display-name>
   <welcome-file-list>
      <welcome-file>index.html</welcome-file>
      <welcome-file>index.htm</welcome-file>
      <welcome-file>index.jsp</welcome-file>
      <welcome-file>default.html</welcome-file>
      <welcome-file>default.htm</welcome-file>
      <welcome-file>default.jsp</welcome-file>
   </welcome-file-list>
</web-app>

附上index.jsp页面代码
代码:
<%@ page language="java" contentType="text/html; charset=UTF-8"
   pageEncoding="UTF-8"%>
<%@ page import="java.sql.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>MySQL测试</title>
</head>
<body>
<%
   //驱动程序名
   String driverName = "com.mysql.jdbc.Driver";

   //数据库用户名
   String username = "root";

   //密码
   String password = "admin";

   //数据库名
   String databaseName = "test";

   //表名
   String tableName = "user";

   String server =  "localhost";
   String port = "3306";
   //联结字符串
   String url = "jdbc:mysql://" + server + ":" + port + "/"
         + databaseName + "?useUnicode=true&characterEncoding=UTF-8";
   Class.forName(driverName).newInstance();
   Connection connection = DriverManager.getConnection(url, username,
         password);

   Statement statement = connection.createStatement();
   String sql = "SELECT * FROM " + tableName;
   ResultSet rs = statement.executeQuery(sql);
%>
<table border="1">
   <caption>用户数据表数据</caption>
   <tr>
      <th>ID</th>
      <th>username</th>
      <th>password</th>
   </tr>
   <%
      while (rs.next()) {
         out.print("<tr><td>");
         out.print(rs.getString(1));
         out.print("</td><td>");
         out.print(rs.getString(2));
         out.print("</td><td>");
         out.print(rs.getString(3));
         out.print("</td></tr>");
      }
   %>
</table>
<%
   rs.close();
   statement.close();
   connection.close();
%>
</body>
</html>

将这个目录放到 /var/lib/tomcat6/webapps/ 下
其次,我们构建基础数据。
登录mysql,执行如下脚本:
代码:
CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET utf8 */;
USE `test`;
DROP TABLE IF EXISTS `test`.`user`;
CREATE TABLE  `test`.`user` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `username` varchar(45) NOT NULL,
  `password` varchar(45) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

INSERT INTO user(username,password) VALUES('张三','123456');
INSERT INTO user(username,password) VALUES('Zlex','123456');

SELECT * FROM user;

代码:
+----+----------+----------+
| id | username | password |
+----+----------+----------+
|  1 | 张三     | 123456   |
|  2 | Zlex     | 123456   |
+----+----------+----------+
2 rows in set (0.00 sec)

如果从控制台检索出来的数据能正常显示中文,就说明数据库部分ok了!
最后,访问http://localhost:8080/lamj
这时候你会看到页面上显示我们刚才输入的数据,并且正常显示中文。
6.整合
这里通过apache反向代理,指向tomcat下的lamj,作为LAMJ的简单示范。

代码:
sudo vim /etc/apache2/sites-available/default
#虚拟主机,让主机Http服务指向我们刚才的lamj下,在末尾节点加入ProxyPass 和 ProxyPassRevcerse
#自动跳转到lamj目录下
   ProxyPass /lamj/ http://localhost:8080/lamj/
    ProxyPassReverse /lamj/ http://localhost:8080/lamj/


    <Proxy *>
        Order Deny,Allow
        Deny from all
        Allow from all
    </Proxy>

接下来安装proxy,并重启apache2
代码:
sudo a2enmod proxy
sudo /etc/init.d/apache2 restart

现在再访问http://localhost/lamj/,就能正常访问lamj应用了,大功告成!


_________________
Free!~


最后由 snowolf 编辑于 2009-03-19 18:03,总共编辑了 15 次

页首
 用户资料  
 
2 楼 
 文章标题 : Re: 构建我的LAMJ
帖子发表于 : 2009-03-10 16:00 
头像

注册: 2007-10-29 22:12
帖子: 5353
地址: 江苏南京
系统: OSX 10.9 + Ub 1304
送出感谢: 0 次
接收感谢: 5
不明白为什么要加个apache?

tomcat加上apr就行了

如果要做jk负载均衡的话才需要用apache,或者仅仅用apache完成端口转发?


_________________
佛经说,人有八苦: 生、老、病、死、求不得、怨憎、爱别离、五阴盛 故我苦!
圣经说,人有七罪: 饕餮、贪婪、懒惰、淫欲、傲慢、嫉妒和暴怒  故我有罪!

我这篇帖子里面没有任何攻击我们伟大的中华人民共和国政府和任劳任怨的人民公仆(和本论坛高素质的版主)的文字和含义;

特此声明!

有些事,我们明知道是错的,也要去坚持,因为不甘心;有些人,我们明知道是爱的,也要去放弃,因为没结局;有时候,我们明知道没路了,却还在前行,因为习惯了。

欢迎来我的新浪微博@me


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 构建我的LAMJ
帖子发表于 : 2010-03-09 14:51 

注册: 2010-03-08 18:44
帖子: 3
送出感谢: 0 次
接收感谢: 0 次
好,我试试


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 3 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 3 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译