Blog of CodeJELLOW’S ENGINEERING NOTES
← 返回文章

JAVA WEB 笔记2

一、jsp的页面元素: a.脚本Scriptleti.<% 局部变量、java语句 %>ii.<%! 全局变量、定义方法 %>iii.<%=输出表达式 %> 一般而言,修改web.xml、配置文件、java 需要重启tomcat服务但是如果修改 Jsp\htm…

本文目录 ⌄

    一、jsp的页面元素:


    a.脚本Scriptlet
    i.
    <% 局部变量、java语句 %>
    ii.
    <%! 全局变量、定义方法 %>
    iii.
    <%=输出表达式 %>

    一般而言,修改web.xml、配置文件、java 需要重启tomcat服务
    但是如果修改 Jsp\html\css\js,不需要重启

    注意,out.println()不能回车;要想回车: “
    ”,即out.print() <%= %> 可以直接解析html代码

    b.指令
    page指令 <%@ page ….%> page指令的属性: language:jsp页面使用的脚本语言 import:导入类 pageEncoding:jsp文件自身编码 jsp ->java contentType:浏览器解析jsp的编码 <%@ page language=”java” contentType=”text/html; charset=UTF-8″ pageEncoding=”UTF-8″ import=”java.util.Date” %>

    c.注释
    html注释 可以被客户 通过浏览器查看源码 所观察到
    java注释// /…/
    jsp注释<%– –%>

    二、JSP九大内置对象(自带的,不需要new 也能使用的对象)


    ①pageContext JSP页面容器
    ②request 请求对象
    ③session 会话对象
    ④application 全局对象

    ⑤response 响应对象

    ⑥config 配置对象(服务器配置信息)
    ⑦out 输出对象,向客户端输出内容
    ⑧page 当前JSP页面对象(相当于java中的this)
    ⑨exception 异常对象

    四种范围对象(小->大)
    pageContext JSP页面容器 (page对象); 当前页面有效
    request 请求对象 同一次请求有效
    session 会话对象 同一次会话有效
    application 全局对象 全局有效(整个项目有效)

    以上4个对象共有的方法:
    Object getAttribute(String name) :根据属性名,或者属性值
    void setAttribute(String name,Object obj) :设置属性值(新增,修改)
    setAttribute(“a”,”b”);//如果a对象之前不存在,则新建一个a对象;
    如果a之前已经存在,则将a的值改为b
    void removeAttribute(String name): 根据属性名,删除对象

    a.
    pageContext 当前页面有效 (页面挑战后无效)
    b.
    request 同一次请求有效;其他请求无效 (请求转发后有效; 重定向后无效)
    c.
    session 同一次会话有效 (无论怎么跳转,都有效;关闭/切换浏览器后无效 ; 从登陆->退出 之间全部有效)
    d.
    application 全局变量; 整个项目运行期间都有效(切换浏览器仍然有效); 关闭服务、其他项目无效
    ->多个项目共享、重启后仍然有效:JNDI
    ①以上的4个范围对象,通过setAttribute()复制,通过 getAttribute()取值;
    ②以上范围对象,尽量使用最小的范围。因为对象的范围越大,造成的性能损耗越大。

    1. out:输出对象,向客户端输出内容
    2. request:请求对象:存储“客户端向服务端发送的请求信息”
      2.1 request对象的常见方法:
      String getParameter(String name): 根据请求的字段名key(input标签的name属性值),返回字段值value(input标签的value属性值)
      String[] getParameterValues(String name): 根据请求的字段名key,返回多个字段值value(checkbox)
      void setCharacterEncoding(“编码格式utf-8”):设置请求编码 (tomcat7以前默认iso-8859-1,tomcat8以后改为utf-8)
      getRequestDispatcher(“b.jsp”).forword(request,reponse); :请求转发的方式跳转页面 A->B
      ServletContext getServerContext():获取项目的ServletContext对象

    示例:
    注册
    register.jsp , show.jsp

    get提交方式: method“get”和地址栏、超链接()请求方式 默认都属于get提交方式

    2.2 get与post请求方式的区别:
    a. get方式在地址栏显示请求信息(但是地址栏能够容纳的信息有限,4-5KB;如果请求数据存在大文件,图片等 会出现地址栏无法容纳全部的数据而出错);post不会显示
    b.文件上传文件操作,必须是post
    推荐使用post

    2.3 统一请求的编码 request
    get方式请求 如果出现乱码,解决:
    a.统一每一个变量的编码(不推荐)
    new String(旧编码,新编码);
    name=new String(name.getBytes(“iso-8859-1″),”utf-8”);
    b.修改server.xml,一次性的更改tomcat默认get提交方式的编码(utf-8)
    建议使用tomcat时,首先在serve.xml中统一get方式的编码

    tomcat7(iso-8859-1)
    tomcat8(utf-8)

    post
    request.setCharacterEncoding(“utf-8”);

    1. response:相应对象
      提供的方法:
      void addCookie(Cookie cookie);服务端向客户端增加cookie对象
      void sendRedirect(String location) throws IOException; :页面跳转的一种方式(重定向)
      void setContetType(String type):设置服务端响应的编码(设置服务端的contentType类型)

    示例:登陆
    login.jsp ->check.jsp->success.jsp

    TEXT
                    请求转发            重定向

    地址栏是否改变 不变(check.jsp) 改变(success.jsp)

    是否保留第一次 保留 不保留 –四种范围对象
    请求时的数据

    请求的次数 1 2

    跳转发生的位置 服务端 客户端发出的第二次跳转

    转发、重定向:

    转发:
    张三(客户端) -> 【服务窗口 A(服务端)-> 服务端口 B 】
    重定向:
    张三(客户端) -> 服务窗口 A(服务端)-> 去找B
    张三(客户端) -> 服务窗口 B(服务端)-> 结束

    1. session(服务端)
      Cookie(客户端,不是内置对象):Cookie是由服务端生成的,再发给客户端保存。
      相当于本地缓存的作用: 客户端(hello.mp4;zs/abc)->服务端(hello.mp4;zs/abc)
      作用:提高访问服务端的效率,但是安全性较差。

    4.1
    Cookie: name=value
    javax.servlet.http.Cookie
    public Cookie(String name,String value)
    String getName():获取name
    String getValue():获取value
    void setMaxAge(int expiry);最大有效期(秒)

    4.2 服务器准备Cookie:
    response.addCookie(Cookie cookie)
    页面跳转(转发,重定向)
    客户端获取cookie: request.getCookies();

    a.服务端增加cookie:response对象;客户端获取对象:request对象
    b.不能直接获取某一个单独对象,只能一次性将全部的cookie拿到

    通过F12可以发现 除了自己设置的Cookie对象外,还有一个name为JSESSIONID的cookie

    建议cookie只保存英文数字,否则需要进行编码、解码

    4.3 使用Cookie实现,记住用户名功能

    4.4 session:会话
    a.浏览网站:开始-关闭
    b.购物: 浏览、付款、退出
    c.单子邮件:浏览、写邮件、退出
    开始-结束

    4.5 session机制:
    客户端第一次请求服务端时,(jsessionid-sessionid)服务端会产生一个session对象(用于保存该客户的信息)
    并且每一个session对象都会有一个唯一的sessionId(用于区分其他session);
    服务端由会产生一个cookie,并且该cookie的name=JSESSIONID,value=服务器sessionId的值;
    然后服务端会在响应客户端的同时将该cookie发送给客户端,至此客户端就有了一个cookie(JSESSIONID);
    因此,客户端的cookie就可以和服务端的session一一对应(JSESSION – sessionID)

    客户端第二/n次请求服务端时:服务端会先用客户端cookie中的JSESSIONID 去服务端的session中匹配sessionid,如果匹配成功(cookie jsessionid和session sessionid),说明此用户不是第一次访问,无需登录。

    例子:
    客户端 顾客(客户端)
    服务端:存包处 – 商场(服务端)

    顾客第一次存包:商场判断此人是否之前已经存过包(通过你手里是否有这里的钥匙)。
    如果是新顾客(没钥匙),分配一个钥匙给该顾客;钥匙会和柜子一一对应;

    第二/n次存包:商场判断此人是否之前已经存过包(通过你手里是否有这里的钥匙)。
    如果是老顾客(有钥匙),则不需要分配;该顾客手里的钥匙会和柜子自动一一对应。

    session:
    a.session存储在服务器
    b.session是在同一个用户(客户)请求时共享
    c.实现机制:第一次客户请求时产生一个sessionid并复制给cookie的jsessionid然后发给客户端,最终session的sessionid-cookie的jsessionid实现一一对应。

    4.6 session方法:
    String getId() :获取sessionId
    boolean isNew() :判断是否是新用户(第一次访问)
    void invalidate() :使session失效(退出登录、注销)

    void setAttribute();
    Object getAttribute();

    void setMaxInactiveInterval(秒) :设置最大有效 非活动时间
    int getMaxInactiveInterval(秒) :获取最大有效 非活动时间

    示例:
    登录
    客户端在第一次请求服务端时,如果服务端发现此请求没有JSESSIONID,则会创建一个name=除了自己设置的Cookie对象外,还有一个name为JSESSIONID的cookie

    Cookie:
    a.不是内部对象,要使用必须new
    b.但是,服务端会自动生成一个(服务端自动new一个cookie)name=JSESSIONID的cookie,并返回给客户端

    4.7 cookie和session的区别:
    session cookie
    保存位置 服务端 客户端
    安全性 较安全 较不安全
    保存的内容 Object String

    application 全局对象
    String getContextPath() 虚拟路径
    String getRealPath(String name): 绝对路径(虚拟路径 相对的绝对路径)

    通过 RSS 订阅更新 →