发表于: 2016-09-22 10:06:49

1 2358


     今天完成的事情:理解并掌握JSP九大内置对象,为什么要学这个,因为我感觉这个是接下来要学习的session/token/cookie的基础,先把这个搞懂接下来事半功倍。对于在面试过程中会遇到的mysql问题,练习了一下应用内连接/左连接/右连接实现多表查询。复习了一下IO流的知识(真正进入内存来操纵数据,在二进制中看清数据存储的本来形态,比较直观的例子是Java对象的序列化和反序列化,虽然现在看起来还没什么用)。

     收获:

       JSP内置对象是Web容器创建的一组对象,不使用new关键字就可以使用。

Jsp九大对象

out

request

response

session

application

Page

pageContext

exception

    config

    1. out对象

       缓冲区,Buffer,就是内存的一块区域用来保存临时数据。

        out对象是JspWriter类的实例,是向客户端输出内容常用的对象。

2. request对象

   客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应。它是HttpServletRequest类的实例。request对象具有请求域即完成客户端的请求之前该对象一直有效。

3. response对象

   response对象包含了响应客户请求的有关信息,但在JSP中很少直接用到它。它是HttpServletResponse类的实例。response对象具有页面作用域,即访问一个页面时,该页面内的response对象只能对这次访问有效,其它页面的response对象对当前页面无效。

   · sendRedirect(java.lang.String location) 重定向客户端的请求

4. Session对象

        什么是Session

session表示客户端与服务器的一次会话;

Web中的session指的是用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览网站所花费的时间;

在服务器的内存中保存着不同用户的session,一个用户对应一个session

从上述定义中可以看到,session实际是一个特定的时间概念。

session对象

session对象是一个JSP内置对象。

session对象在第一个JSP页面被装载时自动创建,完成会话期管理。

从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束,被称为一个会话。

当一个客户访问一个服务器时,可能会在服务器的几个页面之间切换,服务器应当通过某种方法知道这是一个客户,就需要session对象。

session对象是HttpSession类的实例。

    5. session的生命周期

1.创建阶段:

当客户端第一次访问某个jsp或者Servlet时候,服务器会为当前会话创建一个SessionId,每次客户端向服务器发送请求时,都会将此SessionId携带过去,服务端会对此SessionId进行校验。

2.活动阶段:

①某次会话当中通过超链接打开的新页面属于同一次会话。

②只要当前会话页面没有全部关闭,重新打开新的浏览器窗口访问同一项目资源时属于同一次会话。

③除非本次会话的所有页面都关闭后再重新访问某个Jsp或者servlet将会创建新的会话。

注意:原有会话还存在,只是这个旧的SessionId仍然存在于服务端,只不过再也没有客户端会携带它然后交予服务端校验。

3.销毁阶段:三种方式

①调用了session.invalidate()方法。

Session过期(超时)。

③服务器重新启动。

    6. application对象

application对象实现了用户间数据的共享,可存放全局变量。

application开始于服务器的启动,终止于服务器的关闭。

在用户的前后连接或不同用户之间的连接中,可以对application对象的同一属性进行操作。

在任何地方对application对象属性的操作,都将影响到其他用户对此的访问。

服务器的启动和关闭决定了application对象的生命。

application对象是ServletContext类的实例。

    7. page对象

       page对象就是指向当前JSP页面本身,有点像类中的this指针,它是java.lang.Object类的实例。

    8. pageContext对象和config对象

       pageContext对象

pageContext对象提供了对JSP页面中所有对象及名字空间的访问。

pageContext对象可以访问到本页面的session,也可以取本页所在的application对象的任意某一属性值。

pageContext对象相当于页面中所有功能的集大成者。

       config对象

       config对象是在一个Servlet初始化时,JSP引擎向它传递信息用的,此信息包括Servlet初始化时所要用到的参数(通过属性名和属性值构成)以及服务器的有关信息(通过传递一个ServletContext对象)。

    9. exception对象

    exception对象是一个异常对象,当一个页面在运行过程中发生了异常,就产生这个对象。如果一个JSP页面要应用此对象,就必须把isErrorPage设为true,够则无法编译。它实际上是java.lang.Throwable的对象。


表单提交有两种方式:getpost

1. get 以【明文】方式通过URL提交数据,数据在URL中可以看到。提交数据最多不超过【2KB】。安全性较低但效率比post方式高。适合提交数据量不大,且安全要求不高的数据比如:搜索、查询等功能。

2. post 将用户提交的信息封装在HTML HEADER内。适合提交数据量大,安全性高的用户信息如:注册、修改、上传等功能。


请求重定向与请求转发的区别

请求重定向:客户端行为,服务端responce.sendRedirect("xx.jsp") 从本质上讲等于两次请求,前一次的请求对象不会保存,地址栏的URL地址会改变。

请求转发√):服务器行为,request.getRequestDispatcher("xx.jsp").forward(request,response);从本质是一次请求,转发后请求对象会保存,地址栏的URL地址不会改变。



关于MySQL多表查询

场景:已知有两个数据表,Stu表存idnameScores表存学生id及各科目成绩信息(每个学生的各科成绩是单独的记录,如下)。要求输出A科目成绩>B科目成绩的学生信息。

这个问题麻烦就麻烦在,学生表中某一个学生的各科成绩是作为不同的记录,如果同一个学生各科成绩都处于同一行作为一条记录存在,那么用一个最基础的Sql语句就可以解决。因此在这个场景中,我认为现在只能用学生表与其自身的连接来实现。

1. Stu表

    CREATE TABLE IF NOT EXISTS Stu(

    id    BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,

name   VARCHAR(30) NOT NULL

);

    

2. Scores表

CREATE TABLE IF NOT EXISTS Scores(

id    BIGINT UNSIGNED,

    subject   VARCHAR(30) NOT NULL,

score   SMALLINT UNSIGNED NOT NULL

);

3. 实现查询

SELECT a.id, c.name, a.score AS Subject_A, b.score AS Subject_B FROM Scores AS a

LEFT JOIN Scores AS b ON a.id=b.id && a.subject="A" &&b.subject="B" 

LEFT JOIN Stu AS c ON a.id=c.id

WHERE a.score>b.score;


     接下来计划:完成对JSP基础的学习,实现“拦截器里通过Cookie中判断Token的有效性来判断用户是否登录”的功能。学习memcached。



返回列表 返回列表
评论

    分享到