zoukankan      html  css  js  c++  java
  • JSP和JavaBean

    JSP

      JSP全名为Java Server Pages,即java服务器页面,其根本是一个简化的Servlet设计。它是在传统的网页HTML文件中插入Java代码,从而形成JSP文件。

      JSP注释分为显式(客户端可以看见)和隐式注释(不可见)。

        显式:  <!-- -->

        隐式:  //   、  /**/   、  <%--  --%>

    JSP编译指令

    page

      定义一个jsp页面的相关属性。<%@page 属性=“内容”%>常用importpageEncodingerrorPage/isErrorPage

      以下是会产生异常的页面的配置:

    <%@pagelanguage="java" import="java.util.*" errorPage="error.jsp" isErrorPage="false" %>

      exception的实例代表其他页面的异常和错误。只有当页面是错误处理页面时,即isErrorPage为true时,该对象才可以使用。

      errorPage的实质就是JSP的异常处理机制,发生异常时才会跳转到errorPage指定的页面,没必要给errorPage再设置一个errorPage。所以当errorPage属性存在时,isErrorPage属性值为false。

    含有isErrorPage属性表示当前页面是处理异常的页面,不是会产生异常的页面。

    include

      静态包含:<%@ include file=”” %>

      静态包含中实际上是将所包含的文件内容导入目标页面,然后再一起进行编译,最后再将一份整体的内容展现给用户,属于先包含,后编译。

      动态包含:<jsp:include page=””>

      动态包含语句可以自动区分被包含的页面是静态还是动态。如果是静态页面,则与静态包含一样,将内容包含进来处理,如果是动态页面,可以先进行动态地处理,然后再将处理后的结果包含进来。

    taglib

      用于定义和访问自定义标签

     

    JSP内置对象

    pageContext

    JSP页面容器

    request

    得到用户的请求信息

    response

    服务器向客户端的回应信息

    session

    保存每一个用户的信息

    application

    所有用户的共享信息

    config

    服务器配置,可以获得初始化参数

    out

    页面输出

    page

    从页面中表示出来的一个Servlet实例

    exception

    JSP页面所发生的异常,在错误页面中起作用

     

     

    4种属性范围

          page:只在一个页面中保存属性,跳转之后无效。

          request:在一次请求中保存属性,服务器跳转后仍然有效。

          session:在一次回话范围中保存,无论何种跳转都可以使用,但是新开浏览器失效。

          application:在整个服务器上保存,所有用户都可以使用。

      操作属性的方法如下:

    public void setAttribute(String name ,Object value)    
    public Object getAttribute(String name)
    public void removeAttribute(String name)

    request对象 

      接收客户端发送而来的请求信息。

      request是javax.servlet.http.HttpServletRequest接口的实例化对象,HttpServlet是ServletRequest的子接口。

      常用方法:

    public String getParameter(String name)
    public String[] getParameterValues(String name)
    public Httpsession getSession()
    //获得上下文资源路径
    public String getContextPath()
    //解决乱码
    request.setCharacterEncoding(“utf-8”) 

    response对象

      对客户端的请求进行回应,将Web服务器处理后的结果发回给客户端。

      response是javax.servlet.http.HttpServletResponse接口的实例化对象,HttpServlet是ServletResponse的子接口。

      常用方法

    //重定向
    public void sendRedirect(String location) throws IOException

    Session对象

      session最主要的用处是完成用户的登录,注销等常见功能,每一个Session对象都表示不同的访问用户,session对象是javax.servlet.http.HttpSession接口的实例化对象,所以session只能应用在HTTP协议中。

      常用方法:

    public String getId()
    //让session失效
    public void invalidate()

    application对象

      application对象是javax.servlet.ServletContext接口的实例化对象。

      常用方法:

    //得到虚拟目录对应的绝对路径
    String getRealPath(String Path)

    config对象

      Web目录中必须存在一个WEB-INF文件夹,该文件夹无法被外部所看见,安全性最高。因为WEB-INF中的文件太安全,外面永远无法访问,可以通过一个映射进行操作。

      例如将index.jsp放在WEB-INF目录中,外部将无法访问到,则需要在web.xml文件中进行配置

    <servlet>
      <servlet-name>hello</servlet-name>
      <jsp-file>/WEB-INF/index.jsp</jsp-file>
    </servlet>
    <servlet-mapping>
      <servlet-name>hello</servlet-name>
      <url-pattern>/hello</url-pattern>
    </servlet-mapping>

      上面配置表示,将/WEB-INF/index.jsp的文件映射成为一个/hello的访问路径,程序会自动根据<servlet-mapping>节点中配置的<servlet-name>找到对应的<servlet>节点,并找到<jsp-file>所指定的真是文件路径以执行程序。

      config对象是javax.servlet.ServletConfig接口的实例化对象,主要功能是取得一些初始化的配置信息。

      常用方法:

    public String getInitParameter(String name)

    在<servlet>中的配置

    <init-param>
        <param-name></param-name>
        <param-value></param-value>
    </init-param>

    pageContext对象

      pageConext对象是javax.servlet.jsp.PageContext类的实例,主要表示一个页面的上下文。

      之前的request、response、config、application、<jsp:include>和<jsp:forward>等操作实际上都可以在pageContext对象中完成。

     

    JSP动作指令

     

    jsp:forward

    执行页面转向,将请求的处理转发到下一个页面

    jsp:param

    用于传递参数,必须与其他支持参数标签一起使用

    jsp:include

    动态引入一个JSP页面

    jsp:plugin

    下载JavaBean或Applet到客户端执行

    jsp:useBean

    使用JavaBean

    jsp:setProperty

    修改JavaBean实例的属性值

    jsp:getProperty

    获取JavaBean实例的属性值

     include

    1、静态包含

       指令<%@include file = “abc.jsp” %>

      (1)两个jsp页面的<%@page contentType=“text/html;charset=”utf-8” %>应该保持一致。不能向被包含的jsp页面传递参数。

      (2)包含的jsp页面与被包含的jsp页面共用一个request内置对象。

      (3)将两个jsp文件合二为一,生成一个以包含页面命名的Servlet和class文件。

      (4)静态include纯粹是把代码写在外面的一种共享方法,所有的变量都是可以和include它的主文件共享,两者高度紧密结合,不能有变量同名的冲突.而页面设置也可以借用主文件的。

      (5)用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面,直接将内容先包含后处理。

    2、动态包含

      <jsp:include page=“abc.jsp”/>

        (1)动态包含将两个jsp文件各自生成自己的Servlet和class文件。

        (2)动态包含只有在执行到它的时候才加载,所以才叫动态包含。

        (3)动态include的结构是两者独立,直到输出时才合并。

     

    转发和重定向

      转发(forward)

      静态

    request.getRequestDispatcher(“main.jsp”).forward(request,response);

      动态

    <jsp:forward page=“main.jsp”>

    转发方法的调用者与被调用者之间共享相同的request 对象和response 对象,它们属于同一个访问请求和响应过程。转发到的页面能获取数据。

    RequestDispatcher.forward方法只能将请求转发给同一个WEB应用中的组件;

    调用RequestDispatcher.forward方法的请求转发过程结束后,浏览器地址栏保持初始的URL地址不变。

     

      重定向(redirect)

    HttpServletResponse.sendRedirect(“main.jsp”);

      重定向方法调用者与被调用者使用各自的request 对象和response 对象,它们属于两个独立的访问请求和响应过程。重定向后的页面不能获取原请求存放的数据。

      HttpServletResponse.sendRedirect方法不仅可以重定向到当前应用程序中的其他资源,还可以重定向到同一个站点上的其他应用程序中的资源,甚至是使用绝对URL重定向到其他站点的资源。

      调用HttpServletResponse.sendRedirect方法重定向的访问过程结束后,浏览器地址栏中显示的URL会发生改变,由初始的URL地址变成重定向的目标URL。

     

    区别

      jsp:forward动作执行的是强制性跳转,写在其后面的语句不会执行。而sendRedirect()方法跳转至页面后,还会执行后面的代码;

      jsp:forward动作是将page的值指定的页面直接送给IE。sendRedirect()方法是告诉IE要跳转页面,IE再自动调用其参数指定值的页面,其间经过三趟通讯;

     

     

    转发

    重定向

    代码

    RequestDispatcher.forward

    <jsp:forward page=“main.jsp”>

    HttpServletResponse.sendRedirect

    url

    url地址不会改变

    初始的URL地址变成重定向的目标URL。

    数据

    转发到的页面能获取数据。

    重定向后的页面不能获取原请求存放的数据。

    请求

    不会发送新的请求

    发送了新的请求

    后边语句

    不会执行

    会执行后面的代码

     

     

    JSPServlet区别

    联系:

      JSP是Servlet发展后期的产物,Servlet利用输出流动态生成整个HTML,开发效率低下。JSP是在HTML中插入java代码形成。

      主要用JSP来动态生成HTML文件,然后返回客户端显示。Servlet需要将整个页面作为结果返回时,通过调用jsp文件来实现。

     

    区别:

    (1)JSP是动态网页开发技术,是运行在服务器端的脚本语言,而Servlet是web服务器端程序技术。访问一个JSP页面时,服务器会将这个JSP编译后就变成了“类Servlet”(JSP的本质就是Servlet,JVM只能识别java的类,不能识别JSP代码);

    (2)JSP擅长表现于页面显示,Servlet更擅长于逻辑控制;

    (3)Servlet中没有内置对象,JSP中的内置对象都是通过HttpServletRequest对象,HttpServletResponse对象以及HttpServlet对象得到;

    (4)JSP修改后可以立即看到结果,不需要编译;Servlet需要编译;

    (5)在标准的MVC架构中,Servlet作为Controller接受用户请求并转发给相应的Action处理,JSP作为View主要用来产生动态页面。

     

    JavaBean

        JavaBean是使用Java语言开发的一个可重用的组件,在JSP开发中可以使用JavaBean减少重复代码,使整个JSP代码的开发更简洁。

        JavaBean满足的条件是:

          ①所有的类必须放在一个包中,web中没有包的类是不存在的。

          ②所有的类必须声明为public class,这样才能外部类访问。

          ③类中所有的属性都必须封装,使用private声明。提供相应的setter,getter方法

          ④至少存在一个无参构造方法。

    web开发的标准目录结构

    目录或文件名

    作用

    WEB ROOT

    Web的根目录,一般虚拟目录直接指向此文件夹

    WEB-INF

    Web目录中最安全的文件夹,保存各种类、第三方jar包、配置文件

    web.xml

    Web的部署描述符

    classes

    保存所有的JavaBean,如果不存在,可以手工创建

    lib

    保存所有的第三方jar文件

    tags

    保存所有的标签文件

    jsp

    存放*.jsp文件,一般根据功能创建子文件夹

    css

    样式表文件的保存路径

    images

    存放所有的图片

     

    <jsp:useBean>指令

        与import语句一样,导入所需要的JavaBean

        <jsp:useBean id=”实例化对象名” scope=”保存范围” class=”包.类名称”>

     

    <jsp:setProperty>

        设置属性

        <jsp:setProperty name=”实例化对象名” property=”属性名称” value=”内容”>

     

  • 相关阅读:
    dynamic 类型不能访问属性
    chrome浏览器另存为/上传附件崩溃
    HTTP 错误 405.0
    2019目录之电影
    面向面试编程-概念之-分布式与集群的区别和联系
    面向面试编程代码片段之GC
    2018-12-24
    VUE iview date-picker取时间范围...
    关闭shift中英文切换 英文代码/中文注释随意切换着写。
    为什么你在群里提的技术问题没人回答?
  • 原文地址:https://www.cnblogs.com/ghq120/p/8150954.html
Copyright © 2011-2022 走看看