zoukankan      html  css  js  c++  java
  • Servlet基础学习

      Servlet学习
      Servlet是Server与Applet的缩写,是服务端小程序的意思。使用Java语言编写的服务器端程序,可以像生成动态的WEB页,Servlet主要运行在服务器端,并由服务器调用执行,是一种按照Servlet标准来开发的类。
      Servlet本质上也是Java类,但要遵循Servlet规范进行编写,没有main()方法,它的创建、使用、销毁都由Servlet容器进行管理(如Tomcat)。
      Servlet容器
      提供了Servlet功能的服务器,叫做Servlet容器,其常见容器有很多,如Tomcat, Jetty, WebLogic Server, Websphere, JBoss等等。
      作用:接收请求数据, 处理请求, 完成响应。

      HttpServletRequest对象
      HttpServletRequest对象:  主要作用是用来接收客户端发送过来的请求信息,例如:请求的参数,发送的头信息等都属于客户端发来的信息,service()方法中形参接收的是HttpServletRequest接口的实例化对象,表示该对象主要应用在HTTP协议上,该对象是由Tomcat封装好传递过来。
      常用的方法
      getRequestURL:            返回客户端发出请求时的完整URL
      getRequestURI:             返回请求行中的资源名部分(项目名称开始)
      getQueryString :             返回请求行中的参数部分
      getMethod:                获取客户端请求方式
      getProtocol:                 获取HTTP版本号
      getContextPath:               获取webapp名字

      getHeader (String name):          获取单个请求头内容
      Enumeration<String> getHeaderNames():  获取所有的请求头名称集合

      getParameter(name):           获取指定名称的参数值,这是最为常用的方法之一。
      getParameterValues(String name):      获取指定名称参数的所有值数组。它适用于一个参数名对应多个值的情况:如页面表单中的复选框,多选列表提交的值。
      getParameterNames():  返回一个包含请求消息中的所有参数名的Enumeration对象。通过遍历这个Enumeration对象,就可以获取请求消息中所有的参数名。
      getParameterMap():   返回一个保存了请求消息中的所有参数名和值的Map对象。Map对象的key是字符串类型的参数名,value是这个参数所对应的Object类型的值数组
      请求乱码解决
      req.setCharacterEncoding("UTF-8");这种方式只针对POST有效
      new String(req.getParameter(name).getBytes(“ISO-8859-1”));

      request域对象,通过该对象可以在一个请求中传递数据,作用范围:在一次请求中有效,即服务器跳转有效
      request.setAttribute():          设置request域对象内容
      request.getAttribute(String name):      获取指定request域对象内容
      request.removeAttribute(String name):    删除指定request域对象

      HttpServletResponse对象
      HttpServletResponse的主要功能用于服务器对客户端的请求进行响应,将WEB服务器处理后的结果返回给客户端。service()方法中形参接收的是HttpServletResponse接口的实例化对象,这个对象中封装了向客户端发送数据、发送响应头,发送响应状态码的方法。

      常用方法
      addCookie(Cookie cookie):           将指定的Cookie加入到当前的响应中
      addHeader(String name,String value):    将指定的键值加入到响应头信息中
      containsHeader(String name) :        返回一个布尔值,判断响应的头部是否被设置
      encodeURL(String url):             编码指定的URL
      sendError(int sc):              使用指定状态码发送一个错误到客户端
      sendRedirect(String location):          发送一个临时响应到客户端,重定向
      setHeader(String name,String value):      将给出的名字和值设置响应的头部
      setStatus(int sc):               给当前响应设置状态
      setContentType(String ContentType):     设置响应的MIME类型
      getWriter():                获取输出字符流
      getOutputStream():             获取输出的字节流

      刷新、跳转页面
      resp.setHeader("refresh","2");                    定时刷新
      response.setHeader("refresh","3;URL=login.html");            定时跳转,3秒后跳转到登录界面
      <meta http-equiv="refresh" content="3;http://www.shsxt.com>;     HTML设置头信息实现客户端跳转

      返回状态码
      sendError(int sc);             设置错误状态代码
      sendError(int sc,String msg);          设置状态码,并返回一条错误信息

      添加Cookie
      addCookie("islogin","true");         浏览器保存Cookie。Cookie常用来维护会话状态。

      跳转
      request.getRequestDispacther(“url”).forword(request,response);     请求转发,服务器跳转,地址栏的URL不变

      response.sendRedirect("url");        请求重定向,属于客户端跳转,地址栏改变,存在两个请求
      重定向过程:客户浏览器发送http请求--->web服务器接受后发送302状态码响应及返回对应的location给客户浏览器-->浏览器发现是302响应,自动再发送一个新的http请求,请求的url是新的location地址-->服务器根据此请求寻找资源并发送给客户。

      响应乱码解决
      当服务器端响应给客户端中文时,可能存在乱码
      两种方式响应回数据:PrintWriter 和 ServletOutputStream
      PrintWriter():
      response.setCharacterEncoding("utf-8");
      response.setHeader("content-type", "text/html;charset=utf-8");
      ServletOutputStream();
      response.setContentType("text/html;charset=utf-8");

      HttpSession对象

      常用方法
      setAttribute(String name,Object value):       将value对象以name名称绑定到会话。
      getAttribute(String name):            取得name的属性值,如果属性不存在则返回null。
      removeAttribute(String name):          从会话中删除name属性,若不存在不会执行,也不会抛处错误。
      Enumeration getAttributeNames():         返回和会话有关的枚举值。
      invalidate():                   使会话失效,同时删除属性对象。
      isNew():                    用于检测当前客户是否为新的会话。
      long getCreationTime():             返回会话创建时间。
      getLastAccessedTime():               返回会话时间内web容器接收客户最后发出的请求时间。
      int getMaxInactiveInterval():            返回在会话期间内客户请求的最长时间为秒。
      setMaxInactiveInterval(int seconds):          允许客户客户请求的最长时间。
      ServletContext getServletContext():        返回当前会话的上下文环境,ServletContext对象可以使Servlet与web容器进行通信。
      String getId():                    返回会话期间的识别号。

      Session:                    默认是在第一次使用Session时被创建。
      Cookie:     大部分都是通过服务器主动(程序手动)设置到浏览器的, 只有JSESSIONID是服务自己设定的, 不需要程序员操心。

      ServletContext对象
      一个web应用只有一个ServletContext对象,所有的servlet都共享这个ServletContext对象,又称为Application对象。ServletContext 对象包含在 ServletConfig 对象中,ServletConfig对象在初始化 servlet 时由 web 服务器提供给 servlet。

      常用方法
      getInitParameter(String name):          获取初始化参数
      getResource(String parh)方法:          其中path必须是/开头,代表当前web应用程序的根目录。返回返回的一个代表某个资源的URL对象。
      getResoutceAsStream(String parh):        返回文件流。这个好处是可以使用相对于根目录的路径访问到web目录下的所有文件,而不必知道绝对路径。
      getContextPath():                得到web应用的路径
      getRealPath():                   获取绝对路径

      servletcontext域对象
      ServletContext是一个全局的储存信息的对象,服务器开启就存在,服务器关闭才释放。

    一个用户可有多个request;一个用户只有一个session;而所有用户共用一个servletContext。所以为了节省空间提高效率,ServletContext中存放的信息是必须的、重要的、所有用户需要共享的线程。

      request.getServletContext().setAttribute():            设置域对象内容
      request.getServletContext().getAttribute(String name):        获取域对象内容
      request.getServletContext().removeAttribute(String name):     删除域对象

  • 相关阅读:
    Clojure新手入门
    背包问题——第一篇
    矩阵快速幂的最简单用法
    加密的病历单
    JAVA NIO学习四:Path&Paths&Files 学习
    JAVA NIO学习三:NIO 的非阻塞式网络通信
    JAVA NIO学习二:通道(Channel)与缓冲区(Buffer)
    JAVA NIO学习一:NIO简介、NIO&IO的主要区别
    JAVA IO分析三:IO总结&文件分割与合并实例
    JAVA IO分析二:字节数组流、基本数据&对象类型的数据流、打印流
  • 原文地址:https://www.cnblogs.com/zengming/p/8422714.html
Copyright © 2011-2022 走看看