Topic: 环境变量与服务器设置----最大瓶颈

  Print this page

1.环境变量与服务器设置----最大瓶颈 Copy to clipboard
Posted by: SUNONEJcy
Posted on: 2004-08-23 23:39

学习JSP、servlet、JavaBean之初步
    环境变量与服务器设置----最大瓶颈

看了很多资料,包括专业书籍、网上心得,认为其实不少都是不明确的或是跟本就是错的,非常误人子弟,使得不少初学者伤透脑筋还不知所衷。现在我把正确的方法用简洁的方式表示如下,由于旨在让学习者能够迅速手工搭建基础环境,集中精力于学习内容上,所以这里只给出最简单实用的方式和工具设置:

在有 * 的地方,文章最下方有注释。

平台:win2k、winxp
  
*1
工具:
JDK  j2sdk-1_4_2-windows-i586
SERVER  Tomcat  jakarta-tomcat-5.0.16

*2
添加环境变量:
控制面板->系统->高级->环境变量->用户变量或系统变量均可,建议使用用户变量
  
新建以下变量:  
*3
变量名 变量值
JAVA_HOME  JDK安装目录
TOMCAT_HOME  Tomcat安装目录
  
*4
PATH    %JAVA_HOME%\bin;
CLASSPATH  .;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\ dt.jar;%TOMCAT_ HOME%\common\lib\servlet-api.jar; (如果是Tomcat 4.0 的话就是servlet.jar);
  
*5
如果使用sql2000的话请下载相应JDBC。
*同注释3
新建:SQL_JDBC_HOME  JDBC安装目录
设环境变量接上面:
%SQL_JDBC_HOME%\lib\msbase.jar; %SQL_JDBC_HOME%\lib\mssqlserver.jar; %SQL_ JDBC_HOME%\lib\msutil.jar;
  
    
sql 2000 的 JDBC 连接测试:
  
首先准备一个测试文件:
  
dbtest.java
  
import java.sql.*;
import javax.sql.*;
import java.io.*;
import java.util.*;
import javax.naming.*;
  
public class dbtest
{
public static void main(String args[])
{
//必须捕捉异常
try
{
//注册驱动程序
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");

/*获得连接,最后三个参数:数据库名、用户名、密码需要根据
你的情况更改,这里的数据库是安装sql时自带的,不必要修改*/
Connection con=DriverManager.getConnection("jdbc:microsoft:
sqlserver://localhost:1433;DataBaseName=pubs","sa","abc");
  
//创建声名
Statement stmt=con.createStatement();
  
//新建字符串,保存SQL语句,这里为检索pubs库的jobs表的所有字 段
String SQL=new String();
SQL="SELECT * FROM jobs";
  
//执行SQL语句,获得结果集
ResultSet rs=stmt.executeQuery(SQL);
  
//输出结果集
while(rs.next())
{
System.out.println(rs.getString("job_desc"));
}
  
//关闭结果集
rs.close();

//关闭声明
stmt.close();
  
//关闭连接
con.close();
}
//抛出两种异常
catch (java.lang.ClassNotFoundException ex)
{
System.err.println("SQLException dbtest() : " + ex.getMessage());
}
catch (SQLException ex)
{
System.err.println("SQLException dbtest() : " + ex.getMessage());
}
}
}
  
编译并执行上例,如果抛出异常请自己从结果中找答案。(因为可能性太多了^_^)
  
     
Tomcat的servlet环境映射:
  
在Tmocat的安装目录下的webapps下新建自己的目录,比如test
*6
在test下新建目录WEB-INF(要大写)
在WEB-INF下新建目录classes(存放class文件)
和目录lib(存放jar文件,本例中用不到)

然后准备两个测试文件:
web.xml
SimpleServlet.java
  
web.xml
  
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>test</display-name>
<description>
Servlet 2.4 Examples.
</description>
<servlet>
<servlet-name>SimpleServlet</servlet-name>
<!--定义了class的路径-->
<servlet-class>jwadbook.servlets.SimpleServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SimpleServlet</servlet-name>
<!--定义了servlet的访问url-->
<url-pattern>/SimpleServlet</url-pattern>
</servlet-mapping>
</web-app>
  
保存在WEB-INF下
  
SimpleServlet.java
  
*7
新建目录:
jwadbook
在其下新建目录:
servlets

SimpleServlet.java
    
package jwadbook.servlets;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;

public class SimpleServlet extends HttpServlet
{
public void init() throws ServletException
{
}
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
{
PrintWriter out=resp.getWriter();
      
resp.setContentType("text/html");
      
out.println("<html>");
out.println("<head>");
out.println("<title>Simple Servlet</title>");
out.println("</head>");
out.println("<body bgcolor=red>");
out.println("<center>");
out.println("<font color=blue size=5>");
out.println("<strong>I Know Servlet!</strong>");
out.println("</font>");
out.println("</center>");
out.println("</body>");
out.println("</html>");
out.flush();
}
public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
{
doGet(req, resp);
}
public void destroy()
{
}
}
  
编译此程序。
  
启动Tomcat,通过http://localhost:8080/test/SimpleServlet访问本程序。
另外Tomat 5.0\webapps\servlets-examples下有不少servlet的示例,有兴趣的话可以试着访问看看,与本例不同的是他们的访问地址是:
http://localhost:8080/servlets-examples/servlet/^^^^
为什么多中间多了一处servlet呢?因为人家的web.xml文件里定义的访问url的映射比如SessionExample是:
<servlet-mapping>
<servlet-name>SessionExample</servlet-name>
<url-pattern>/servlet/SessionExample</url-pattern>
</servlet-mapping>
对比上例,希望能对你有所启发。实际上在Servlet的应用中有些是可以自己
变更的,有些则一定不能更改,比如WEB-INF目录的层次关系,xml文件里具有
重要作用也是很有出错的可能性的“/”符号等等。
  
    
以上对比较容易出错但其实并不复杂的问题进行了说明,我可以保证以上示例和方法都是正确的和简洁的、易于维护的。如有问题可以致电我的邮箱:
YCY_751128@hotmail.com 非常希望这篇文章能对你(们)有所帮助,其实我也是初学者,也希望有更多的好文章使后学者少走不必要的弯路。







*1 其实软件版本并不重要,设置方法大同。

*2 用户变量更加清晰明了(当然是做学习用而言)。

*3 这两个变量仅起到代替字符串的作用,可以不设。

*4 正如操作系统利用PATH来搜索可执行程序一样,Java运行环境也会遍历
CLASSPATH来查找类,即便是HelloWorld这样简单的程序,JVM也会遍历
CLASSPATH定义的每一个路径,直到找到相应的文件为止。所以,这两个
变量名不能更改。变量值中.;代表当前路径;tools.jar;是工具API;
dt.jar;是运行环境API;Tomcat下的servlet.jar;(或servlet-api.jar)
是编译servlet不可或缺的API。

*5 如果不是通过安装而是通过copy的方式得到三个驱动文件就把\lib去掉。
后面这段如使用其他数据库和JDBC的话要相应更改。

*6 Servlet标准规定在Web程序内要有WEB-INF目录,该目录包括web.xml文件
、lib目录和classes目录,其中web.xml文件是Web程序的部署描述文件,
他告诉Web服务器有关Web程序的配置信息,在Web服务器启动时,Web服务
器会分析程序的web.xml文件进而载入Web程序,Web程序所使用的Java类
可以有两种形式:.jar文件存放在/WEB-INF/lib目录,.class文件存放在
/WEB/classes目录。

*7 这两个目录都不是必需的,但是这里是让读者适应非常重要的“打包”的概念,
同时也对应着上面web.xml中定义的servlet类的路径。


小提示:
# 与servlet不同,JavaBean部署在WEB-INF\classes下时必需打包。
# Tomcat在发现异常时会输出错误页,404代表找不到该页,500表
示文件书写有误;有些错误如JDBC连接错误会输出在控制台上显
示出来。
# 在更改目录和重新编译servlet或bean后必需重启Tomcat。


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923