• JSP


    1、JSP:动态网页

    静态、动态:

    1.不用 和 是否有“动感”混为一谈

    2.是否 随着 时间、地点、用户操作 的 改变而改变

    动态网页 需要使用到 服务端脚本语言(JSP)

    jsp:在html中嵌套的java代码

    在项目/WEB-INF/web.xml中设置 默认的初始页面

    <welcome-file-list>

      <welcome-file>index.jsp</welcome-file>

    </welcome-file-list>

    2、架构

    CS:Client Server

    CS不足:

    a.如果 软件升级,那么全部软件都需要升级

    b.维护麻烦:需要维护每一台 客户端软件

    c.每一台客户端 都需要安装 客户端软件

    BS :Broswer Server

    客户端可以通过 浏览器 直接访问服务端

    注意:bs和cs各有优势。

    3、tomcat解压后目录:

    bin:可执行文件(startup.bat shutdown.bat)

    conf:配置文件(server.xml)

    lib:tomcat依赖的jar文件

    log:日志文件(记录出错等信息)

    temp:临时文件

    webapps:可执行的项目(将我们开发的项目 放入该目录)

    work:存放由jsp翻译成的java,以及编辑成的class文件(jsp ->java ->class)

    4、虚拟路径

    a.方式一

    将web项目配置到 webapps以外的目录

    conf/server.xml中配置

    host标签中:

    <Context docBase="D:studyJspProject" path="/JspProject" />

    docBase:实际路径

    path:虚拟路径 (绝对路径、相对路径【相对于webapps】)

    重启

    b.方式二

    D:studyapache-tomcat-8.5.30confCatalinalocalhost

    中新建 “项目名.xml”中新增一行:

    <Context docBase="D:studyJspProject" path="/JspProject" />

    5、虚拟主机

    通过www.test.com访问本机

    a. conf/server.xml

    <Engine name="Catalina" defaultHost="www.test.com">

      <Host appBase="D:studyJspProject" name="www.test.com">

        <Context docBase="D:studyJspProject" path="/"/>

      </Host>

    b.C:WindowsSystem32driversetchost

    增加

    127.0.0.1 www.test.com

    流程:www.test.com -> host找映射关系 ->server.xml找Engine的defaultHost ->通过"/"映射到D:studyJspProject

    5、常见状态码:

    200:一切正常

    300/301:页面重定向 (跳转)

    404:资源不存在

    403:权限不足 (如果访问a目录,但是a目录设置 不可见)

    500:服务器内部错误(代码有误)

    其他编码:积累

    6、JSP执行流程

    jsp- java(Servlet文件) -class

    D:studyapache-tomcat-8.5.30workCatalinalocalhostJspProjectorgapachejsp

    Jsp 和Servlet 可以相互转换

    因为第一请求服务端 会有翻译 和编译的过程,因此比较慢; 后续访问 可以直接访问class,因此速度较快。但是 如果 服务端修改了代码,则再次访问时 会重新的翻译、编译。

    7、使用Eclipse开发Web项目(JSP项目) tomcat

    1)在Eclipse中创建的Web项目:

    浏览器可以直接访问 WebContent中的文件,例如http://localhost:8888/MyJspProject/index1.jsp,其中的index1.jsp就在WebContent目录中;

    但是WEB-INF中的文件 无法通过客户端(浏览器)直接访问,只能通过请求转发来访问

    注意:并不是 任何的内部跳转都能访问WEB-INF;原因是 跳转有2种方式:请求转发 、重定向

    2)配置tomcat运行时环境

    jsp<->Servlet

    a.将tomcat/lib中的servlet-api.jar加入项目的构建路径

    b.右键项目->Build Path -> Add library ->Server Runtime

    3)部署tomcat

    在servers面板 新建一个 tomcat实例 , 再在该实例中 部署项目(右键-add)之后运行

    注意:一般建议 将eclipse中的tomcat与 本地tomcat的配置信息保持一致: 将eclipse中的tomcat设置为托管模式:【第一次】创建tomcat实例之后, 双击,选择Server Location的第二项

    4)统一字符集编码

    a.编码分类:

    设置jsp文件的编码(jsp文件中的pageEncoding属性): jsp -> java

    设置浏览器读取jsp文件的编码(jsp文件中content属性)

    一般将上述设置成 一致的编码,推荐使用UTF-8

    文本编码:

    i.将整个eclipse中的文件 统一设置 (推荐)

    ii.设置 某一个项目

    iii.设置单独文件

    8、JSP的页面元素:

    HTML java代码(脚本Scriptlet)、指令、注释

    a.脚本Scriptlet

    i.

    <%

      局部变量、java语句

    %>

    ii.

    <%!

    全局变量、定义方法

    %>

    iii.

    <%=输出表达式 %>

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

    注意:out.println()不能回车; 要想回车:“<br/>”,即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注释<%-- --%>

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

    1. pageContext  JSP页面容器
    2. request   请求对象
    3. session   会话对象
    4. appliation 全局对象
    5. response  响应对象
    6. config  配置对象(服务器配置信息)
    7. out    输出对象
    8. page   当前JSP页面对象(相当于java中的this)
    9. exception 异常对象

    out:输出对象,向客户端输出内容

    request:请求对象;存储“客户端向服务端发送的请求信息”,request对象的常见方法:

    String getParameter(String name):根据请求的字段名key (input标签的name属性值) ,返回字段值value (input标签的value属性值)

    String[] getParameterValues(String name):根据请求的字段名key ,返回多个字段值value (checkbox)

    void setCharacterEncoding("编码格式utf-8"):设置post方式的请求编码 (tomcat7以前默认iso-8859-1,tomcat8以后改为了utf-8)

    getRequestDispatcher("b.jsp").forward(request,response):请求转发 的方式跳转页面 A - > B

    ServletContext getServerContext():获取项目的ServletContext对象      

    response:响应对象,提供的方法:

    void addCookie( Cookie cookie ); 服务端向客户端增加cookie对象

    void sendRedirect(String location ) throws IOException; :页面跳转的一种方式(重定向)

    void setContetType(String type):设置服务端响应的编码(设置服务端的contentType类型)

      请求转发 重定向
    地址栏是否改变 不变 改变
    是否保留第一次(4种范围对象) 保留 不保留
    请求的次数 1 2
    跳转发生的位置 服务端 客户发出的第二次跳转
    转发:
    张三(客户端) -> 【 服务窗口 A (服务端 ) -> 服务窗口B 】

    重定向:
    张三(客户端) -> 服务窗口 A (服务端 ) ->去找B

    张三(客户端) -> 服务窗口 B (服务端 ) ->结束

    Cookie(客户端,不是内置对象):Cookie是由 服务端生成的 ,再发送给客户端保存。相当于本地缓存的作用: 客户端(hello.mp4;zs/abc)->服务端(hello.mp4;zs/abc)。

    作用:提高访问服务端的效率,但是安全性较差。使用Cookie可以实现  记住用户名  功能。

    a、不是内对对象,要使用必须new

    b、但是,服务端会 自动生成一个(服务端自动new一个cookie) name=JSESIONID的cookie  并返回给客户端

    javax.servlet.http.Cookie: name=value

    public Cookie(String name,String value)

    String getName():获取name

    String getValue():获取value

    void setMaxAge(int expiry):最大有效期 (秒)

    服务端准备Cookie:

    response.addCookie(Cookie cookie)

    页面跳转(转发,重定向)

    客户端获取cookie: request.getCookies();

    a、服务端增加cookie:response对象;客户端获取对象:request对象

    b、不能直接获取某一个单独对象,只能一次性将全部的cookie拿到

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

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

    session(客户端):会话

    a、浏览网站:开始-关闭

    b、购物: 浏览、付款、退出

    c、电子邮件:浏览、写邮件、退出

    开始-结束

    session机制:客户端第一次请求服务端时,(jsessionid-sessionid)服务端会产生一个session对象(用于保存该客户的信息),并且每个session对象 都会有一个唯一的 sessionId(用于区分其他session),服务端由会产生一个cookie,并且该cookie的name=JSESSIONID,value=服务端sessionId的值,然后服务端会在响应客户端的同时将该cookie发送给客户端,至此客户端就有了 一个cookie(JSESSIONID),因此,客户端的cookie就可以和服务端的session一一对应(JSESSIONID - sessionID),客户端第二/n次请求服务端时,服务端会先用客户端cookie种的JSESSIONID 去服务端的session中匹配sessionid,如果匹配成功(cookie jsessionid和sesion sessionid),说明此用户 不是第一次访问,无需登录;

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

    a、session存储在服务端

    b、session是在 同一个用户(客户)请求时 共享

    c、实现机制:第一次客户请求时 产生一个sessionid 并复制给 cookie的jsessionid 然后发给客户端。最终 通过session的sessionid-cookie的jsessionid

    session方法:

    String getId() :获取sessionId  

    boolean isNew() :判断是否是 新用户(第一次访问)

    void invalidate():使session失效  (退出登录、注销)

    void setAttribute()

    Object getAttribute();

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

    int getMaxInactiveInterval():获取最大有效 非活动时间

    cookie和session的区别

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

    四种范围对象(小 => 大)

    对象 有效区域  
    pageContext  JSP页面容器   (page对象) 当前页面有效,页面跳转后无效。  
    request   请求对象 同一次请求有效,其他请求无效,请求转发后有效,重定向后无效。  
    session   会话对象 同一次会话有效,无论怎么跳转,都有效,关闭/切换浏览器后无效,从 登陆->退出 之间 全部有效。  
    appliation 全局对象

    全局有效,整个项目运行期间都有效 (切换浏览器 仍然有效),关闭服务、其他项目 无效。

    多个项目共享、重启后仍然有效 :JNDI

    String getContextPath():虚拟路径

    String getRealPath(String name):绝对路径(虚拟路径 相对的绝对路径)

    以上4个对象共有的方法:

    Object getAttribute(String name):根据属性名,或者属性值

    void setAttribute(String name,Object obj) :设置属性值(新增,修改)
         setAttribute("a","b") ;//如果a对象之前不存在,则新建一个a对象 ;如果a之前已经存在,则将a的值改为b
    void removeAttribute(String name):根据属性名,删除对象

    1、以上的4个范围对象,通过 setAttribute()复制,通过getAttribute()取值;

    2、以上范围对象,尽量使用最小的范围。因为 对象的范围越大,造成的性能损耗越大。





    转载请注明出处:https://www.cnblogs.com/stu-jyj3621
  • 相关阅读:
    精算师的前世今生
    失落的C语言结构体封装艺术
    关于联合的一些介绍
    变量的声明和定义
    C/C++内存分配区
    探寻周瑜“前世今生”
    SpringBoot中使用AOP
    springBoot中的事物管理
    springBoot整合多数据源
    spingBoot整合mybatis+generator+pageHelper
  • 原文地址:https://www.cnblogs.com/stu-jyj3621/p/14395362.html
Copyright © 2020-2023  润新知