总结:
本文主要是对第一个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而言,需要引入
也就是说,我们访问localhost:/chapter04/HelloWorldServelt就会一步步被映射到
然后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。
RandomServlet
cn.itcast.firstapp.servlet.RandomServlet
RandomServlet
/random
RandomServlet.java的代码如下:
主要是通过Math.random()方法来构造随机数,然后通过将该随机数作为参数传入到
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("");
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request,response);
}
}
打开cmd并执行startup.bat启动tomcat,在浏览器地址栏中输入
video/jpvideo/random就可以随机跳转到文件夹中的视频了。想要切换到新的视频,只需要按下F5刷新浏览器就可以了。