11servlet接口

11.servlet接口-2018/07/23

  • 1.servlet
    • 是一个接口,需要导包javax.servlet.Servlet;
    • 第一种编写一个servlet程序的方法
      • 写一个Java类,实现servlet接口
      • 修改web.html文件,给servlet提供一个可访问的url地址(创建servlet实例,提供一个可访问的URL地址)
      • 部署应用到Tomcat服务器
      • 测试:http://localhost:8080/day11/demo1
  • 2.生命周期
    • servlet第一次访问时调用实例化和初始化方法,service方法每次方法都被调用
    • 如何让servlet在服务器启动时就创建
      • 添加<load-on-startup>2</load-on-startup>
  • 3.servlet的三种创建方式
    • 上边那种
    • extends GenericServlet
    • extends HttpServlet(开发常用)
      • 不能重写父类的service方法
  • 4.映射细节
    • .do 以.字符串的请求都可以访问
    • /*任意字符串都可以访问
    • /action/* 以action开头的请求都可以访问
    • /(斜杆)优先于.(后缀名)
  • 5.ServletConfig的使用
    • 作用:
      • 可以获取servlet配置信息
      • 可以获得ServletContext对象
    • 方式:
      • 用init方法把服务器创建的对象进行操作 ...init{this.config = config;} ...config.getInitParameter("encoding")根据配置文件中的名,得到值
      • 通过继承父类的方法得到ServeltConfig对象 ...this.getServletConfig().getInitParameter("encoding")
      • 通过继承父类方法 ...this.getInintParameter("encoding")
  • 6.ServletContext: 代表的是整个应用
    • 一个应用只有一个ServletContext对象
    • 作用:
      • 域对象:在一定范围内(当前应用),使多个Servlet共享数据。
        • 常用方法: void setAttribute(String name,object value);//向ServletContext对象的map中添加数据 Object getAttribute(String name);//从ServletContext对象的map中取数据 void removeAttribute(String name);//根据name去移除数据
      • 获取全局配置信息:修改web.xml文件:
      • 获取资源路径:可以得到任何路径的任何资源 String path = this.getServletContext().getRealPath("/WEB-INF/a.properties"); Properties pro = new Properties(); pro.load(new FileInputStream(path)); System.out.println(pro.getProperty("key"));
      • 实现请求转发 ServletContext application = this.getServletContext(); application.getRequestDispatcher("/servlet/demo6").forward(req, resp);
  • 7.与Servlet相关的对象
    • Servlet 接口javax.servlet.Servlet
    • GenericServlet 抽象类javax.servlet.GenericServlet
    • HttpServlet 抽象类javax.servlet.HttpServlet
    • ServletConfig 接口 javax.servlet.ServletConfig
    • ServletContext 接口 javax.servlet.ServletContext
    • ServletRequest 接口 javax.servlet.ServletRequest
    • ServletResponse 接口 javax.servlet.ServletResponse
    • HttpServletRequest 接口 javax.servlet.http.HttpServletRequest
    • HttpServletResponse 接口 javax.servlet.http.ServletResponse
  • 8.HttpServletResponse
    • 1.响应行
      • setStatus(int sc) 设置响应状态码
    • 2.响应头
      • sendRedirect(String location) 请求重定向
      • setHeader(String name, String value) 设置响应头信息 //告诉客户端用什么编码 response.setHeader("content-type", "text/html;charset=UTF-8");
    • 3.响应正文(主体)
      • getWrite(); 字符输出流,得到ServletOuputStream对象
      • getOutputStream(); 字节输出流,得到PrintWriter对象,与上一个方法不能同时使用
      • setCharacterEncoding(String charset) 告知服务器使用什么编码
      • setContentType(String type) response.setContentType("text/html; charset=UTF-8");
  • 9.文件下载
    • URLEncoder.encode(filename,"UTF-8");将不安全的文件名改为UTF-8格式
  • 10.缓存问题
    • 告诉客户端不使用缓存 response.setHeader("pargma","no-cache"); response.setHeader("cache-control","no-cache"); response.setIntHeader("expires",0);
  • 11.刷新
    • 注册成功后跳转 response. getWriter().write("注册成功!3秒后跳转页面..."); response. setHeader("refresh","3;url=要跳转页面的路径");
  • 12.HttpServletRequest
    • 请求行 Get http://localhost:8080/day09/servlet/req1?username=zs http/1.1 getMethod(); 获得请求方式 getRequestURL();返回客户端发出请求时的完整URL。问号前的 getRequestURI(); 返回请求行中的资源名部分。/day09/servlet/req1 getContextPath();(重要)当前应用的虚拟目录(名称) /day09 getQueryString() ; 返回请求行中的参数部分。问号后的东西
    • 请求消息头 String getHeader(String name) 根据头名称得到头信息值 Enumeration getHeaderNames() 得到所有头信息name Enumeration getHeaders(String name) 根据头名称得到相同名称头信息值
    • 请求正文(重要)
      • 与获取表单数据相关的方法 input type="text" name="username" /> getParameter(name) 根据表单中name属性的名,获取value属性的值方法 getParameterValues(String name)专业为复选框取取提供的方法 getParameterNames() 得到表单提交的所有name的方法 getParameterMap 到表单提交的所有值的方法 //做框架用,非常实用 getInputStream 以字节流的方式得到所有表单数据
      • 与操作非表单数据相关的方法(request也是一个域对象) void setAttribute(String name, Object value); Object getAttribute(String name); Void removeAttribute(String name);
      • 与请求转发相关的方法
        • 转发request由服务器执行,客户端只发送一次请求,地址栏不变,转发能传递数据
        • 重定向由客户端执行,客户端发送两次请求,地址栏发生变化,不能传递数据,可以跳转到其他应用 //得到请求转发或请求包含的协助对象 RequestDispatcher getRequestDispatcher(String path) forward(ServletRequest request, ServletResponse response) //转发的方法 include(ServletRequest request, ServletResponse response) //请求包含
      • 与请求编码相关的方法: //解决post方式编码 request.setCharacterEncoding("UTF-8"); //告诉服务器客户端什么编码,只能处理post请求方式 //解决get方式编码 String name = new String(name.getBytes(“iso-8859-1”),”UTF-8”);
posted @ 2018-08-29 21:49  菜白小系瓦  阅读(113)  评论(0编辑  收藏  举报