Servlet学习笔记

Servlet学习笔记

一.关于Servlet
    Servlet是sun公司提供的用于开发动态web资源的技术.
    Sun公司在其API中提供了一个Servlet接口,用户若想开发一个动态web资源(即开发一个Java程序向浏览器输出数据),需要完成以下2个步骤:
    ·编写一个Java类,实现Servlet接口.
    ·把开发好的Java类部署到web服务器中.
    为调用方便,sun提供了实现Servlet接口的两个默认实现类GenericServlet和HttpServlet,写程序时只需要继承这两个类,复写service方法即可.
    类GenericServlet和HttpServlet在包javax.servlet中.

二.第一个Servlet案例
    1.在tomcat服务器中新建一个web应用helloservlet,然后在web应用中新建一个WEB-INF/classes目录.
    2.在classes目录中新建一个java程序firstservlet.
      package cn.mytest;
      import java.io.*;
      import javax.servlet.*;
      public class firstservlet extends GenericServlet{
         public void service(ServletRequest req, ServletResponse res) throws ServletException, java.io.IOException{
            OutputStream out = res.getOutputStream();
            out.write("hello servlet".getBytes());
         }
      }
    3.指定servlet的java支持包,设置全局变量classpath,编译servlet程序.
      set classpath=%classpath%;C:\Tomcat 7.0\lib\servlet-api.jar
      javac -d . firstservlet.java
    4.在WEB-INF目录中新建一个web.xml文件,配置servlet对外访问路径.
      <?xml version="1.0" encoding="ISO-8859-1"?>
      <web-app xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                            http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
        version="3.0"
        metadata-complete="true">

        <servlet>
          <servlet-name>firstservlet</servlet-name>
          <servlet-class>cn.mytest.firstservlet</servlet-class>
        </servlet>

        <servlet-mapping>
          <servlet-name>firstservlet</servlet-name>
            <url-pattern>/firstservlet</url-pattern>
        </servlet-mapping>
      </web-app>
    5.启动tomcat,通过浏览器输入http://localhost:8080/helloservlet/firstservlet访问servlet.

三.访问Servlet的请求响应步骤
    ·客户端浏览器连接web服务器,发送http请求
    ·Web服务器解析出想访问的主机名、web应用和web资源
    ·Web服务器第一次创建Servlet实例对象
    ·Web服务器调用servlet的init方法完成对象初始化
    ·Web服务器创建代表请求request和代表响应的response对象,然后调用servlet的service方法响应客户端的请求
    ·编写的service方法执行,向代表客户端响应的response对象中写入向客户端输出数据.
    ·service方法返回,Web服务器从response中取出数据,构建出一个http响应,回写给客户机.
    ·浏览器解析http响应,提取数据显示.

四.Web服务器调用Servlet时传递的对象
    Web服务器调用servlet时传递的对象有Request,Response,ServletConfig,ServletContext,Session,Cookie等等.

    ServletConfig对象
    ·用于封装Servlet的配置信息.
    ·在Servlet的配置文件中,可以使用一个或多个<init-param>标签为servlet配置一些初始化参数.
    ·当Servlet配置了初始化参数后,web容器在创建servlet实例对象时,会自动将这些初始化参数封装到ServletConfig对象中,并在调用servlet的init方法时,将ServletConfig对象传递给servlet,进而,程序员通过ServletConfig对象就可以得到当前Servlet的初始化参数信息.
    ·初始化参数配置文件适用于指定servlet来自哪个码表,读哪个配置文件,指定连接数据库的信息等等.

    ServletContext对象
    ·Web容器在启动时,它会为每个Web应用程序都创建一个对应的ServletContext对象,它代表当前Web应用.
    ·ServletConfig对象中维护了ServletContext对象的引用,开发人员在编写Servlet时,可以通过ServletConfig.getServletContext方法获得ServletContext对象.
    ·ServletContext方法的应用
        ·由于一个Web应用中的所有Servlet共享同一个ServletContext对象,所以多个Servlet通过ServletContext对象实现数据共享.
          ServletContext对象通常也被称之为Context域对象.
        ·获取Web应用的初始化参数
        ·实现Servlet的转发
        ·利用ServletContext对象读取资源文件(得到文件路径,读取资源文件的三种方式,.properties文件(属性文件))

    Request和Response对象
    ·Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象和代表响应的response对象.
    ·Request和Response对象既然代表请求和响应,要获取客户机提交过来的数据,只需要找request对象,要向客户机输出数据,只需要找response对象.
    ·HttpServletResponse对象服务器的响应,这个对象中封装了向客户端发送数据、发送响应头、发送响应状态码的方法.
    ·Response常见应用
        ·向客户端输出中文数据
        ·文件下载和中文文件的下载
        ·输出随机图片(JDK的BufferedImage对象生成随机图片)
        ·发送http头,控制浏览器定时刷新网页
        ·发送http头,控制浏览器禁止缓存当前文档内容(控制Expires头)
        ·实现请求重定向(Response.sendRedirect(),实现原理302状态码和Location头实现重定向)
    ·HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中.
    ·Request常用方法
        ·getRequestURL方法返回客户端发出请求时的完整URL.
        ·getRequestURI方法返回请求行中的资源名部分.
        ·getQueryString方法返回请求行中的参数部分.
        ·getRemoteAddr方法返回发出请求的客户机的IP地址
        ·getRemoteHost方法返回发出请求的客户机的完整主机名
        ·getRemotePort方法返回客户机所使用的网络端口号
        ·getLocalAddr方法返回Web服务器的IP地址.
        ·getLocalName方法返回Web服务器的主机名.
        ·getMethod得到客户机请求方式
    ·Request常见应用
        ·获取请求头和请求数据(getHeader,getHeaderNames,getParameter,getParameterNames)
        ·通过表单收集客户机数据(getParameter,getParameterValues)
        ·Request对象实现请求转发,请求转发指一个web资源收到客户端请求后,通知服务器去调用另外一个web资源进行处理.
        ·防盗链(request.getHeader("referer");)
    ·关于Request实现请求转发
        ·请求转发的应用场景:MVC设计模式
        ·request对象提供了一个getRequestDispatcher方法,该方法返回一个RequestDispatcher对象,调用这个对象的forward方法可以实现请求转发
        ·request对象同时也是一个域对象,通过request对象在实现转发时,把数据通过request对象带给其它web资源处理
            (setAttribute,getAttribute,removeAttribute,getAttributeNames)
        ·forward方法用于将请求转发到RequestDispatcher对象封装的资源
        ·如果在调用forward方法之前,在Servlet程序中写入的部分内容已经被真正地传送到了客户端,forward方法将抛出IIIegalStateException异常.
        ·如果在调用forward方法之前向Servlet引擎的缓冲区(response)中写入了内容,只要写入到缓冲区中的内容还没有被真正输出到客户端,forward方法就可以被正常执行,原来写入到缓冲区中的内容将被清空,但是,已写入到HttpServletResponse对象中的响应头字段信息保持有效.
        ·include方法实现页面包含

五.会话管理
    会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话.
    会话过程中要解决的问题:每个用户与服务器进行交互的过程中,各自会有一些数据,程序要想办法保存每个用户的数据.
    保存会话数据的两种技术(Cookie与Session)
    ·Cookie是客户端技术,程序把每个用户的数据以cookie的形式写给用户各自的浏览器,当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去,这样,web资源处理的就是用户各自的数据了.
    ·Session是服务器端技术,利用这个技术,服务器在运行时可以为每一个用户的浏览器独享,所以用户在访问服务器的web资源时,可以把各自的数据放在各自的session中,当用户再去访问服务器中的其它web资源时,其它web资源再从用户各自的session中取出数据为用户服务.

    Cookie API
    javax.servlet.http.Cookie类用于创建一个Cookie,
    response接口中也定义了一个addCookie方法,它用于在其响应头中增加一个相应的Set-Cookie头字段,
    同样,request接口中也定义了一个getCookies方法,它用于获取客户端提交的Cookie
    Cookie类的方法:
    public Cookie(String name,String value)
    setValue与getValue方法
    setMaxAge与getMaxAge方法
    setPath与getPath方法
    setDomain与getDomain方法
    getName方法

    关于Cookie的细节
    ·一个Cookie只能标识一种信息,它至少含有一个标识该信息的名称(Name)和设置值(Value).
    ·一个Web站点可以给一个Web浏览器发送多个Cookie,一个Web浏览器也可以存储多个Web站点提供的Cookie.
    ·浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB.
    ·如果创建了一个cookie,并将它发送到浏览器,默认情况下它是一个会话级别的cookie(即存储在浏览器的内存中),用户退出浏览器后即被删除。
    ·若希望浏览器将该cookie存储在磁盘上,则需要使用maxAge,并给出一个以秒为单位的时间。将最大时效设为0则是命令浏览器删除该cookie.
    ·注意,删除cookie时,path必须一致,否则不会删除.

    Session
    ·在Web开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意,一个浏览器独占一个session对象(默认情况下)。因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其它程序时,其它程序可以从用户的session中取出该用户的数据.
    ·Session和Cookie的主要区别在于:
         Cookie是把用户的数据写给用户浏览器
         Session技术把用户的数据写到用户独站的session中
    ·Session对象由服务器创建,开发人员可以调用request对象的getSession方法得到session对象.
    ·Session的实质: 由于Web是无状态的,Session实质是借助Cookie来实现的,客户端浏览器在发出请求后,web服务器会给客户端浏览器一个唯一标识的Cookie,客户端浏览器下次再请求时,会带上这个唯一标识的Cookie.如果在浏览器把Cookie清除,这个Session就没有了。所以实质是借助Cookie来实现Session.

    Session应用案例
    ·使用Session完成用户登录
    ·利用Session防止表单重复提交
    ·利用Session实现一次性验证码

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值