先来个demo helloworld:
在 Tomcat 服务器的 webapps 下创建 test 目录 结构如下
helloServlet 代码,在cmd 中编译成class 文件。
package com.zll;
import javax.servlet.*;
import java.io.IOException;
public class helloServlet extends GenericServlet{
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
servletResponse.getOutputStream().write("hello~wrold".getBytes());
}
}
命令行窗口 cd 到 test/WEB-INF/classes 目录下
执行命令:
F:\Service\tomcat8\webapps\test\WEB-INF\classes>javac -classpath F:/Service/tomcat8/lib/servlet-api.jar -d . helloServlet.java
编译后直接生产如下目录文件:
web.xml 中配置 serlvet:
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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>helloServlet</servlet-name>
<servlet-class>com.zll.helloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>helloServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
启动 tomcat 服务器,访问 localhost:8080/test/hello 就会打印出
hello~wrold
Servlet 是什么:
Servlet是运行在服务器端的小程序:
Servlet不能独立运行,它只能运行服务器上(实现了Servlet-api接口的服务器上:例如tomcat)。从上面的例子可以看出,浏览器访问 该servlet,服务器来创建servlet 并调用 service 方法,在通过 response对象将数据输出给浏览器。
客户端发的任何请求都需要访问客户端的servlet(包括静态资源也是访问服务器 缺省的servlet)
做个试验:如果你web.xml 中配置了
<!-- 就会覆盖掉服务器默认的servlet 客户端就无法访问默认的静态资源了,需要你自己来处理-->
<url-pattern>/</url-pattern>
Servlet生命周期
init();
用户第一访问时启动调用,或者显示的配置,服务器启动时,调用。不论何种方式,servlet只会调用一次init 方法,一单启动,就一直驻留到服务器内存中,知道显示的调用distroy方法,或者服务器停止调用distroy方法时关闭。
service():
在客户请求时,调用该方法。service方法用来处理数据交互的地方。
destroy();
服务器停止。或者被显示调用时。
Servlet配置:
<servlet>
<!--找到指定的servlet 并起个名字叫 helloServlet-->
<servlet-name>helloServlet</servlet-name>
<servlet-class>com.zll.helloServlet</servlet-class>
<!--如果配置了改属性,那么该servlet会在服务器启动是创建
使用场景,struts中使用到了该配置,提前初始-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<!--给叫 helloServlet 的Serlvet 配置url匹配路径 -->
<servlet-name>helloServlet</servlet-name>
<url-pattern>/hello</url-pattern>
<!--
url可以谁知模糊匹配:
/aaa/*
/*
/*.do
优先匹配 限定级别最严谨的。 当出现 /aaa/aa.do 时 *.do 的匹配级别低于/aaa/*
-->
</servlet-mapping>
</web-app>