使用servlet首先要配置tomcat环境,tomcat这是一个servlet运行的容器,简单来说,由于编译好的servlet程序由于里面没有主方法,就必须有一个中间件响应客户端请求然后调用servlet,这个中间件就是tomcat容器,而且是一个必不可少的容器,当然还有很多其他的容器,但是运用最广的还是tomcat。
tomcat的下载安装与安装非常的简单,这里就不再赘述,需要注意的时候,必须要配置一个环境变量:JAVA_HOME,然后改环境变量的值指向JDK的安装路径即可。
下面来说说tomcat里的各个文件夹的作用于用途:
1、bin目录下主要存放的是运行tomcat所必须的处理文件,如startup.bat、shutdonw.bat等等;
2、conf目录下主要存放的是配置tomcat的通用配置文件主要是xml格式,下面说说这几个配置文件的作用
server.xml文件中存放的是tomcat提供Web服务的端口,我们可以在<Connector prot="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectoPort="8443">这里可以将8080改成任何你想的端口;
tomcat-user.xml这个文件用来配置tomcat的用户登录信息,context.xml文件的<Context>改成<Context reloadable="true">,这样我们在配置王tomcat之后可以无需重新启动tomcat就可以将配置加载,必须要说的是,这并不是总是有效的,有时候还是会出现需要重新启动tomcat的情况。
3、lib目录下存放的是一些运行tomcat所必须的jar包
4、temp目录用来存放临时文件
5、webapps目录是最重要的目录,这里面存放的是一些webapp的根目录,你可以在webapps下新建自己的webapp文件夹,然后部署自己的webapp,具体的配置方法,下面在介绍。
6、work目录保Web应用运行过程中,编译生成的class文件。
7、logs目录用来保存tomcat每次运行后产生的日志。
部署了tomcat环境,并且了解了tomcat的结构之后,下面我们开始部署自己的第一个webapp,部署webapp有两种方式,一种是图形界面部署,一种是直接在webapps目录下新建文件进行部署,这里我们采用了第二种,而且也推荐采用第二种,这种方式更加简洁灵活和方便。下面就采用第二种方式来部署一个超级简单的webapp。
1、在webapps目录下新建一个自己webapp的根目录my,然后在my目录下新建一个文件夹"WEB-INF"注意这里的大小写,必须一模一样,在my目录下,我们新建自己的主页index.html,这个主页中我们先新建一个非常简单的表单,其内容如下:
<form action="/my/HelloWorldServlet" method="get">
<input type="text" name="test">
<input type="submit" value="提交">
</form>
对于form表单中提交的“my/HttpTest”暂时不必理会,其中提交方式为“get”
2、在WEB-INF目录下我们暂时新建两个文件文件,classes和lib,同时新建一个web.xml的空文件, 这里同样也要严格注意大小写,classes目录用来存放我们编译好的额servlet文件,lib用来存放运行servlet所需要的一些jar包,而web.xml文件中的内容为了保险起见,我们直接从webapps\examples\WEB-INF\web.xml文件中直接拷贝过来,拷贝过来的内容中,我们仅仅保留“头”和<web-app...>这一对标签,其他的先全部删除。
3、编写我们的第一个servlet小程序,这里servlet做一个说明,其实它也是一个java小程序,不过与普通的java程序不同的有两点,一是它没有主方法,由tomcat来调用,二是它必须继承自HttpServlet这个类,表示它是一个servlet程序。具体的写法如下:
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HelloWorldServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//如果要想显示中文,则即必须在获取流之前,先添加如下的代码,设置好解析用的字符集
resp.setContentType("text/html;charset=gbk");
PrintWriter out = resp.getWriter();
//这个字符串里的内容就是在浏览器上显示的内容
String str = "<html><title></title><body>你好Hello World Servlet!!!</body></html>";
//将流中的内容写出去,
out.println(str);
out.flush();
out.close();
System.out.println("doget...");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
PrintWriter out = resp.getWriter();
String str = "<html><title></title><body>你好Hello World Servlet!!!</body></html>";
out.println(str);
out.flush();
out.close();
System.out.println("dopost...");
}
}
将上述java程序编译之后的class文件放入
webapps\my\WEB-INF\classes目录下,注意这里我们没有存放在包下,所以直接放入classes目录下即可,如果有包,则需要将整个包拷贝过来。
4、上述所有的工作做完之后,还需要最关键的一步配置,将我们配置的servlet的信息写入配置文件web.xml中,这里我们打开my\WEB-INF\web.xml文件,在这个文件中我们先前已经修改过一次,这次我们需要在<web-app>元素中添加子元素,完整的web.xml文件的内容如下:
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0"
metadata-complete="true">
<servlet>
<servlet-name>my</servlet-name>
<servlet-class>HelloWorldServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>my</servlet-name>
<url-pattern>/HelloWorldServlet</url-pattern>
</servlet-mapping>
</web-app>
其中<servlet>元素和<servlet-mapping>元素是成对出现的,<servlet>存放servlet的名称和类文件的名称及位置(如果有包,则必须带上包名),<servlet-mapping>则是存放servlet名称和响应servlet所必须配置的格式,其中“/”代表的是webapp的根目录,也就是说我们只有在浏览器中输入
“http://127.0.0.1:8080/my/HelloWorldServlet”时,servlet才会有响应。这个时候我们回头看看第一步中的form表单的写法:
<form action="/my/HelloWorldServlet" method="get">
这里的表单提交后跳转的页面的写法,也必须要符合我们servlet的响应规则,有一点不同的是,这里不能直接写/HelloWorldServlet,而是必须带上my文件,或者我们直接写成
<form action="http://127.0.0.1:8080/my/HelloWorldServlet" method="get">
也是可以的。
到此为止,一个简单的servlet程序就部署完成了,下面来进行验证。
在浏览器中输入:http://localhost:8080/my/index.html显示如下的页面,
然后我们点击提交按钮,如果出现如下的页面则说明部署成功,如果出现404错误,则表明部署失败
最后,我总结了一下部署过程中容易出错的地方:
1、xml文件没有配置正确,注意xml文件的格式要求是非常严格的,这一点不同于html,所以在配置的时候,要格外注意,特别是 <url-pattern>/HelloWorldServlet</url-pattern>中的斜线,一定不能掉,所以推荐直接从examples下的web.xml文件中拷贝文件并且修改,而不是手打,还有如果class文件部署在包下,则一定要将完整的包名加上去,如com.xn.HelloWorldServlet。
2、index.html文件中的跳转地址没有写正确,绝对路径或者相对路径都行,但一定要正确。
3、注意清理缓存。
4、如果在web.xml文件中一定要注意,一个<servlet.../>元素和<servlet-map.../>元素中的<servlet-name.../>子元素的值一定要相同,允许一个<servlet>对应一个或多个<servlet-map>,但是<servlet-map>必须有一个且只能有一个<servlet>。