JavaEE学习总结(1) - Servlet

1.关于servlet

首先servlet也是java的一个类。它是运行再服务器上的一个java小程序,它在服务器端运行处理客户请求并且做出响应。这也是它的作用。

2.servlet的生命周期

1.新生 :new ,当客户端发送一个请求时,Servlet容器(Tomcat)会查找内存中是否存在Servlet实例,如果不存在,就创建一个Servlet实例。

如果存在Servlet实例,就直接从内存中取出该实例来响应请求。
2.初始化 :一次。初始化阶段,init()方法被调用,可以在init()方法中自定义初始化。
3.服务(运行)阶段: service(doGet,doPost)提供服务,可以多次对客户端请求进行处理并做出响应。体现其作用。
4.销毁 :一次。销毁由容器完成,销毁调用Servlet的destroy()方法。
5.垃圾回收

3. Servlet处理请求

servlet处理请求主要是基于HttpServletRequest和HttpServletResponse对象的。这两个对象,前者封装了所有客户端请求,

后者封装了所有的响应。通过这两个对象对请求进行处理并做出相应。

4.HttpServletRequest对象

封装了所有客户端请求
常用方法:setCharacterEncoding():设置请求体中的字符编码;
    getParameter(name);根据参数名获得参数值;
    getSession(); 获取session
    getParamerterValues(name):根据参数名获得多个值;
    getParameterNames():获得所有的请求参数名
    getParameterMap():获得(请求名-值)对的集合
    getRemoteAddr():获得客户端的ip地址
    getRequestURL():获得完整的请求地址(地址栏)
    getRequestURI():获得uri(服务器之后的,不包含请求参数)
    getContextPath():获得上下文路径(布署在tomcat中的应用名)
    getServletPath():获得请求的uri-mapping(映射名,不包含应用名)
    getQueryString():获得请求参数字符串(post请求,无此字符串)
    getMethod():获得请求方法名;(get,post)

5.HttpServletResponset对象

封装了服务端给客户端的响应。

常用方法:getWriter():获得一个字符流;(生成网页)
        getOutputStream():获得字节流(下载)
        setContentType():设置内容类型;
        sendRedirct():重定向一个新的页面
        addHeader():向客户发送消息头
        addCookie():向客户发送一个小文本;

6.Servlet的其他接口

1.ServletContext接口

    ServletContext是由容器为我们创建的,只有一个,是servlet上下文接口,通过它可与容器(服务器)进行通迅;每一个工程只有一个上下文;

    1.它的作用是: 1.使用它访问运行环境;例如获得web应用运行的真实路径;(/webproject)
                2.使用它可存储所有servlet共享的数据;(一个环境下的所有servlet)

    2.常用方法:setAttribute();
            getAttribute();
            getContextPath();获取工程名
            getRealPath();

2.ServletConfig接口

    ServletConfig是servlet的配置信息对象,在init一个servlet时,我们通过它来获得在web.xml文件配置的数据;
    获得ServletConfig对象的方法;this.getServletConfig();
    常用方法: getInitParameter();
            getInitParameterNames();

7.Servlet的转发和重定向
转发和重定向都能让浏览器获得另外一个URL所指向的资源,但两者的内部运行机制有着很大的区别。

    1、转发:有两种方式获得转发对象(RequestDispatcher):一种是通过HttpServletRequest的getRequestDispatcher()方法获得,一种是通过ServletContext的getRequestDispatcher()方法获得;
转发是将request中的数据发送到jsp页面进行展示处理,总体来说是将一个web组件将未完成的处理通过容器转交给另外一个web组件继续完成,只有一次请求 例如:
request.getRequestDispatcher (“booklist.jsp"). forward(request, response);//转发到booklist.jsp

2、重定向:HttpServletResponse的sendRedirect()方法。
  服务器根据此请求寻找资源并发送给客户,它可以重定向到任意URL,不能共享request的数据,因为是多次请求。例如:response.sendRedirect(“login.jsp");//重定向到login.jsp

 详解:假设浏览器访问servlet1,而servlet1想让servlet2为客户端服务。此时servlet1调用sendRedirect()方法,将客户端的请求重新定向到Servlet2。接着浏览器访问servlet2,servlet2对客户端请求作出反应。浏览器URL的地址栏改变。


3、主要区别:
转发                                          重定向
服务器转向另一个新地址                 浏览器获取响应后再发一次新的请求
一个请求对象,且共享数据               两次请求,不共享数据
地址栏不变                           地址栏改变为新的地址
新地址必须是应用内部某个地址            可以是任意地址

8.Servlet实例可以有几个?

Servlet实例是可以有多个的,自己写xml就知道了。但一个实例必须对应一个url。但多例很少用,没有意义。
单例多线程就可以满足多用户请求,还节省资源。
所以实际上Servlet并不是单例,只是容器(希望)让它只实例化一次,变现出来的是单例的效果而已。只是Web容器在维护这些Servlet的时候只给创建一个实例存在JVM中,(但可以通过xml让服务器创建多个实例),用户请求服务时,服务器只调用它已经实例化好的Servlet对象来处理请求。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值