美文网首页
Tomcat的用途II(第一个Servlet程序)

Tomcat的用途II(第一个Servlet程序)

作者: secondtown | 来源:发表于2018-09-11 00:57 被阅读30次

    总结:

    本文主要是对第一个Servlet程序案例进行回顾。对该案例的配置过程进行梳理。着重关注Tomcat在其中所起到的作用。Tomcat除了能对虚拟主机、虚拟目录等进行映射外,还能将某些特定结构的文件夹进行路径映射。使用Eclipse来开发Servlet和自己手动搭建文件夹相比,不同之处就在于这些特定的文件夹结构的配置有所不同


      按照之前写的文章Tomcat的用途,如果要将web应用利用Tomcat来进行映射。需要设定虚拟主机、修改hosts、设定虚拟目录等三步操作。本文主要是搭建一个简单的Servlet,并且沿用Tomcat默认的虚拟主机,也就是沿用名为localhost的虚拟主机--(映射到)->Tomcat安装包下的webapps文件夹。这样就省去了前面两个步骤。第三步其实也可以省去,但是这样的话URL中访问路径必须和实际中webapps中的文件夹相同,也就是说这里并没有使用虚拟目录,这个目录是实实在在存在于虚拟主机localhost所对应的文件夹下的。所以就省去了虚拟目录的配置这一步。
      (准备工作)由于servlet程序是在JAVAEE程序而非JAVASE程序,所以所有的jar文件都需要手动加入到classpath中。我则是将tomcat的bin和lib目录路径都添加到环境变量中。

      上面的链接把重点放在Tomcat的映射设置方法。而这次的着重点在于web应用本身的组织结构。按照书本的例子,是在webapps文件夹下面创建一个chapter04应用。然后在这个chapter04文件夹下面创建\WEB-INF\classes目录用于存放HelloWorldServlet.class。

      HelloWorldServlet继承于GenericServlet,只需要实现service()方法,方法体如下:

    //得到输出流PrinterWriter对象
    PrintWriter out = response.getWriter();
    //使用输出流向客户端发送字符数据
    out.println("Hello World");
    

    注:这里是将字符直接打印出来显示给用户,所以使用字符流而不是字节流

      还需要在chapter\WEB-INF文件夹下新建一个web.xml。这个文件用于配置Servlet。对于一个servlet而言,需要引入<servlet>和<servlet-mapping>两个标签对。<servlet-mapping>用于将URL中的“虚拟路径”映射到某个具体的Servlet的名字,然后再根据servlet标签找到这个Servlet的所在位置。

      也就是说,我们访问localhost:/chapter04/HelloWorldServelt就会一步步被映射到
    <Tomcat安装目录>/webapps/chapter04/WEB-INF/classes/cn/itcast/firstapp/servlet/HelloWorldServlet.class 这个Servlet类

      然后HelloWorldServlet就会将“Hello World”这个字符串打印出来。

      其中路径映射中的localhost:/chapter04的部分比较好理解。不太好理解的是为什么HelloWorldServlet会自动定位到WEB-INF/classes下。又为什么需要在WEB-INF中编写web.xml来注册Servlet。我们创建文件夹时候,并没有额外进行配置,所以这些都归因于Tomcat的内在规范和配置。当我们把应用添加到tomcat的时候,除了之前说过的tomcat会添加虚拟主机和虚拟路径的映射外,还有一些其他的功能(目前来看,主要是自动将Servlet路径映射到WEB-INF/classes路径下,并且能主动读取WEB-INF的web.xml文件,实现的原理还不是很清楚),因为之前的路径映射看起来都是有理可寻的。怎么都能找到对应的配置文件进行映射,但到了这里就有点摸不着头脑了。

      在文章开头的链接给出的文章中。我们尝试了用浏览器来访问我们本地的文件夹中的视频文件。现在再结合Servlet程序实现一个随机播放的功能。之前的文章已经配置好了虚拟主机和虚拟目录。这里只需要调整项目文件夹的结构。
      视频文件资源如下:

    想要实现的功能:

    在浏览器地址栏中输入:video/jpvideo/random,浏览器随机打开文件夹里的某个视频。

    实现方法

      在jpvideo这个虚拟目录下新建一个WEB-INF>classes文件夹用于存放我们的RandomServlet,这个Servlet用于实现随机播放功能,并且在WEB-INF下新建一个web.xml用于配置Servlet。

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
    
     <servlet>
        <servlet-name>RandomServlet</servlet-name>
        <servlet-class>cn.itcast.firstapp.servlet.RandomServlet</servlet-class>
    </servlet>
    
     <servlet-mapping>
          <servlet-name>RandomServlet</servlet-name>
          <url-pattern>/random</url-pattern>
    </servlet-mapping> 
    
    </web-app>
    

    RandomServlet.java的代码如下:
      主要是通过Math.random()方法来构造随机数,然后通过将该随机数作为参数传入到<video>标签中,并在网页中呈现出来。

            package cn.itcast.firstapp.servlet;
            import java.io.*;
            import javax.servlet.*;
            import javax.servlet.http.*;
            import java.util.Random;
    
            public class RandomServlet extends HttpServlet {
                public void doGet(HttpServletRequest request, HttpServletResponse response)
                        throws ServletException, IOException {
                            response.setContentType("text/html;charset=utf-8");
                        
    
                            int randomPageIndex =  (int)(Math.random()*14+1);
                            String newvideo = "http://video:8080/jpvideo/"+String.valueOf(randomPageIndex)+".mp4";
                            PrintWriter out = response.getWriter();
                            
                            out.print("<video autoplay='true' src='"+newvideo +"'>"+"</video>");
    
                            
    
                    }
                public void doPost(HttpServletRequest request, HttpServletResponse response)
                        throws ServletException, IOException {
                    this.doGet(request,response);
                    
                }
            }
    

    打开cmd并执行startup.bat启动tomcat,在浏览器地址栏中输入
    video/jpvideo/random就可以随机跳转到文件夹中的视频了。想要切换到新的视频,只需要按下F5刷新浏览器就可以了。

    相关文章

      网友评论

          本文标题:Tomcat的用途II(第一个Servlet程序)

          本文链接:https://www.haomeiwen.com/subject/jvxygftx.html