作为Servlet的入门。先贴第一个Servlet代码
你写的类必须实现Servlet接口或者你写的类的父类及其以上必须实现Servlet接口
/**
*
*/
package com.yl.servlet;
import java.io.IOException;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;
/**
* @author YL
* @date 2019年3月2日
* @version
* @message
*/
public class MyServlet implements Servlet {
// 每次访问都会调用
public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
// TODO Auto-generated method stub
HttpServletResponse hrs = (HttpServletResponse)arg1;
hrs.getWriter().write("this is my frist Servlet!");
}
// Servlet创建时调用
public void init(ServletConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
//服务器关闭时调用
public void destroy() {
// TODO Auto-generated method stub
}
public ServletConfig getServletConfig() {
// TODO Auto-generated method stub
return null;
}
public String getServletInfo() {
// TODO Auto-generated method stub
return null;
}
}
Servlet生命周期
何时创建?
默认第一次调用Servlet时调用,通过在配置文件中的<servlet>下添加<load-on-startup>可以更改到服务器启动就创建,另外,<load-on-startup>里的参数是创建的优先级,一般不要写成1。
何时销毁?
服务器关闭时,销毁
init方法
参数: ServletConfig:内部封装着servlet配置文件的信息
service方法
参数:ServletRequest:请求,内部封装着Http请求信息。
参数: ServletResponse:响应,要封装的响应信息。
Servlet执行过程
Servlet配置
<url-pattern>下的各种匹配
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<!-- 完全匹配 -->
<url-pattern>/aaa</url-pattern>
<!-- 目录匹配 -->
<url-pattern>/bbb/aaa/*</url-pattern>
<!-- 扩展名匹配 -->
<url-pattern>*.html</url-pattern>
<!-- 缺省Servlet或者默认Servlet -->
<url-pattern>/</url-pattern>
</servlet-mapping>
1.完全匹配:,最后是aaa.主要使用的匹配方法
2.目录匹配:,只要开始是bbb/aaa后边随便写可以。
3.扩展名匹配:,只要后缀是.html
缺省的Servlet或者默认的Servlet(扩展)
<url-pattern>/</url-pattern>
其实,不只是我们自己写的web.xml(Servlet配置文件)中有<url-pattern>/</url-pattern> ,在Tomcat的全局web.xml里也有
打开,搜索<url-pattern>/</url-pattern>
然后搜索上边的类名可以找到一个类
总之,Servlet的运行,首先是找到这个全局文件的web.xml里的缺省servlet,然后找到类,通过DefaultServlet类才去找其他的例如html文件等静态文件,如果没找到,就执行默认的DefaultServer类中的service()方法,而只要输入的是正确的我们都可以找到html这类的静态资源。
而如果我们在自己的web.xml里使用了缺省的Servlet会怎么样呢?我们使用那个缺省的Servlet呢?全局还是局部?
当然就近原则,自己的了。而我们的servlet-class有没有去找这些静态资源的动作呢?没有。
于是我想访问http://localhost:8080/WEB05/form.html这个地址,但是我配置的Servlet类没有查找静态资源的动作,所以就默认没有该静态资源,而执行了Servlet类的service方法
从下图的项目结构可以看出,我是有form这个静态资源的