09重点复习

09重点复习
1、动态web资源   静态web资源
   Servlet/JSP

   Servlet web.xml
 2、真实路径  虚拟路径

    Servlet (Sun)--GenericServlet--HttpServlet doXXX
    !!Servlet的生命周期,调用过程图(当浏览器访问一个Servlet对象时,服务器可能创建的对象: ServletConfig、可能(第一次)Servlet、request和response必然),知道javaee常用对象的由谁创建、什么时候创建、什么时候销毁。
        ServletContext:服务器启动,web应用加载时创建,当浏览器第一次访问Servlet时,已启动过。
    web容器--tomcat (基于Sun标准的Apache)
    Servlet容器--tomcat
3、Attribute、parameter、InitParameter的区别,对应的操作方法。
   初始化参数:InitParameter    在web.xml中为Servlet或ServletContext配置的初始化时带有的基本参数  
   请求参数:parameter   浏览器发送过来的请求中的参数信息 
            以上两种:有get,无set和remove
   域属性:Attribute    自己设置      有get、set、remove
4、ServletContext:域、获取web应用的初始参数、读取资源文件(getRealPath、利用类加载器去加载资源)
    
!!!四大作用域的生命周期、作用范围 、主要用途。Servlet(JSP)
   ServletContext(application
         整个作用域
         随着web应用加载而创建,随着web应用销毁而销毁
   HttpSession(session
        整个会话。所谓当前会话,就是指从用户打开浏览器开始,到用户关闭浏览器这中间的过程。这个过程可能包含多个请求响应。(session),而放到会话中的变量,
        request.getSession()创建session。当session超过30分钟没人用销毁、invalidate方法自杀、服务器非正常关闭session销毁。
   request(request
        整个请求链。所谓请求周期,就是指从http请求发起,到服务器处理结束,返回响应的整个过程。在这个过程中可能使用forward的方式跳转了多个jsp页面。
        请求开始时创建request对象代表请求,request产生,请求结束request对象销毁,request域销毁。
pageContext(page域)
       当前jsp页面里。 
        随着JSP页面被访问时创建,访问结束后销毁。从把变量放到pageContext开始,到jsp页面结束。
5、response
        响应乱码:
            getOutputStream().write("中国".getBytes("utf-8"));------Content-Type
            getWriter().write('中国');-------setCharacterEncoding(""utf-8");Content-Type-----                setContentType("text/html;charset=UTF-8");
       重定向: 
               response.setHeader("Location", "/Day04/index.jsp");
               response.sendRedirect("/Day04/index.jsp");

   request
       请求乱码:
            浏览器发送请求参数时,当初浏览器以什么编码打开的表单页面,就用什么编码发送这个页面提交的数据;而 服务器若不指定就使用ISO8859-1打来,造成乱码。
           post: request.setCharacterEncoding(“utf-8”)  //放在getParameter前才有效
           get:   new String(str.getBytes(“ISO-8859-1”),”utf-8”)
                      设置tomcat Connector URIEncoding=“utf-8”
       获取请求参数:
       域:
       转发   包含

6、Cookie技术:客户端技术
    
//解决中文乱码
    response.setCharacterEncoding("UTF-8");
    response.setContentType("text/html;charset=UTF-8");
 
    //返回多个cookie信息
    Cookie[] cs = request.getCookies();
    Cookie findC = null;
    //cs部位空,才可以增强for循环
    if (cs != null)
    for(Cookie c : cs){
        if ("lastTime".equals(c.getName())) {
            findC = c;
        }
    }
        if (findC == null) {
            response.getWriter().write("这是您第一次访问本网站!");
        } else {
            Long lastTime = Long.parseLong(findC.getValue());
            response.getWriter().write("您上次访问的时间是:" + new Date(lastTime).toLocaleString());
        }
        //缓存最新时间
        Date date = new Date();
        Cookie cTime = new Cookie("lastTime", date.getTime()+"");
        response.addCookie(cTime);
        300个(浏览器容纳)     20个(每个站点)     4KB(最大)
       cookie对象常用方法及其作用 setMaxAge(设置与不设置的区别)、SetPath(若不设置浏览器使用默认值)、SetDomain(设置后浏览器的反应)    
        如何覆盖一个Cookie?
        如何删除一个Cookie?
7、Session技术:服务器端技术    内存中     
       Session原理(基于cookie),了解如何是同一台计算机中的浏览器公用session(利用session原理自己创建JSESSIONID cookie,设置MaxAge,覆盖自动生成的)/了解禁用cookie下如何使用session(URL重写)

cookie是客户端技术
优点:数据保存在客户端,这个信息可以保存很长时间。
缺点:数据随时有可能被清空,所以cookie保存的数据是不太靠谱的;
数据被保存在了客户端,随时有可能被人看走,如果将一些敏感信息比如用户名密码等信息存在cookie中,可能有安全问题。

session是服务器端技术
优点:数据保存在服务区端,相对来说比较稳定和安全。
缺点:占用服务器内存,所以一般存活的时间不会太长,超过超时时间就会被销毁。所以 我们要根据服务器的压力和session 的使用情况合理设置session的超时时间,既能保证session的存活时间够用,同时不用的session可以及时销毁减少对服务器内存的占用。
8、JSP  
        改变了在java中写html的过程变为在HTML中嵌入java代码
        JSP本质上是一个Servlet,在第一访问到时有JSP翻译引擎翻译为Servlet
        模板元素:---out.write("")
        脚本表达式<%= %>----out.print();
        脚本片段:<% %>----不变
        JSP声明<%! %>----类成员
        JSP注释<%-- --%>
        JSP指令
            page---用来通知JSP翻译引擎如何翻译当前JSP
                session----是否有隐式内置对象
                errorPage----指定错误提示页面
                isErrorPage----设置为true后,翻译页面会出现一个exception对象,可直接使用;友好提示错误页面
                pageEncoding----通知翻译引擎以什么编码打开JSP页面   通知服务器以什么编码发送数据   
              通知浏览器以什么编码打开数据,而在myeclipse环境下这个属性配为了什么myeclipse自动以什么编码打开文件
            include---用来进行静态包含
                静态包含:源文件级别的合并多个JSP翻译为一个Servlet。  <%include file="URL"%>
                动态包含:在输出流级别的合并,对个JSP翻译为各自的Servlet,在输出时进行合并。
            taglib---用来导入标签库
9、!!!请求转发和重定向
    1.请求重定向的原理:(302 Location)
    2.请求转发的原理:(服务器内部资源流转)
    3.请求重定向和请求转发的不同应用场景
    4.常用的请求重定向和请求转发的实现方法

10、!!!常考点:静态包含、动态包含的原理,常用的请求包含实现方法
11、九大内置对象:
        page
        config
        application
        response
        request
        session
        out
        exception
        pagecontext
                作为入口对象获取其他八大内置对象
                作为入口操作四大作用域
                findAttribute(从小到大搜索域)
                域
                提供了快捷方法可以用来转发和包含
12、JSP标签:
           jsp:forward
           jsp:include
           jsp:param
        EL
            1.获取数据
                    获取的数据放在域中,常用,变量、数组、集合、map、
                   javabean的属性----${pageContext.request.contextPath}
                  .[]
            2.执行运算
                    算术运算        比较运算        逻辑运算
                    三元表达式   ${user!=null?user.name : “”}
                    empty---null  “”  list 域
            3.获取常用开发对象(11个内置对象)
               !pageContext -- 有了它可以很方便的获取jsp页面中的9大隐式对象,对应于JSP页面中的pageContext对象
               !pageScope -- page域中属性组成的Map,代表page域中用于保存属性的Map对象
               !requestScope -- request域中属性组成的Map
               !sessionScope -- session域中属性组成的Map
               !applicationScope --application域中属性组成的Map     
                !param -- 所有请求参数组成的Map<String,String>
               paramValues -- 所有请求参数组成的Map<String,String[]>
               header -- 所有请求头组成的Map<String,String>
               headerValues -- 所有请求头组成的Map<String,String[]>
               !cookie -- 所有cookie信息组成的Map<String,Cookie>
               initParam -- 所有web应用的初始化参数组成Map
            4.调用java方法
                    会调用jstl提供的fn函数就可以了
13、JSTL
        c:out    c:set    c:remove
        c:if        c:foreach        c:choose
14、自定义标签
15、mysql
16、jdbc
17、web开发模式
==========================================================================================
一、请求转发、请求重定向和请求包含
       请求转发和请求重定向区别
               请求重定向地址栏会发生变化。 请求转发地址栏不发生变化.
                请求重定向两次请求两次响应。 请求转发一次请求一次响应.
 
        如果需要在资源跳转时利用request域传递域属性(一些参数)则必须使用请求转发;
        如果希望资源跳转后修改用户的地址栏则使用请求重定向;
       如果使用请求转发也可以重定向也可以,则优先使用请求转发,减少浏览器对服务器的访问次数减轻服务器的压力。

       转发之前如果已有数据写给浏览器,浏览器转发失败。
       转发之前如果已有数据写给response缓冲区中但未发送给浏览器,转发成功;但之前写入的数据清空,清空的只是实体内容,响应头不会清空。

        不可以在一个Servlet中转发两次;;
         被包含的Servlet程序不能改变响应消息的状态码和响应头,如果它里面存在这样的语句,这些语句的执行结果将被忽略。
  1. 一.请求重定向
  2. 1.原始方式
  3. response.setStatus(302);
  4. response.setHeader("Locaton","/xxxxxx");
  5. 2.快捷方式
  6. response.sendRedirect("/xxxx");
  7. *3.额外的方式
  8. 1. response.setHeader("refresh","0;url=/xxxx");
  9. 2. <c:redirect>
  10. 二、请求转发
  11. 1.ServletContext.getRequestDispatcher().forward();
  12. 2.request.getRequestDispatcher().forward();
  13. 3.pageContext.forward("");
  14. 4.<jsp:forward>
  15. 三、请求包含
  16. 1.ServletContext.getRequestDispatcher().include()
  17. 2.request.getRequestDispatcher().include()
  18. 3.<%@ include file=""%>
  19. 4.pageContext.include("/index.jsp");
  20. 5.<jsp:include/>
  21. 6.<c:import/>

getOutputStream和getWriter两个方法互斥。

http协议--规定浏览器和服务器如何通信
html--超文本数据的格式                      http规定html 错错错!
servlet规范--sun定义
servlet容器--给规范实现
============================================================================================
二、常用地址的写法:
    绝对路径:以/开头的路径就叫做绝对路径,绝对路径在相对于的路径上直接拼接得到最终的路径。
    相对路径:不以/开头的路径就叫做相对路径,相对路径基于当前所在的路径计算的到最终的路径。
    硬盘路径:以盘符开头的路径就叫做硬盘路径。是哪个路径就是哪个路径。没有相对于谁的问题。

    1、虚拟路径: --写虚拟路径时都使用绝对路径
        如果路径是给浏览器用的,这个路径相对于虚拟主机,所以需要写上web应用的名称;
        如果路径是个服务器用的,这个路径相对于web应用,所以可以省写web应用的名称。
      <a href="/Day04/.....">     浏览器
      <form action="/Day04/...">   浏览器
      <img src="/Day04/....">   浏览器
      response.setHeader("Location","/Day04/....");   浏览器    302+Locaction
      response.setHeader("refresh","3;url=/Day04/...");   浏览器
      response.sendRedirect("/Day04/...");   浏览器
      request.getRequestDispathce("/index.jsp").forward();   服务器    
      request.getRequestDispathce("/index.jsp").include();   服务器
 
  1. /Day04/Demo6转发到:
  2. /Day04/index.jsp
  3. 使用绝对路径
  4. request.getRequestDispathce("/Day04/index.jsp").forward();
  5. 若使用相对路径:(分析路径,麻烦,易出错)
  6. request.getRequestDispathce("../index.jsp").forward();
   
  2、 真实路径: --写真实路径时都使用相对路径
        根据原理,具体问题具体分析  
        servletContext.getRealPath("config.properties");//--给一个相对于web应用目录的路径
        classLoader.getResource("../../config.properties");//--给一个相对于类加载目录的路径
  1. @WebServlet("/Demo6")
  2. public class Demo6 extends HttpServlet {
  3. public void doGet(HttpServletRequest request, HttpServletResponse response)
  4. throws ServletException, IOException {
  5. request.getRequestDispatcher("/Day04/index.jsp");//绝对路径
  6. String path = Demo6.class.getClassLoader().getResource("config.properties").toString();
  7. System.out.println(path);
  8. //在src下新建config.properties,与包同路径下
  9. /输出:file:/F:/tomcat8/webapps/Day04/WEB-INF/classes/config.properties
  10. }

        File file = new File("config.properties");//--相对于程序的启动目录,web工程下面找
        new InputStream("config.properties");//--相对于程序的启动目录
posted @ 2017-03-03 13:36  欧阳蝶梦  阅读(90)  评论(0编辑  收藏  举报