zoukankan      html  css  js  c++  java
  • Java基础——JSP(一)

    一、JSP的由来

    在很多动态网页中,绝大多部分内容是不变的,只有局部内容需要动态产生和改变。例如, 一个新闻的浏览次数,只有这个次数是动态改变的,而Servlet程序返回客户端的代码全是java程序动态创建的。Servlet 的缺点,处理界面困难。JSP 是在Servlet的基础上发展起来的,它弥补了Servlet在界面处理方面的缺陷。

    简单来讲,JSP =html+java片段+jsp标签+javascript,它功能强大,可以和javabean 结合

    另外,JSP+javabeen+servlet 就构成了mvc模式。

    JSP是运行在服务端的,也就是说,我们在桌面上创建一个.JSP文件,它也不能能够被执行哦。

    我们将它黏贴到Tomcat上的webapps文件中(或者你直接在里面创建.jsp文件也可以)。

    下一步,我们要启动tomcat。接着在浏览器中访问:http://localhost:8080/myweb/Demo.jsp。

    接下来神奇的事情发生了。在Tomcat的webapps中可以看到,帮我们自动生成两个文件。

    二、JSP的简介
    摘录自百度:
    JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP技术,它是在传统的网页HTML(标准通用标记语言的子集)文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件,后缀名为(*.jsp)。
    用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。
    它实现了Html语法中的java扩展(以 <%, %>形式)。JSP与Servlet一样,是在服务器端执行的。通常返回给客户端的就是一个HTML文本,因此客户端只要有浏览器就能浏览。
    JSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑。网页还能通过tags和scriptlets访问存在于服务端的资源的应用逻辑。JSP将网页逻辑与网页设计的显示分离,支持可重用的基于组件的设计,使基于Web的应用程序的开发变得迅速和容易。 JSP(JavaServer Pages)是一种动态页面技术,它的主要目的是将表示逻辑从Servlet中分离出来。
    Java Servlet是JSP的技术基础,而且大型的Web应用程序的开发需要Java Servlet和JSP配合才能完成。JSP具备了Java技术的简单易用,完全的面向对象,具有平台无关性且安全可靠,主要面向因特网的所有特点。
    三、最简单的JSP程序
    <%
         String userName="zhangsan";
    %>
           
    <script>
          alert(  <% userName %> ); 
    </script>

    注意:访问JSP的过程

    如果是第一次访问服务器,则翻译成一个对应的java文件(Servlet)。然后,再被编成 .class 文件并加载到内存中。

    如果是以后访问,则直接调用内存中的jsp实例,所以第一次访问慢,以后访问会更加快。

    四、3种JSP注释

    1.

    <%
            //this is 
            /* this
            is */
    %>

    2.

    <%--  //这样的注释内容不会被发送到客户端
      这是被注起来的内容 
    <h1>这是注起来的</h1>
    --%>

    3.

    <!-- <% out.print("老板让我干的活我就不干");  %>   -->   //这里的内容会发送到客户端,但浏览器不会显示

    五、JSP脚本元素(3种)

    1.

    1) 代码段 <% %>
    它要严格遵守java语言规范,需要导包的要导包
    <% %> 和   <% %> 之间的java代码是可以互相访问的,相当于写在一个  <% %>里

    2.

    2) 声明 <%!xxxxxxx%>   //注意 <%! 中间千万不能空格
    <%!public String test(){
    return "ok:";
    }%>

    3.

    3) 表达式 <%= xxx  %>    //注意 <%= 中间千万不能空格,后面不能有分号
    <%=String str="嘻嘻嘻";%>
    
    例子:
    <label><%= str %></label>  //和下面的写法等价
    <label><% out.print(str); %></label>

    附:myeclipse 生成的jsp页面,解说:

    (在实际应用中,不需要的我们可以删除它)

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>   //解说:page指令,import用来导包的,pageEncoding指当前页面编码方式
    <%
        String path = request.getContextPath();  //解说: contextPath 代表web应用的名称 /shop-admin
        String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
            //上下对齐解说: //http                    //localhost                        //8080            // shop-admin
            //上面最后生成的结果:-> http://localhost:8080/shop-admin/                                     
    %>
            
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> //解说:言档类型声明
        <html>
            <head>
            <base href="<%=basePath%>">   //解说:<base href="http://localhost:8080/shop-admin/" >   
                
            <title>My JSP 'test.jsp' starting page</title>
            <body>    
            <meta http-equiv="pragma" content="no-cache"> //解说:不缓存
            <meta http-equiv="cache-control" content="no-cache"> //解说:不缓存
            <meta http-equiv="expires" content="0">  //解说:不缓存
            <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> //解说:给网络机器人用来搜索的关键字
            <meta http-equiv="description" content="This is my page">
            <!--
            <link rel="stylesheet" type="text/css" href="styles.css">
            -->
                
            </body>
        </html>

    六、JSP版本的计算器(代码示例)

    <% 
        //接收参数
        String num1 =request.getParameter("num1"); 
        String num2 =request.getParameter("num2"); 
        String flag =request.getParameter("flag"); 
                        
        int  n_num1=0;
        int  n_num2=0;
        int result=0;
                       
        if(num1!=null&&num2!=null&&flag!=null){
        //计算
        n_num1=Integer.parseInt(num1);
        n_num2=Integer.parseInt(num2);
                           
        if(flag.equals("+")){
            result=n_num1+n_num2;
        }else  if(flag.equals("-")){
            result=n_num1-n_num2;
        }else  if(flag.equals("*")){
            result=n_num1*n_num2;
        }else  if(flag.equals("/")){
            result=n_num1/n_num2;
        }
                           
            out.print("<h1>计算结果是 "+result+"</h1>");
        }
            
        //输出结果        
        %>
                    
        <form action="calcUI.jsp" name="form1"  method="get" >
        请输入第一个数:
        <input type="text" name="num1" value='<%=request.getParameter("num1")==null?"":request.getParameter("num1")  %>'/>
        <br/>
            
        <select name="flag" >
        <option value='+' <%="+".equals(flag)?"selected ":"" %>>+</option>
        <option value='-' <%="-".equals(flag)?"selected ":"" %>>-</option>
        <option value='*' <%="*".equals(flag)?"selected ":"" %> >*</option>
        <option value='/' <%="/".equals(flag)?"selected ":"" %>>/</option>
        </select>
        <br/>
        请输入第二个数:
        <input type="text" name="num2"  value='<%=request.getParameter("num2")%>' />
                    
        <input type="submit"  value="计算" />
        </form>

    七、MVC模式

    M  ->mode 模型层 -> javaBeen  (比如 UserDao,UserInfo)

    V  ->view 视图层  -> html , jsp

    C  ->controller 控制层  ->由Servlet担当

     八、JSP指令

    指令是为JSP引擎而设计的,它不直接产生任何输出,只是告诉引擎如何处理JSP页中的其余部分。指令必须嵌套在<%@ %> 中,其本语法如下

    <%@ 指令 属性名="值" %>,其中属性名是大小写敏感的

    //例子
    <%@ page language="java" import="java.util.*,java.text.*,cat.bean.*" pageEncoding="UTF-8"%>

    * JSP中的指令一共有三种

    -- page   // <%@ page  ...  >

    -- include   // <%@ include  ...  > 用来包含别的页面

    -- tablib   // <%@ tablib  ...  >  用来指定标签库

    * page 指令

    -- Page 用来定义jsp页面的各属性,几乎所有的页面都会出现page属性

    -- 无论page属性出现在什么位置,它的作用都是整个jsp页面

    -- 一个页面可以包含多任意数量的page指令

    * page 指令的属性

    --language :jsp页面采用的语言,默认的是”java”

    --contentType: 用于设置响应正文的 mime 类型(即指定Content-Type响应头字段的值),和说明

    JSP文件中的文本内容的字符集编码. content-Type  默认的mime 类型是 text/html,字符集是”iso8859-1”

    JSP引擎会根据page指令的contentType 属性生成相应调用ServletRresponse.setContentType 方法的语句

    --extends:在当前的jsp页面中所用到的类的基类。(一般不使用)

    --import:当前jsp页面所用到的java类。

    --session:当前的jsp页面是否使用会话。默认的是true.(不要修改它)

    如果将其设为false,则JSP翻译成的Servlet将不自动预先创建好Session隐式对象

    --buffer:指定了out 变量所使用的缓存的大小。默认的是8K.

    --autoFlush :当缓冲区满的时候,是否自动将值输出至jsp页面。默认的是true.

    --errorPage:用来处理已经发生的,但当前页面没有捕获的异常。例如要求有输入参数,但是没有输入.

    它的属性值必须使用相对路径,如果以/开头,表示想对于当前web应用程序的根目录,而不是站点根目录

    --isErrorPage: 设置当前页面是否是专门用于处理其他页面未捕异常的页面,默认值为false

    只有明确的将 isErrorPage 设为true,当前页面才能用做异常处理,才能拿到exception隐式对象

    ==小例子: errorPage 指令 的应用

    在要捕捉异常的页面中:

    -- <%@ page language="java" import="java.util.*" pageEncoding="gbk" errorPage="ErrPage.jsp"%>在异常处理页面中

    -- <%@ page language="java"  isErrorPage="true"%>

    -- <%=    exception.toString() %>

    --pageEncoding :指定jsp源文件中的字符所使用的字符集编码

    pageEncoding 指jsp文件本身的编码

    contentType="text/html;charset=gkb" 这里的charset 指的是服务器发送给客户端时的内容编码
    注意:JSP要经过两次编码

    ==第一阶段,将jsp编译成 .java 它会根据pageEncoding来读取jsp 结果是由指定的编码方案翻译成统一的UTF-8 的java源码(即.java)

    如果pageEncoding设定错的话,将会出现中文乱码

    ==第二阶段 就是由java源码到java的字节码的编译,不管JSP文件在编写的时候用的是什么编码,最后这个阶段的结果全是UTF-8 java源码    

    * include 指令

    include 指令  是静态导入

    用于通知JSP引警在翻译当前JSP页面时将其他文件中的内容合并进当前JSP页面转换成的Servlet源文件中,这种在源文件级别进行的引入称为静态引入,当前JSP页面和静态引入的页面紧密结合成一个Servlet。

    1 被引入的文件必须尊循JSP语法,可以包含静态HTML,JSP脚本元素,JSP指令 和 jsp行为元素等普通JSP页面所具有的一切内容

    2 被引入的文件可以使用任意扩展名,(就是叫.html也行), 为了见名知义,jsp规范建议使用.jspf (jsp fragments) 作为静态引入文件的扩展名

    3 在将JSP文件翻译成Servlet 源文件时,JSP引擎将合并被引入的文件与当前JSP页面中的指令元素,所以,除了pageEncoding  和 import ,page指令的其他属性不能在这两个页面中有不同的设置

    4 除了指令元素外,要引入的文件中的所有其他元素都被转换成相应的java代码,然后插入进当前

    JSP 页面所翻译成的Servlet文件中,插入的位置和 include 指令 在当前jsp 页面中的位置保持一致

    5 两者是在 JSP引擎翻译成Servlet的过程中进行合并的,而不是先合并成源文件再翻译

    6 file 属性设置的路径必须是相对路径,如果以 / 开头,指的是相对于当前web应用程序的根目录,而不是 站点根目录    

    7 出现在一个 JSP 页面中的 include 指令的数量不受限制

    <%@ include file="localURL" %>    
                        <table border="1">
                        <tr>
                            <td>
                                <%@ include file="test.html"%></td>
                            <td>
                                bbb
                            </td>
                        </tr>
                        <tr>
                            <td>
                                 数据
                            </td>
                            <td>
                                <%@ include file="test.html"%></td>
                        </tr>
                    </table>

    * taglib 指令

    通知 JSP 容器,页面依赖于自定义标记库

    <%@ taglib uri ="tagLibraryURI" prefix = "tagPrefix" %>

  • 相关阅读:
    vss的ss.ini丢失或损坏导致的vss无法登录错误
    NHibernate各种数据库连接参数文件配置方法说明
    oracle操作语句
    企业微信群聊机器人发送本地图片
    securecrt 或xshell 转发80端口
    SecureCRT 或 XSHELL 转发 X11 图形化GUI
    Windows 创建 .gdbinit 提示必须键入文件名
    vscode C++ 程序 windows
    vscode C++ 程序 windows
    解决source insight 4.0 不识别.cc文件的问题
  • 原文地址:https://www.cnblogs.com/1693977889zz/p/7476502.html
Copyright © 2011-2022 走看看