Servlet和JSP复习笔记

来源:互联网 发布:qq飞车雷诺官方数据 编辑:程序博客网 时间:2024/06/06 00:02

1. 理解典型的Web应用
    1.1  浏览器客户端、Web服务器、应用服务器、数据库服务器
        1.1.1  在我们的项目里Tomcat即是Web服务器,又是应用服务器。
        1.1.2 Web服务器一般用来处理静态的内容,HTML,CSS之类的东西
        1.1.3 应用服务器主要负责在服务器端运行的应用程序,比如说我们的Servlet和JSP
       
    1.2 典型的Web应用的请求处理过程
        1.2.1 我们的请求从客户端那边递交过来,首先会到达Web,如果是请求一个Servlet或JSP,他会把请求转发给应用服务器。
            然后由应用服务器去初始化那个程序。比如说我们调用一个Servlet,他会初始化一个Servlet对象,这时候他的init()方法就被调用。
            然后再调用他里面的Service方法这些东西。
            在Servlet可能要访问数据库,把一些数据存储起来,或者查询一些数据。完了以后再返回来,通过Response返回数据。
            由应用服务器向客户端浏览器返回一些响应的html代码。
        1.2.2这是一个请求和响应的过程。他的底层是基于TCP/IP协议。数据肯定会被传到后台,因为他不是基于UDP的。
        1.2.3Web应用会有个根目录,Servlet被编译以后会被放到WEB-INF的classes目录下面,WEB-INF下面的还有个lib目录,放的都是些依赖包。
        WEB-INF目录是在运行的时候类路径的一部分。在classes里面的那些类在运行的时候会先于lib里面的那些jar包被加载。
2. 理解Get和Post请求
    2.1 发生get请求的情况:在浏览器里面输入地址请求,在网页里面点击一个连接地址,在表单里面定义method=get
    2.2 post发生的情况只有在表单里面定义的method为post,表单默认采用的是get
    2.3 get请求是通过在url后面加参数的方式来传递参数的,post是通过httpheader的方式来传递参数的。
    2.4 post可以提交文件,get不可以。
    2.5 这两个对于后台没有多大差异,可能要考虑的是编码
3. 理解Servlet/JSP的职责划分
    3.1 一般来讲JSP适合编写html代码负责展现,servlet适合编写java代码负责逻辑,
        一般来讲,在jsp里面只有把与展现有关的一些逻辑放到里面去。
        servlet主要负责把页面里面传递过来的参数取出来,在页面里面对参数进行转换,然后调用后台的业务逻辑,比如说DAO和Service,来进行业务逻辑的处理。
        处理完成后由servlet将结果通过request的setAttri()方法放到request里面再将结果forward到一个jsp,再由JSP进行呈现。
4. 理解服务器端重定向和客户端重定向
    4.1 服务器端重定向只是从后台的一个Servlet转向另一个Servlet或者jsp,请求对象仍然是同一个请求对象,他的Attribute仍然存在。
        客户端重定向:在浏览器里面向客户端发一个请求,实际上客户端已经响应了,响应代码302。
    4.2 客户端在收到响应后,他就知道这是个从定向的请求。所以咯他重新再发一个请求。
5. 理解路径问题
    5.1 对于服务器端重定向,我们使用的路径将跟服务器有关,配置的Servlet的具体映射是什么样的地址,就用什么样的地址。
        eg:request.getRequestDispatcher("/admin/ArticleServlet").forward(request,response);
    5.2 对于客户端的重定向,要加上一个requset.getContextPath(),
        eg:response.sendRedirect(request.getContextPath()+ "/admin/ArticleServlet");
    5.3 <%jsp:include%> 和 <%@include%>的路径都是相对路径
    5.4 <img src="../images/tb.gif"> src里面可以用相对路径也可以用http://开头的绝对路径
    5.5 在<head>标签下定义<base href="..."/>,那么在这个页面下所有的相对路径都会以href开头。
6. 理解编码问题
    6.1 get请求与当前操作系统以及页面编码有关。
        如果在页面里面的请求参数有中文的,则按照页面编码;如果在浏览器的地址栏里面输入,则与操作系统的编码有关
    6.2 post请求与当前页面的编码有关
    6.3    通过get请求的参数处理需要在tomcat里面改一个uriEncoding的参数
    6.4    post请求通过下面方式修改
        HttpServletRequest httpServletRequest=(HttpServletRequest)request;
        httpServletRequest.setCharacterEncoding(encoding);
    6.5 Tomcat有两种编码,一种是给服务器用的,另一种是给客户端用的
        服务器端的编码主要讲的是数据存储到数据库里面是怎样的一种编码
        客户端的编码主要是通过客户端连接服务器,客户端是什么编码
7. 理解HttpSession
    7.1 服务器不会可以为客户端保留状态信息,比如说购物车,就要用到HttpSession对象
        客户端已请求,服务器可以创建一个HttpSession对象
        //判断session 是否有LOGIN_ADMIN
        String loginAdmin=(String) httpServletRequest.getSession().getAttribute("LOGIN_ADMIN");
        if (loginAdmin==null&&!page.equals("/admin/login.jsp")&&!page.equals("/admin/LoginServlet")) {
            httpServletResponse.sendRedirect(httpServletRequest.getContextPath()+"/admin/login.jsp");
        }
       
    7.2 在服务器端创建Session对象的时候会创建一个JSESSIONID,他会把这个id通过Response里面的httpHead返回给客户端。
        这个客户端可以通过request传到本地的cookie,然后每次通过这个请求来发送这个JSESSIONID的值。
        服务器拿到这个信息就能找到对应的HttpSession对象。
   
    7.3 session是以cookie或URL重写为基础的,默认使用cookie来实现,系统会创造一个名为 JSESSIONID的输出cookie,我们叫做session cookie,
        以区别persistent cookies,也就是我们通常所说的cookie,注意session cookie是存储于浏览器内存中的,并不是写到硬盘上的,
        这也就是我们刚才看到的JSESSIONID,我们通常情是看不到JSESSIONID的,但是当我们把浏览器的cookie禁止后,
        web服务器会采用URL重写的方式传递Sessionid,我们就可以在地址栏看到 sessionid=KWJHUG6JJM65HS2K6之类的字符串。
   
    7.4 session cookie针对某一次会话而言,会话结束session cookie也就随着消失了,
        而persistent cookie只是存在于客户端硬盘上的一段文本(通常是加密的),而且可能会遭到cookie欺骗以及针对cookie的跨站脚本攻击,
        自然不如 session cookie安全了。
       
    7.5   通常session cookie是不能跨窗口使用的,当你新开了一个浏览器窗口进入相同页面时,系统会赋予你一个新的sessionid,
        这样我们信息共享的目的就达不到了,此时我们可以先把sessionid保存在persistent cookie中,然后在新窗口中读出来,
        就可以得到上一个窗口SessionID了,这样通过session cookie和persistent cookie的结合我们就实现了跨窗口的session tracking(会话跟踪)。
       
    7.6 服务器也可以通过URL重写的方式来传递SessionID的值,因此不是完全依赖Cookie。如果客户端Cookie禁用,
        则服务器可以自动通过重写URL的方式来保存Session的值,并且这个过程对程序员透明。
        可以试一下,即使不写Cookie,在使用request.getCookies();取出的Cookie数组的长度也是1,
        而这个Cookie的名字就是JSESSIONID,还有一个很长的二进制的字符串,是SessionID的值。
        Cookie是客户端的存储空间,由浏览器来维持。
       
8. 理解pageContext,request,session,ServletContext(application scope)
    8.1 可以把他们想象成一个个的容器,存储着一个个的对象。但是他们有不同的范围。
       
    8.2 pageContext范围是页面,servlet里面没有这个东西,只有jsp里面才有。
        在jsp里面可以通过pageContext.setAttribute("...","...")来传对象,然后在页面的其他地方接收。
        pageContext用的比较少,可以在jsp页面与包含taglib的jsp之间传递数据。在taglib里面可能产生了一些数据,在页面里面会用,这时候就可以用pageContext。
   
    8.3 ServletContext是一个全局对象,jsp在缺省的情况下已经创建了一个session对象,在servlet中可以通过request.getSession()
        客户端浏览器关闭了以后,session还可能存在,只有在session超时了以后才可能被销毁。
        request是从浏览器里面一个请求过去的时候,tomcat自动创建的,再传递给servlet

原创粉丝点击