配置好 jsp 服务器后, 如果网站程序使用到 Servlet ,就要进行对 Servlet 部署才能访问,

事实上 servlet 是用的很广泛的,关于 servlet 的一些资料,自己可以上网看。

首先我们会编写一个 servlet 来作为测试。

先看看我的 tomcat 的路径 /usr/local/tomcat/

介绍一下我的环境版本吧,CentOS 5.4  apache2.2.11 tomcat6.0.18

webapps目录下,创建一个我的工作目录 myServlets

# mkdir myServlets

跟着在myServlets下创建
WEB-INF目录,在WEB-INF目录下再创建 classes 目录,

# cd myServlets
# mkdir WEB-INF
# mkdir WEB-INF/classes

这个classes 目录是用来存放你编译好的.class(即是你要运行的servelt文件)

下面编写一个 servlet 文件,

vi HelloWorld.java

下面是内容,复制过去就可以了, HelloWorld.java 放在什么地方无所谓了。

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWorld extends HttpServlet {

 public void doGet(HttpServletRequest request, HttpServletResponse response)
 throws IOException, ServletException
 {
  response.setContentType("text/html");
  PrintWriter out = response.getWriter();
  out.println("<html>");
  out.println("<head>");
  out.println("<title>Hello World! - www.17rumen.com</title>");
  out.println("</head>");
  out.println("<body>");
  out.println("<h1>Hello World! - www.17rumen.com</h1>");
  out.println("</body>");
  out.println("</html>");
 }
}

下面进行编译,也就是把 .java 文件 编译成 .classes  文件。

#javac HelloWorld.java

[root@localhost myServlets]# javac HelloWorld.java
HelloWorld.java:2: package javax.servlet does not exist
import javax.servlet.*;
^
HelloWorld.java:3: package javax.servlet.http does not exist
import javax.servlet.http.*;
^
HelloWorld.java:6: cannot find symbol
public class HelloWorld extends HttpServlet {
                                ^
  symbol: class HttpServlet
HelloWorld.java:8: cannot find symbol
        public void doGet(HttpServletRequest request, HttpServletResponse response)
                          ^
  symbol:   class HttpServletRequest
  location: class HelloWorld
HelloWorld.java:8: cannot find symbol
        public void doGet(HttpServletRequest request, HttpServletResponse response)
                                                      ^
  symbol:   class HttpServletResponse
  location: class HelloWorld
HelloWorld.java:9: cannot find symbol
        throws IOException, ServletException
                            ^
  symbol:   class ServletException
  location: class HelloWorld
6 errors

出现6个错误, 注意:编译 servlet 只有 JDK这些包是不够的,还要加入 servlet 的相关包

才能编译,tomcat 目录下 有相关的包,现在配置一下。

 servlet-api.jar 看到 lib 目录下的这个包, 现在加入到 classpath 里面
[root@localhost ~]# vi ~/.bash_profile

添加的内容, 当然前提你要配置 好 TOMCAT_HOME 的路径,如果不会的话可以看以前的视频。
$TOMCAT_HOME/lib/servlet-api.jar

加入后 保存退出, 然后

[root@localhost ~]# source ~/.bash_profile

使刚才的配置 生效

再次进入刚才的目录进行编译

javac HelloWorld.java

编译后,看到 HelloWorld.class  说明编译成功了。

将HelloWorld.class文件都复制到刚才新建好的 webapps/myServlets/WEB-INF/classes目录下

========================

编写 web.xml , web.xml 保存路径 webapps/myServlets/WEB-INF

下面是内容:

<?xml version="1.0" encoding="ISO-8859-1"?>

<web-app>
<servlet>
<servlet-name>HelloWorld</servlet-name>
<servlet-class>HelloWorld</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloWorld</servlet-name>
<url-pattern>/HelloWorld</url-pattern>
</servlet-mapping>
</web-app>

保存退出

===============================

修改server.xml文件, 在 conf 目录下

添加, 注意 添加的位置,可以参考我的。

<Context path="/myServlets" docBase="myServlets" debug="0"
reloadable="true" crossContext="true"/>

然后保存,重启 tomcat
[root@localhost bin]# ./shutdown.sh
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:       /usr/java/jdk1.7.0

[root@localhost bin]# ./startup.sh

然后就可以进行测试访问 servlet 了。

http://192.168.138.128:8080/myServlets/HelloWorld

虽然可以正常访问,不过是通过 tomcat 的 8080 端口的,
我们一般做网站服务器 只开放 apache 的 80 端口!

如果你目的为了 学习 servlet ,这样配置已经可以了,呵呵。

===============================================

下面结合 apache ,也就是当apache 接受到 访问serlvet  的时候
自动转发给 tomcat 来处理。
vi /usr/local/apache2/conf/mod_jk.conf

加入
JkMount /myServlets/* worker1

然后保存, 简单说一些这句话意思,当用户访问地址中含有 /myServlets  这个路径的
不管后面是什么东西 全部交给 tomcat 来处理

下面重启 apache

# /usr/local/apache2/bin/apachectl stop

# /usr/local/apache2/bin/apachectl start

然后测试

http://192.168.138.128/myServlets/HelloWorld

好了, 没有问题了, 这说明 可以通过 apache 来访问 servlet 了,

=================================================

下面问题又来了,如果我们的 mySerlvet 不是放在 tomcat 的 webapps 目录下呢 ?

我们尝试移动 刚才的 myServlets 到 apache 目录下, 不再使用 tomcat 的虚拟目录

mv /usr/local/tomcat/webapps/myServlets /usr/local/apache2/htdocs/

然后进行访问一下

HTTP Status 404 -

-----------------------------------------

type Status report

message

description The requested resource () is not available.
----------------------------------------

Apache Tomcat/6.0.18

呵呵,马上出错了, 出现 404 说明找不到网页。

下面来进行一些配置修改

把 server.xml 刚才添加的语句进行修改

<Context path="/myServlets" docBase="/usr/local/apache2/htdocs/myServlets" debug="0"
reloadable="true" crossContext="true"/>

然后重启 tomcat

再刷新访问

http://192.168.138.128/myServlets/HelloWorld

发现可以正常访问了。呵呵, 好了这样就配置完成了 servlet ,包括
apache 的转发访问 servlet 还有目录的改变。。。 视频到这里了 8


“CentOS5.3_JSP服务器_10 tomcat6.0.18 配置 servlet 再结合 apache2.2.11 的转发访问”有5个评论

  1. 11月 10th, 2009 at 18:57:11 #yzhkpli

    跟着在myServlets下创建
    WEB-INF目录,在WEB-INF目录下再创建 classes 目录,

    # cd myServlets
    # mkdir WEB-INF
    # mkdir WEB-INF/classes


    mkdir -p /usr/local/webapps/WEB-INF/classes/
    就可以了

    [回复]

    adminreply on 2009-11-12 10:07:02:

    呵呵, 的确这样方便, 谢谢

  2. 11月 10th, 2009 at 23:44:00 #yzhkpli

    添加了

    后,重启tomcat,发现是报错!!

    我的地址:http://192.168.1.55:8080/myServlets/HelloWorld

    HTTP Status 500 -

    type Exception report

    message

    description The server encountered an internal error () that prevented it from fulfilling this request.

    exception

    javax.servlet.ServletException: Error allocating a servlet instance
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
    org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
    org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
    java.lang.Thread.run(Thread.java:717)

    root cause

    java.lang.NoClassDefFoundError: javax/servlet/http/HttpServlet
    java.lang.ClassLoader.defineClass1(Native Method)
    java.lang.ClassLoader.defineClass(ClassLoader.java:764)
    java.security.SecureClassLoader.defineClass(SecureClassLoader.java:144)
    java.net.URLClassLoader.defineClass(URLClassLoader.java:382)
    java.net.URLClassLoader.access$100(URLClassLoader.java:75)
    java.net.URLClassLoader$1.run(URLClassLoader.java:294)
    java.net.URLClassLoader$1.run(URLClassLoader.java:288)
    java.security.AccessController.doPrivileged(Native Method)
    java.net.URLClassLoader.findClass(URLClassLoader.java:287)
    java.lang.ClassLoader.loadClass(ClassLoader.java:399)
    sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:325)
    java.lang.ClassLoader.loadClass(ClassLoader.java:332)
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1302)
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
    org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
    org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
    java.lang.Thread.run(Thread.java:717)

    root cause

    java.lang.ClassNotFoundException: javax.servlet.http.HttpServlet
    java.net.URLClassLoader$1.run(URLClassLoader.java:299)
    java.net.URLClassLoader$1.run(URLClassLoader.java:288)
    java.security.AccessController.doPrivileged(Native Method)
    java.net.URLClassLoader.findClass(URLClassLoader.java:287)
    java.lang.ClassLoader.loadClass(ClassLoader.java:399)
    sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:325)
    java.lang.ClassLoader.loadClass(ClassLoader.java:332)
    java.lang.ClassLoader.defineClass1(Native Method)
    java.lang.ClassLoader.defineClass(ClassLoader.java:764)
    java.security.SecureClassLoader.defineClass(SecureClassLoader.java:144)
    java.net.URLClassLoader.defineClass(URLClassLoader.java:382)
    java.net.URLClassLoader.access$100(URLClassLoader.java:75)
    java.net.URLClassLoader$1.run(URLClassLoader.java:294)
    java.net.URLClassLoader$1.run(URLClassLoader.java:288)
    java.security.AccessController.doPrivileged(Native Method)
    java.net.URLClassLoader.findClass(URLClassLoader.java:287)
    java.lang.ClassLoader.loadClass(ClassLoader.java:399)
    sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:325)
    java.lang.ClassLoader.loadClass(ClassLoader.java:332)
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1302)
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
    org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
    org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
    java.lang.Thread.run(Thread.java:717)

    note The full stack trace of the root cause is available in the Apache Tomcat/6.0.20 logs.

    [回复]

    adminreply on 2009-11-12 10:08:54:

    java.lang.ClassNotFoundException: javax.servlet.http.HttpServlet

    有可能是你没有配置好 classpath ,把tomcat 的 lib 目录添加到 classpath 里面, 现在这个错误可能是 没有找到 servlet 相关的 .jar 导致的。

  3. 01月 27th, 2010 at 17:02:46 #匿名

    配置成功,谢谢!

    [回复]

有任何疑问或建议,可以给作者留言:



公告:

  • 2010年5月之前的视频是文字解说演示,没有声音。
  • 2010年5月以后的视频全部带声音。