jsp和servlet详解

package 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;

public class MyServlet implements Servlet{
    /*servlet在第一次请求时由服务器创建实例并调用生命周期方法,其余的比较有用的方法(比如:getServletConfig)会在生命周期方法中做调用
     * servlet也可以在服务器启动时创建,servlet的创建可以在web.xml中的servlet中<load-on-startup>0</load-on-startup>配置,
     * 其中数值越小优先级越高。之所以配置是
     * 由于第一次创建servlet要完成的工作比较多,所以一般都是在启动服务器时就要求创建servlet,防止第一次请求耗时
     * 
     * 生命周期方法,由服务器调用:
     * init(有参),service(),destroy()
     * init(有参):完成初始化工作,只调用一次
     * service():处理请求,没请求一次就调用一次
     * destroy():服务器关闭之前调用,只调用一次
     */
    /*servlet有三大域:ServletContext,HttpServletRequest,HttpSession
     * 
     *jsp有九大内置对象(内置对象一般在jsp中能够直接使用,但是有特例:exception和session),
     *exception:在errorPage页面的isErrorPage属性为true时,才会被使用即抛出500异常
     *session:HttpSession,也是有属性限制,不过默认为true,可以直接使用.
     *out:输出流
     *request:HttpServlet,
     *response:HttpResponse
     *application:整个应用程序,真身是ServletContext
     *config:真身是ServletConfig
     *page:当前jsp对象  object page = this;
     *pageContext:一个顶九个
     *
     *四大域:在不同servlet之间传递数据,具备存取数据功能,类似Map集合,以键值对形式存取数据
     *application域:applicationScope
     *对应ServletContext,一个项目只能有一个,与服务器共生死,方法:setAttribute(),getAttribute(),removeAttribute()
     *也能获取资源路径
     *request域:requestScope,请求链
     *session域:sessionScope一个用户的会话
     *page域:pageScope,真身是pageContext,一个jsp页面和页面中标签共享数据,可以获取其他8个内置对象,因为可以通过方法获取其他内置对象。并代理其他域,即可以获取其他域中的数据
     *因为方法中多了getAttribute(String name, int scope)等一系列方法scope其他域的字段,甚至可以全域查找
     *
     *
     *三大组件:
     *filter
     *listen
     *servlet
     *
     *三大指令:
     *page
     *
     *include:静态包含,将本页面和被包含的页面在运行之前进行合并成一个jsp页面,再又服务器转为.java和.class文件(一个servlet)
     *
     *taglib:导入标签库
     *两个属性:
     *prefix:制定标签在本页面的前缀,本页面使用自定义标签库中的标签的前缀必须加上该前缀
     *uri:自定义标签库的位置
     *格式:<%@taglib prefix="s" uri="/.."%>  比如使用标签库中的a标签:<s:a>
     *
     *
     *jsp动作标签:
     *<jsp:include>:动态包含,运行时进行结果合并,文件并不会合并相当于方法调用,由服务器解释和执行,相当于RequestDispatcher.include();
     *<jsp:forward>:转发,由服务器解释和执行,相当于RequestDispatcher.forward();
     *<jsp:param>:参数,向动态包含和转发的页面传参数
     */
    @Override
    public void destroy() {
        // TODO Auto-generated method stub
        System.out.println("我是destroy。。。。");
    }
    //ServletConfig对应web.xml中的一个servlet配置信息
    @Override
    public ServletConfig getServletConfig() {
        // TODO Auto-generated method stub
        System.out.println("我是ServletConfig.....");
        return null;
    }
    //servlet的信息描述
    @Override
    public String getServletInfo() {
        // TODO Auto-generated method stub
        System.out.println("我是getServletInfo。。。。。");
        return "";
    }
    //完成初始化工作,ServletConfig参数是由服务器传进来的,可以拿来进行初始化
    @Override
    public void init(ServletConfig config) throws ServletException {
        config.getServletContext().setAttribute("name", "我是共享数据");
        System.out.println("我是init。。。。");
        
    }
    //处理请求,一般是抽象方法,为了让子类必须重写该方法,为了处理不同的用户请求,GenericServlet接口在实现servlet接口时就重写为了抽象方法
    @Override
    public void service(ServletRequest arg0, ServletResponse arg) throws ServletException, IOException {
        // TODO Auto-generated method stub
        /*GenericServlet实现的是Servlet接口,HttpServlet继承的是GenericServlet
         * 
         * GenericServlet中的service(ServletRequest,ServletResponse)方法是抽象方法
         * 需要HttpServlet重写,在重写的service(ServletRequest,ServletResponse)方法中
         * 调用自己本类中的service(HttpServletRequest,HttpServletResponse),而
         * service(HttpServletRequest,HttpServletResponse)方法会判断请求信息是doGet还是doPost,在调用与之对应的doGet或者
         * doPost,所以service(HttpServletRequest,HttpServletResponse)方法不需要子类重写,只需要重写doGet()和doPost()
         * 
         * (这两个方法不是抽象方法,有默认内容)
         * 如果没有复写doGet()和doPost()方法,,doGet()和doPost()默认的回应就是405错误,即不支持该请求方式
         * 
         * HttpServlet的service(ServletRequest,ServletResponse)方法:
         * HttpServletRequest request = (HttpServletRequest)servletRequest;
         * HttpServletResponse response = (HttpServletResponse)servletResponse;
         * service(request,response);//HttpServlet自己的方法,由生命周期方法调用比较重要的其他方法,子类重写的方法在被调用时会先加载父类的,由父类的生命周期方法调用其它方法
         * 
         */
        
        System.out.println("我是service。。。。");
    }

}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值