JavaWeb —— JSP 总结

时间:2022-08-16 06:50:18

                           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目录结构\conf\server.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完结-----------------------------------------------------------