学习servlet【续】

Servlet的三生命周期

Servlet的生命周期是由Servlet的容器来控制的,它可以分为3个阶段;初始化,运行,销毁。

当客户端第一次请求Servlet时,Servlet被加载到内存中,容器会创建Servlet实例,并调用其init() 方法进行初始化工作

容器创建请求对象和响应对象,然后调用Servletservice()方法为客户端提供服务

Servlet不再被需要时,容器调用Servletdestory()方法将Servlet实例销毁。

Servlet API

直接实现Servlet接口,需要实现5个方法

public interface Servlet { 
    public void init(ServletConfig config) throws ServletException; 
//servlet对象创建后执行初始化操作,例如通过config读取配置信息 
    public ServletConfig getServletConfig(); 
//获取当前Servlet对象的相关 ServletConfig对象。ServletConfig对象用于封装当前Servlet对象的配置信息 
    public void service(ServletRequest req, ServletResponse res)throws ServletException, IOException; 
//对外提供服务。Servlet针对多用户会采用单实例多线程的 方式对外提供服务 
    public String getServletInfo(); 
//获取当前Servlet的说明信息,一般供工具使用 
    public void destroy(); 
//在当前Servlet实例被GC回收前所运行的方法,一般用于资源回收
}

为了简化开发,所以Sun提供了一个通用抽象父类GenericServlet。针对大部分方法提供了默认的空实现,只需要Servlet提供service方法的实现即可,一般用于非通用协议开发中。采用的是适配器模式

public class Hello3Servlet extends GenericServlet { 
    @Override 
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { 
    } 
}
为了进一步简化开发,提供针对 http 协议的支持, Sun 提供了一个 GenericServlet 的子类 HttpServlet ,这个父类专门用于 http 协议的应用开发中,是模板模式
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 
    String method = req.getMethod(); //获取客户端的请求方法,例如get/post之类 
    if (method.equals(METHOD_GET)) { //如果是GET请求则调用doGet方法 
        ... 
        doGet(req, resp); //转向调用自己的doGet方法 
    } else if (method.equals(METHOD_HEAD)) { 
        doHead(req, resp); 
    } else if (method.equals(METHOD_POST)) { 
        doPost(req, resp); 
    } else if (method.equals(METHOD_PUT)) { 
        doPut(req, resp); 
    } else if (method.equals(METHOD_DELETE)) { 
        doDelete(req, resp); 
    } else if (method.equals(METHOD_OPTIONS)) { 
        doOptions(req,resp); 
    } else if (method.equals(METHOD_TRACE)) { 
        doTrace(req,resp); 
    } else { //如果是其它请求方法则报错 
        String errMsg = lStrings.getString("http.method_not_implemented"); 
        Object[] errArgs = new Object[1]; 
        errArgs[0] = method; 
        errMsg = MessageFormat.format(errMsg, errArgs);             
        resp.sendError(HttpServletResponse.SC_NOT_IMPLEMENTED, errMsg); 
    } 
}
默认的 doGet 方法实现
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 
    String protocol = req.getProtocol(); //获取请求所使用的协议,例如http/1.1 
    String msg = lStrings.getString("http.method_get_not_supported"); 
    if (protocol.endsWith("1.1")) { 
        resp.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, msg); 
    } else { 
        resp.sendError(HttpServletResponse.SC_BAD_REQUEST, msg); 
    } 
}

ServletConfig对象

对应的是Servlet的配置参数信息,由服务器提供对应的具体实现。具体实现是在服务器调用init方法时传入到Servlet实例中。例如init()init(ServletConfig config)

config对象由服务器提供实现,并在服务器调用该方法时传入Servlet实例

public interface ServletConfig { 
    public ServletContext getServletContext(); 
//用于获取Servlet上下文对象 
    public String getInitParameter(String name);
//用于获取当前Servlet对象的配置 参数 
    public Enumeration<String> getInitParameterNames();
//用于获取当前Servlet对象 的所有配置参数的迭代器 
}

response响应

ServletResponse对象用于封装服务器的响应信息

设置响应头:

 request请求

ServletRequest对象是在servlet接口中所定义的service方法中出现

public void service(ServletRequest req, ServletResponse res) 
throws ServletException, IOException;
·用于封装客户端的请求信息
·是由服务器提供对应的实现类

jspSmartUpload

文件上传下载组件,是由jspsmart.com开发的一个可免费使用的全功能的文件上传下载组件,适于嵌入执行上传下载操作的 JSP 文件中

1、使用简单。在 JSP 文件中仅仅书写三五行 JAVA 代码就可以搞定文件的上传或下载,方便

2、能全程控制上传。利用 jspSmartUpload 组件提供的对象及其操作方法,可以获得全部上传文件的信息(包括文件名,大小,类型,扩展名,文件数据等),方便存取。

3、能对上传的文件在大小、类型等方面做出限制。如此可以滤掉不符合要求的文件

4、下载灵活。仅写两行代码,就能把 Web 服务器变成文件服务器。不管文件在 Web 服务器的目录下或在其它任何目录下,都可以利用 jspSmartUpload 进行下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值