Jsp的基本概念与基本语法

jsp的基本概念

JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它是在传统的网页HTML文件(.htm,.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件,后缀名为(*.jsp)。 用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。
它实现了Html语法中的java扩展(以 <%, %>形式)。JSP与Servlet一样,是在服务器端执行的。通常返回给客户端的就是一个HTML文本,因此客户端只要有浏览器就能浏览。

jsp的主要用途

JSP(JavaServer Pages)是一种动态页面技术,它的主要目的是将表示逻辑从Servlet中分离出来。Java Servlet是JSP的技术基础,而且大型的Web应用程序的开发需要Java Servlet和JSP配合才能完成。JSP具备了Java技术的简单易用,完全的面向对象,具有平台无关性且安全可靠,主要面向因特网的所有特点,是当前开发网站的重要技术。

jsp的执行过程

  • 用户在网页上的动态请求被分发到web容器之中;
  • 容器回去执行字节码文件(后缀名为.class的文件)
  • Servlet是Java类,可以直径成.class文件。那么对于jsp文件来说,它是通过什么方法编译成为一个.class文件的呢?是否存在jsp这样的一个java类呢。这个其实服务器在处理jsp文件的时候,它是将jsp页面转换为Java类,这个Java类继承了HTTPJSPBase,虽然这个Java类没有直接继承HTTPServlet类,但是它的父类HTTPJSPBase是继承了HTTPServlet的,所以追究其本质来说,jsp实际上就是一个servlet。他对页面的控制是通过一个OUT对象将HTML语言输出在文件页面上的。

在这里插入图片描述
当然这个只是我们jsp文件中显示HTML语言的原理,但是我们在网页上能够看到jsp语言所设计的动态页面效果的方法是什么呢?就是指我们调用out对象解析Jsp文件的方法;
在这里插入图片描述
这里我们可以从源码中看到,这个解析jsp文件的主要方法就是_ jspService方法,它能够将我们的jsp文件处理好后展示在前端网页;

jsp的一些基本语法

  1. jsp的注释
    jsp的注释分为两类三种:
    ·显示注释:使用html的注释风格
    ·隐式注释
    ·java注释
    ·<%–需要注释的额内容–%>
    观察三种注释的区别:

以发现显示注释和隐式注释的区别,所谓的显示注释就是在查看网页源文件的时候可以看到注释的内容,隐式注释在查看网页源文件的时候看不到注释的内容。

2.scriptlet
从使用上来理解,在整个的jsp中scriptlet有三种形式:

<%java程序%>
      ·<%! java程序%>
      ·<%= java表达式%>

第一种script:使用的<%java程序%>,这种scriptlet一般使用定义变量和编写语句。

<%
    int sum = 0;
    int sumA = ++sum;
    System.out.println(sumA);
%>

以上程序可以在控制台输出,如果我想要在页面上输出内容呢?这个时候我们必须使用out对象,out是jsp的内置对象之一,也就是说不需要实例化就可以使用的对象。

<%
    int sum = 0;
    int sumA = ++sum;
    System.out.println(sumA);
    
   out.print(" <h1> "+sumA+"< h1>");//向浏览器输出
%>

第二种scriptlet:<%! java程序%>在此种scriptlet中可以声明常量,编写方法,编写类,但是一般情况下,我们不会在一个jsp中编写一个类的。而且在此种的scriptlet中不会单独的编写语句。

<%!
    //定义常量
    //编写方法
    //一般不会定义一个类
    //也不会单独的编写语句
    public static final String DRIVER = "oracle.jdbc.driver.OracleDriver";
    public static final String URL = "jdbc:oracle:thin:@192.168.1.102:1521:wanczy";
    public static final String USERNAME = "scott";
    public static final String PASSWORD = "wanczy";
    
    public int cheng(int x,int y){
        return x*y;
    }

%>
<%
    out.print("<h1>"+DRIVER+"</h1>");
    out.print("<h1>"+URL+"</h1>");
    out.print("<h1>"+USERNAME+"</h1>");
    out.print("<h1>"+PASSWORD+"</h1>");
    int z = cheng(10,20);
    out.print("<h1>"+z+"</h1>");
%>

第三种scriptlet:<%=java表达式%>,此种scriptlet有一个别名,叫做表达式输出,可以使用此种形式的scriptlet输出一个变量或者一个具体的额内容。

<%!
    //定义常量
    //编写方法
    //一般不会定义一个类
    //也不会单独的编写语句
    public static final String DRIVER = "oracle.jdbc.driver.OracleDriver";
    public static final String URL = "jdbc:oracle:thin:@192.168.1.102:1521:wanczy";
    public static final String USERNAME = "scott";
    public static final String PASSWORD = "wanczy";
    
    public int cheng(int x,int y){
        return x*y;
    }
%>
<h1><%= DRIVER%></h1>
<h1><%= URL%></h1>
<h1><%= USERNAME%></h1>
<h1><%= PASSWORD%></h1>
<h1><%= cheng(10,200)%></h1>

在开发中一般使用第三种

  1. page指令
    page表示的是当前的jsp的页面,可以理解为一个对象,就是说可以将jsp页面当做一个对象来看待,page指令的主要功能有两个:

    ·设置MIME类型

    ·导包指令

MIME:多功能网际邮件扩充协议,主要的功能就是制定浏览器的访问形式及编码格式。

<%@page contentType="text/html; charset=utf-8" %>

设置编码格式,防止乱码

们之前说过html和htm都是静态网页的后缀,处理的形式是完全一样的,这就是因为其内部的MIME类型设置是相同的。我们可以通过Tomcat/conf/web.xml查看所有的MIME类型。

<mime-mapping>
        <extension>abs</extension>
        <mime-type>audio/x-mpeg</mime-type>
    </mime-mapping>
    <mime-mapping>
        <extension>ai</extension>
        <mime-type>application/postscript</mime-type>
    </mime-mapping>
    <mime-mapping>
        <extension>aif</extension>
        <mime-type>audio/x-aiff</mime-type>
    </mime-mapping>
    <mime-mapping>
        <extension>aifc</extension>
        <mime-type>audio/x-aiff</mime-type>
    </mime-mapping>

MIME类型有很多,只要合理的设置了MIME类型,则一个页面理论上是可以显示成任意的风格
4) 包含指令

头部信息
操作菜单实际的操作区域
尾部信息

如果想要实现以上的网页的布局,有两种方式:

  ·分别将头信息,操作菜单,实际操作区域和尾部信息写在不同的界面里面,用包含的方式进行包含(框架布局,包含)

  ·所有的内容写在一个页面中(响应式布局)

以上的两种形式,现在最流行的是响应式布局,但是响应式布局存在问题就是维护不方便,一个页面中的内容太多了

在jsp中使用include进行包含,语法有两种格式:

  ·@include指令

  ·<jsp:include> jsp的include标签

第一种包含:使用include指令,这种包含叫做静态包含,主页面不能够向被包含的页面传递参数,可以包含任意类型的文件,将包含文件的内容加载。

<%@page contentType="text/html; charset=utf-8"%>
<h1>includeDemo01.jsp</h1>
<%@include file="content.html"%>
<%@include file="content.txt"%>
<%@include file="content.jsp"%>
<%@include file="content.ini"%>

现在我们新建了几个不同类型的文件,使用包含语句将这几个文件全部包含到jsp中。程序显示的效果是将这几个不同类型文件的内容加载进来。

第二种包含:使用<jsp:include page=”被包含界面”>,这种包含称为动态包含,如果被包含的界面是jsp,则先处理之后将jsp的结果进行包含,如果是非jsp的页面的话,则和静态的包含是一致。语法格式有两种:

  ·<jsp:include page =”被包含页面”/>

  ·<jsp:include page=”被包含的页面”>

             <jsp:param name=”参数名称” value=”参数的值”/>

             <jsp:param name=”参数名称” value=”参数的值”/>

             …

       </jsp:include>

范例:使用第一种语法格式

<%@page contentType="text/html; charset=utf-8"%>
<h1>includeDemo01.jsp</h1>

<jsp:include page="content.html"/>
<jsp:include page="content.txt"/>
<jsp:include page="content.jsp"/>
<jsp:include page="content.ini"/>

以上的包含和使用include指令包含效果是相似的,我们把这种包含也成为静态包含。

范例:第二种语法格式,如果要向被包包含的页面传递参数的话,那么必须被包含的界面是jsp界面

以上的包含和使用include指令包含效果是相似的,我们把这种包含也成为静态包含。

范例:第二种语法格式,如果要向被包包含的页面传递参数的话,那么必须被包含的界面是jsp界面

<%@page contentType="text/html; charset=utf-8"%>
<h1>includeDemo02.jsp</h1>
<!-- 传递参数 -->
<jsp:include page="includeDemo03.jsp">
    <jsp:param value="DH15" name="className"/>
    <jsp:param value="FangLinTang,QiCao" name="classMo"/>
</jsp:include>
<%@page contentType="text/html; charset=utf-8"%>
<h1>includeDemo03.jsp</h1>
<!-- 接收参数 -->
<h1><%=request.getParameter("className") %></h1>
<h1><%=request.getParameter("classMo") %></h1>

两种包含的区别:我们知道包含有include指令和jsp的include标签,那么我们要通过代码来观察两种包含的区别:

第一种包含

<%@page contentType="text/html; charset=utf-8"%>
<h1>includeDemo01.jsp</h1>
<%
    int i = 0;
 %>
<%@include file="content.jsp" %>
<h1><%=i %></h1>
<h1>Content.jsp</h1>
<%
    int i = 0;
 %>
 <h1><%=i %></h1>

发现提出错误:重复定义了变量i,因为include指令格式的包含是将内容进行包含。

<%@page contentType="text/html; charset=utf-8"%>
<h1>includeDemo01.jsp</h1>
<%
    int i = 0;
 %>
<jsp:include page="content.jsp"/>
<h1><%=i %></h1>

现在第第二种包含可以正确的显示,不会收到包含与包含程序的影响,通过以上的两个程序我们可以得出include指令包含和jsp:include包含的区别:

  • 指令包含是将被包含页面的内容进行包含

  • 标签包含是将被包含页面的结果进行包含

  1. 跳转指令
    页面和页面之间的跳转,我们目前知道的有四种:

    ·通过超链接

    ·表单提交

    · 重定向

    ·转发

今天我们来讲到第五种:使用jsp:forward标签完成跳转功能,当我们程序执行到语句的时候,会立刻无条件的跳转,跳转指令也属于标签指令格式。语法有两种:

  ·<jsp:forward  page=”跳转后的界面”/>

  ·<jsp:forward  page=”跳转后的界面” >

             <jsp:param name=”参数名称” value=”参数的值”/>

             …

       </jsp:forward>

所有的jsp的标签都需要完结的,在开发中,我们尽量将所有的标签都进行完结。

范例:完成跳转的功能

<%@page contentType="text/html; charset=utf-8"%>
<h1>这是frowardDemo01.jsp</h1>
<jsp:forward page="forwardDemo2.jsp">
    <jsp:param value="DH15" name="className"/>
</jsp:forward>
<%@page contentType="text/html; charset=utf-8"%>
<h1>这是frowardDemo2.jsp</h1>
<h1><%=request.getParameter("className") %></h1>

发现我们的程序进行了跳转,而且向跳转后的页面传递了参数,从页面显示来看,虽然完成了跳转功能,但是地址栏依然显示的forwardDmeo01.jsp,也就是说地址栏没有发生改变,以后碰到如果跳转后地址栏显示的是跳转前的地址,那么这种跳转我们叫做是服务端跳转,只要是服务端跳转,地址栏是永远不会发生变化的。像a标签和表单提交,我们都知道地址栏会发生变化,这种跳转我们叫做客户端跳转。以上的程序进行了服务端跳转而且向跳转后的页面传递了参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值