• JavaWeb —— JSP 总结


                                           JSP总结

    静态网页
      在网站设计中,纯粹HTML(标准通用标记语言下的一个应用)格式的网页通常被称为“静态网页”,静态网页是标准的HTML文件,它的文件扩展名是.htm、.html  。静态网页是网站建设的基础,早期的网站一般都是由静态网页制作的。静态网页是相对于动态网页而言,是指没有后台数据库、不含程序和不可交互的网页。

    动态网页
      网页文件里包含了程序代码,通过后台数据库与WEB服务器的信息交互,由后台数据库提供实时数据更新和数据查询服务。动态网站体现在网页一般是以asp,jsp,php,aspx等结束。

    两者区别
      网页制作使用的制作语言:静态网页使用语言:超文本标记语言(标准通用标记语言的一个应用); 动态网页使用语言:超文本标记语言+ASP或超文本标记语言+PHP或超文本标记语言+JSP等。
      程序是否在服务器端运行,是重要标志。在服务器端运行的程序、网页、组件,属于动态网页,它们会随不同客户、不同时间,返回不同的网页, ASP、PHP、JSP、ASPnet、CGI等。运行于客户端的程序、网页、插件、组件,属于静态网页,例如 html 页、Flash、JavaScript、VBScript等等,它们是永远不变的。

    常用的动态网页技术
      ASP(Active Server Page)
      ASP技术是基于.NET平台的一种动态网页技术。它有非常强大的后台处理能力,但却有一些安全性、稳定性、跨平台性的问题。ASP只支持Windows平台,对Linux、Unix不支持。

      PHP(Hypertext Preprocessor)
      PHP原始为Personal Home Page的缩写,已经正式更名为(外文名:PHP: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java的特点,利于学习,使用广泛,主要适用于Web开发领域。PHP是HTML内嵌式的语言,这一点类似于ASP,并且PHP可以跨平台。但PHP的数据库接口不规范。但是对每种数据库接口的开发都不同极大地加重了开发者的负担,并且缺少企业级应用的支持。

      JSP/Servlet(Java Server Page)
      JSP技术在基于java的平台上广泛地使用,是进行Java web开发的一种核心组件。JSP页面由HTML代码和嵌入在其中的Java脚本组成。JSP可以一次编写,到处运行。这一点JSP比PHP技术更有优势,在不同的系统平台上运行,代码不用做任何修改。

    什么是JSP
      JSP (Java Server Pages) 是java服务页面,可以在HTML中嵌入Java脚本代码。
      JSP页面元素:
      静态内容:HTML静态文本
      指 令:以"<%@" 开始,以"%>" 结束
      小脚本:<%Java代码%>
      表达式:<%=Java表达式%>
      声明:<%! 方法%>
      注释 :<!-- 客户端可以查看到-->,<%-- 客户端不能查看到--%>

    JSP(一) 三大指令
      ① page 指令 
        通过设置内部的多个属性定义整个页面的属性
        语法:
        <%@ page 属性1="属性值" 属性2="属性值1,属性值2"… 属性n="属性值n"%>

      ② include 指令(静态包含)
        将一些共性的内容写入一个单独的文件中,然后通过include指令引用该文件
        include(静态包含):这种会将两个页面编译成一个class,里面的资源可以共享。(先包含再编译)

      ③ taglib 指令
        在JSP页面中导入JSTL标签库,替换JSP中的Java代码片段
        语法:
        <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="别名"%>

    JavaBean
      JavaBean的优势
        解决代码重复编写,减少代码冗余
        功能区分明确
        提高了代码的维护性
      JavaBean 分为: 数据Bean 和 业务Bean 
        数据Bean : 私有的属性,默认的空构造,set、get方法  就是Java中的属性类
        业务Bean : 使用数据Bean。

    JSP(二)七大动作
      jsp动作(action)是指在运行期间的命令,常见的有:
      jsp:useBean
        jsp:setProperty
        jsp:getProperty
      jsp:include
      jsp:forward
        jsp:param
        jsp:plugin
      ① include
        include 动态包含(分别编译):用jsp:include动作实现,它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。flush属性: 用true ,表示页面可刷新。默认为false;在使用include命令时除非该命令被执行到,否则它是不会被Tomcat等JSP Engine编译。
        语法: <jsp: include page="页面路径" flush="true" />

      jsp:include(动态包含):这种会编译成两个独立的class,里面的资源无法共享。(先编译再包含)
      include(静态包含):这种会将两个页面编译成一个class,里面的资源可以共享。(先包含再编译)
      静态include和动态include的区别?
        相同点:都会将页面引入到另一个页面中。
        不同点:
          静态include会将引用的jsp文件和当前的jsp文件生成为一个class文件,所以jsp中的变量是可以互相访问,两个页面中应尽量避免命名冲突。
          动态include会生成两个完全不同的class文件,所以jsp中的变量不可以互相访问。
          静态包含不能传参
        适用场合:
          静态include不会检查所含文件的变化,适用于包含静态页面,直接将内容先包含后处理。
          动态include总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数,先编译之后再进行处理。

      ② useBean
        useBean动作(jsp页面使用javaBean的第二种方式),作用域默认为page(本页面有效)
        语法: <jsp:useBean id="对象名" class="包名.类名" scope="作用范围(page/request/application/session)"/>
        scope属性用于指定JavaBean实例对象所存储的域范围,其取值只能是page、request、session和application四个值中的一个,其默认值是page。

      ③ getProperty
        getProperty动作(name为useBean动作中的id).从对象中取出属性值:
        语法: <jsp:getProperty name="javaBean对象" property="javaBean对象属性名" />

      ④ setProperty
        setProperty动作(name为useBean动作中的id):
        为对象设置属性值:
        语法: <jsp:setProperty name="javaBean对象" property="javaBean对象属性名" value="值"/>

      ⑤ param
        param动作:传递参数,到达跳转页面可以通过 request.getParameter("参数名")方式取出参数值
        语法: <jsp:include page="转向页面的url" >
               <jsp:param name="参数名1" value="参数值1"></jsp:param>
               <jsp:param name="参数名2" value="参数值2"></jsp:param>
          </jsp:include>
        或者: 
          <jsp:forward page="转向页面的url">
                <jsp:param name="参数名1" value="参数值1"></jsp:param>
               <jsp:param name="参数名2" value="参数值2"></jsp:param>
          </jsp:forward>

       ⑥ forward 动作:转发页面
        语法: <jsp:forward page="login.jsp" />  相当于 request.getRequestDispatcher("转发页面").forward(request,response);

       ⑦ plugin
        plugin动作:<jsp:plugin>:用于指定在客户端运行的插件,不常用

    JSP(三)九大内置对象
       JSP内置对象是 Web容器创建的一组对象
       JSP内置对象的名称是JSP的保留字,JSP内置对象是可以直接在JSP页面使用的对象,无需使用“new”,直接使用。
       JSP中一共预先定义了9个这样的对象,分别为:request、response、session、application、out、pagecontext、config、page、exception。
      ①  request 对象 (作用域: 一次请求)
        request 对象是 javax.servlet.httpServletRequest 类型的对象。 该对象代表了客户端的请求信息,主要用于接受通过HTTP协议传送到服务器的数据。(包括头信息、系统信息、请求方式以及请求参数等)。request对象的作用域为一次请求。
       常用方法:  
        String getParameter(String name) 根据表单组件名称获取提交数据
        String[] getParameterValues(String name) 获取表单组件对应多个值时的请求数据
        void setCharacterEncoding(String charset) 指定每个请求的编码
        RequestDispatcher getRequestDispatcher(String path) 返回一个RequestDispatcher对象,该对象的forward( )方法用于转发请求
        void setAttribute(String key,Object value) 设置键对应属性值
        Object getAttribute(String key) 获取键对应属性值

      ②  response 对象
        response 对象是 javax.servlet.http.httpServletResponse 类型的对象。response 代表的是对客户端的响应,主要是将JSP容器处理过的对象传回到客户端。response对象也具有作用域,它只在JSP页面内有效。
        常用方法: 
          void sendRedirect (String location) 将请求重新定位到一个不同的URL,即页面重定向

      页面的转发
      转发的作用:在多个页面交互过程中实现请求数据的共享
      转发的实现:RequestDispatcher对象.forward()方法

      重定向与转发的区别
      区别一:
        重定向时浏览器上的网址改变
        转发是浏览器上的网址不变
      区别二:
        重定向实际上产生了两次请求
        转发只一次请求
        重定向:发送请求 -->服务器运行-->响应请求,返回给浏览器一个新的地址与响应码-->浏览器根据响应码,判定该响应为重定向,自动发送一个新的请求给服务器,请求地址为之前返回的地址-->服务器运行-->响应请求给浏览器
        转发:发送请求 -->服务器运行-->进行请求的重新设置,例如通过request.setAttribute(name,value)-->根据转发的地址,获取该地址的网页-->响应请求给浏览器
      区别三:
      重定向时的网址可以是任何网址

      转发的网址必须是本站点的网址

      转发
        转发是在服务器端发挥作用,通过forward()将提交信息在多个页面间进行传递
        客户端浏览器的地址栏不会显示出转向后的地址
        转发可以传递参数
        语法: request.getRequestDispatcher("转发网址").forward(request,response);
      重定向
        重定向是在客户端发挥作用,通过请求新的地址实现页面转向
        在地址栏中可以显示转向后的地址
        重定向不能进行参数传递
        语法: response.sendRedirect("重定向网址");

      ③ session 对象(作用域: 一次会话)
        session 对象是 javax.servlet.http.HttpSession 类型的对象。session 对象是由服务器自动创建的与用户请求相关的对象。服务器为每个用户都生成一个session对象,用于保存该用户的信息,跟踪用户的操作状态。session对象内部使用Map类来保存数据,因此保存数据的格式为 “Key/value”。 session对象的value可以使复杂的对象类型,而不仅仅局限于字符串类型。
        常用方法:
          void setAttribute(String key,Object value) 以key/value的形式保存对象值
          Object getAttribute(String key) 通过key获取对象值
          void invalidate() 设置session对象失效
          String getId() 获取sessionid
          void setMaxInactiveInterval(int interval) 设定session的非活动时间
          int getMaxInactiveInterval() 获取session的有效非活动时间(以秒为单位)
           void removeAttribute(String key) 从session中删除指定名称(key)所对应的对象

      ④ application 对象(作用域: 一次服务)
        application 对象是 javax.servlet.ServletContext 类型的对象。application 对象可将信息保存在服务器中,直到服务器关闭,否则application对象中保存的信息会在整个应用中都有效。与session对象相比,application对象生命周期更长,类似于系统的“全局变量”。
        常用方法: 
          void setAttribute(String key,Object value) 以key/value的形式保存对象值
          Object getAttribute(String key) 通过key获取对象值
          void removeAttribute(String name) 根据属性名称删除对应的属性
          String getRealPath(String path) 返回相对路径的真实路径
          Enumeration getAttributeNames() 获取所的属性名称
          String getContextPath() 获取当前Web应用程序的根目录
          String getInitParameter(String name) 根据初始化参数名称,获取初始化参数值

      ⑤ out 对象
        out 对象是 javax.servlet.jsp.JspWriter 类型的对象。out 对象用于在Web浏览器内输出信息,并且管理应用服务器上的输出缓冲区。在使用 out 对象输出数据时,可以对数据缓冲区进行操作,及时清除缓冲区中的残余数据,为其他的输出让出缓冲空间。待数据输出完毕后,要及时关闭输出流。

      ⑥ pageContext 对象
        pageContext 对象是 javax.servlet.jsp.PageContext 类型的对象。pageContext 对象的作用是取得任何范围的参数,通过它可以获取 JSP页面的out、request、reponse、session、application 等对象。pageContext对象的创建和初始化都是由容器来完成的,在JSP页面中可以直接使用 pageContext对象。
        常用方法: 
          void setAttribute(String key,Object value) 设置属性值
          Object getAttribute(String key) 获取属性值
          void removeAttribute(String key) 移除指定属性
          pageContext 本身也是一个域对象,可以操作其他三个域对象(request,response,application)的数据
        操作其他域对象的方法:
          void setAttribute(String key,Object value,int Scope)
          Object getAttribute(String key,int Scope)
          void removeAttribute(String key,int Scope)
          Scope:
            PageContext.PAGE_SCOPE;
            PageContext.REQUEST_SCOPE;
            PageContext.SESSION_SCOPE;
            PageContext.APPLICATION_SCOPE;


      ⑦ config 对象
        config 对象是 javax.servlet.ServletConfig 类型的对象。config 对象的主要作用是取得服务器的配置信息。通过 pageConext对象的 getServletConfig() 方法可以获取一个config对象。当一个Servlet 初始化时,容器把某些信息通过 config对象传递给这个 Servlet。 开发者可以在web.xml 文件中为应用程序环境中的Servlet程序和JSP页面提供初始化参数。
      

      ⑧ page 对象(作用域: 一个页面)
        page 对象是 java.lang.Object 类型的对象。page 对象代表JSP本身,只有在JSP页面内才是合法的。 page隐含对象本质上包含当前 Servlet接口引用的变量,类似于Java编程中的 thi  ⑨ exception 对象

        exception 对象是 java.lang.Throwable 类型的对象。exception 对象的作用是显示异常信息,只有在包含 isErrorPage="true" 的页面中才可以被使用,在一般的JSP页面中使用该对象将无法编译JSP文件。
        常用方法: 
          String getMessage() 返回描述异常的消息
          String toString() 返回关于异常的简短描述消息
          void printStackTrace() 显示异常及其栈轨迹
          Throwable FillInStackTrace() 重写异常的执行栈轨迹

      在页面设置支持中文字符的字符集
        乱码处理方式一(以GET方式提交数据时)
          <%
                //读取用户名和密码
               String name = request.getParameter("name");
                //对请求数据进行字符编码
                name = new String(name.getBytes("ISO-8859-1"), "utf-8");
                 %>

        乱码处理方式二(以POST方式提交数据时)
          <%    
               //设置读取请求信息的字符编码为UTF-8
               request.setCharacterEncoding("utf-8");  
               //读取用户名和密码
               String name = request.getParameter("name");
                String pwd = request.getParameter("pwd");
              %>

        乱码处理方式三(以GET方式提交数据时)
          <!--在Tomcat目录结构confserver.xml中设置字符集-->
             <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/>

    cookie的简介

      cookie是Web服务器保存在客户端的一系列文本信息
      cookie的作用
        对特定对象的追踪
        统计网页浏览次数
        简化登录
      安全性能:容易信息泄露
      在JSP中使用cookie
        创建cookie对象
          Cookie newCookie = new Cookie(String key,Object value);
        写入cookie
          response.addCookie(newCookie);
        读取cookie
          Cookie[] cookies = request.getCookies();
        常用方法:
          void setMaxAge(int expiry) 设置cookie的有效期,以秒为单位
          void setValue(String value) 在cookie创建后,对cookie进行赋值
          String getName() 获取cookie的名称
          String getValue() 获取cookie的值
          String getMaxAge() 获取cookie的有效时间,以秒为单位

      Session和cookie的区别与联系
         cookie是把用户的数据写在用户本地浏览器上, 其他网站也可以扫描使用你的cookie,容易泄露自己网站用户的隐私,而且一般浏览器对单个网站站点有cookie数量与大小的限制。
         Session是把用户的数据写在用户的独占session上,存储在服务器上,一般只将session的id存储在cookie中。但将数据存储在服务器对服务器的成本会高。
         session是由服务器创建的,开发人员可以在服务器上通过request对象的getsession方法得到session
         一般情况,登录信息等重要信息存储在session中,其他信息存储在cookie中

    session的实现原理

        服务器会为每一个访问服务器的用户创建一个session对象,并且把session对象的id保存在本地cookie上,只要用户再次访问服务器时,带着session的id,服务器就会匹配用户在服务器上的session,根据session中的数据,还原用户上次的浏览状态或提供其他人性化服务。

    cookie与session的对比
      session
        保存在服务器端用户信息
        session中保存的是Object类型
        随会话的结束而将其存储的数据销毁
        保存重要的信息
      cookie
        在客户端保存用户信息
        cookie保存的是 String类型
        cookie可以长期保存在客户端
        保存不重要的用户信息


    ---------------------------------------------------------------JSP完结-----------------------------------------------------------

  • 相关阅读:
    Python编程题44反转链表
    Python编程题45移除链表元素
    docker Redis 安裝路徑
    2: 写一个demo(zeppeline 上用flink SQL 读kafka数据)
    1: docker 安装 zeppeline
    3: 读取kafka数据写如mysql
    Linux 远程挂载 Ceph RBD 磁盘
    【Linux网络编程】字节序
    【Linux命令】iptables 禁止 IP和端口
    Jenkins发布服务报错Fatal error: put encountered an exception while uploading磁盘空间不足处理 No space left on device
  • 原文地址:https://www.cnblogs.com/798911215-Darryl-Tang/p/9123209.html
Copyright © 2020-2023  润新知