zoukankan      html  css  js  c++  java
  • JAVAEE之jsp语法基础

    jsp的常用知识点:

    • jsp的三种注释
    • 三种scriptlet及其区别
    •       page指令
    •       jsp中连接数据库
    •       包含指令
    •       跳转指令
    •       登陆程序

    jsp的介绍:

    jsp是在sun公司吸收了asp的特点,在html中加入了java代码,形成了jsp。任何的语言都有自己的语法,jsp虽然是在java基础上的应用,但是依然有其自己扩充的语法,而且在jsp中,所有的java语言都可以使用。

    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>

    在开发中一般使用第三种

    动态打印表格

    定义输入的表单

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <title>inputTable.html</title>
        
      </head>
      
      <body>
          <center>
              <form  action = "jspDemo05.jsp" method="post" onsubmit="return checkValue(this)">
                  <!-- action 表示的是次表单提交的路径 -->
                  <!-- method 表示的提交方式,有两种(post、get) -->
                  <!-- onsubmit表示提交出发的事件 -->
                  <table>
                      <caption>输入行和列</caption>
                      <tr>
                          <td align="right">输入行:</td>
                          <td align="left"><input type="text" name="rows"/></td>
                      </tr>
                      <tr>
                          <td align="right">输入列:</td>
                          <td align="left"><input type="text" name="cols"/></td>
                      </tr>
                      <tr>
                          <td align="right"><input type="submit" value="提交"/></td>
                          <td align="left"><input type="reset" value="重置"/></td>
                      </tr>
                  </table>
              </form>
          </center>
      </body>
      <script type="text/javascript">
          function checkValue(f){
              var rows = f.rows.value;//取得输入的行
              var cols = f.cols.value;
              if(isNaN(rows)){//使用正则
                  alert("行必须输入数字");
                  f.rows.focus();//此标签得到焦点
                  return false;
              }
              if(isNaN(cols)){//使用正则
                  alert("列必须输入数字");
                  f.cols.focus();//此标签得到焦点
                  return false;
              }
              return true;
          }
        </script>
    </html>

    定义jsp打印表格

    <%
        //接收表单传递的参数,使用request.getParemeter(参数名称)
        int rows = Integer.parseInt(request.getParameter("rows"));
        int cols = Integer.parseInt(request.getParameter("cols"));
    %>
    <table border="1">
    <%
        for(int i = 1;i<= rows;i++){
        %>
            <tr>
        <%
            for(int j = 1;j<=cols;j++){
            %>
            <td><%=i*j %></td>
            <% 
            }
         %>    
            </tr>
        <%
        }
     %>
    </table>

    4.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类型,则一个页面理论上是可以显示成任意的风格

    使用page进行导包

    使用import指令完成导包,而且import是jsp中唯一一个可以设置多次的指令。

    <%@page contentType="text/html; charset=utf-8"%>
    <%@page import="java.sql.*,java.util.*"%>
    <%@page import = "java.io.*"%>
    <%@page import="com.wanczy.*"%>

    既然我们在jsp中可以导入sql包,也就是意味着jsp可以链接数据库了,既然jsp要链接数据库的话,必须要导入Oracle驱动包,实际上只需要在tomcat/lib目录中加入驱动程序就可以了。如果是通过快速部署项目的话,驱动程序还必须导入到工程中去,有两种方式:

          ·类似与java工程一样进行导入

          ·将驱动程序放入到web-inf/lib目录中

    范例:查询dept表中的所有的数据

    <%@page contentType="text/html; charset=utf-8"%>
    <%@page import="java.sql.*"%>
    <%!
        //定义常量
        //编写方法
        //一般不会定义一个类
        //也不会单独的编写语句
        public static final String DRIVER = "oracle.jdbc.driver.OracleDriver";
        public static final String URL = "jdbc:oracle:thin:@192.168.1.103:1521:wanczy";
        public static final String USERNAME = "scott";
        public static final String PASSWORD = "wanczy";
    %>
    <table>
    <caption>部门信息表</caption>
    <tr>
        <th>部门编号</th>
        <th>部门名称</th>
        <th>部门位置</th>
    </tr>
    <%
        Class.forName(DRIVER);
        Connection conn = DriverManager.getConnection(URL,USERNAME,PASSWORD);
        String sql = "select deptno,dname,loc from dept";
        PreparedStatement pstate = conn.prepareStatement(sql);
        ResultSet res = pstate.executeQuery();
        while(res.next()){
    %>
        <tr>
            <td><%=res.getInt(1) %></td>
            <td><%=res.getString(2) %></td>
            <td><%=res.getString(3) %></td>
        </tr>
    <%
        }
        res.close();
        pstate.close();
        conn.close();
    %>
    </table>

    5.包含指令

    头部信息

    操作菜单

    实际的操作区域

    尾部信息

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

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

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

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

    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包含的区别:

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

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

    6.跳转指令

    页面和页面之间的跳转,我们目前知道的有两种:

          ·通过超链接

          ·表单提交

    今天我们来讲到第三种:使用<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标签和表单提交,我们都知道地址栏会发生变化,这种跳转我们叫做客户端跳转。以上的程序进行了服务端跳转而且向跳转后的页面传递了参数。

    7.小结    

             ·jsp中三种注释和三种script

           ·可以通过设置mime类型完成浏览器访问时的编码的设置

           ·导包指令的话可以导入任意的存在包

           ·jsp链接数据库

           ·对于包含,要了解包含的语法格式并且要知道两种不同语法包含的区别

           ·对于跳转来说,一定要区分清楚什么是服务端跳转,什么是客户端跳转

  • 相关阅读:
    UE4 Abc 批量导入
    UE4源码摘录(424)
    JZ10 矩形覆盖
    JZ27 字符串的排列
    JZ66 机器人的运动范围
    JZ65 矩阵中的路径
    JZ12 数值的整数次方
    JZ37 数字在升序数组中出现的次数
    JZ6 旋转数组的最小数字
    JZ67 剪绳子
  • 原文地址:https://www.cnblogs.com/wusha/p/7190049.html
Copyright © 2011-2022 走看看