zoukankan      html  css  js  c++  java
  • JSP的使用

      JSP全称为(Java server page),之所以出现JSP,最主要的目的是抽离出Servlet中输出HTML的部分,由于之前响应客户端的时候,是直接在Servlet中利用response.getWriter().println()方法写的HTML代码,这样做显然很麻烦。并且代码的耦合度非常高,因此产生了JSP。

      JPS中可以含有JAVA代码、HTML(CSS+JS)代码,JSP是一种Servlet,它内置了许多对象。如request、out等。虽然JSP是一种Servlet但是与HttpServlet的工作方式有点不同。HttpServlet是由编译器编译成.class文件,然后才部署到服务器的。然而JSP是先部署源代码,后编译成.class文件的。

      如:index.jsp文件,当第一次被访问的时候会先由Tomcat转换成index_jsp.java文件,然后再编译成index_jsp.class文件,该class文件便是jsp对应的Servlet文件。如果后面再次访问该JSP的时候无需再次编译而是直接使用之前编译好的index.class文件。所以第一次加载JSP的时候会感觉比较慢,但是后面的访问就没有该问题了。

      JSP主要包含以下几个技术点:

        1.javaBean

        2.EL (Expreission Language) 表达式

        3.JSTL (Java Standard Tag Library) 标签库

        4.自定义标签

        5.指令

                  6.行为

    一:JSP代码演示

     1 <%@ page language="java" contentType="text/html; charset=UTF-8"
     2     pageEncoding="UTF-8"%>
     3 <%@ page import="java.util.*"%>
     4 <!-- 添加java代码 -->
     5 <%
     6     //创建变量保存要展示的数据
     7     String showInfo = "";
     8     //获取用户本地信息
     9         Locale locale = request.getLocale();
    10         Calendar calendar = Calendar.getInstance(locale);
    11         //获取小时
    12         int hour = calendar.get(Calendar.HOUR_OF_DAY);
    13         
    14         if(hour>0){
    15             if(hour<=12){
    16                 showInfo = "早上好";
    17             }else if(hour>12 && hour<=18){
    18                 showInfo = "下午好";
    19             }else if(hour>18){
    20                 showInfo = "晚上好";
    21             }
    22         }
    23 %>
    24 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    25 <html>
    26 <head>
    27 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    28 <title>JSP测试界面</title>
    29 <style type="text/css">
    30     p{
    31         color:red;
    32     }
    33 </style>
    34 </head>
    35 <body>
    36     <!-- 编写html代码 -->
    37     <p><%=showInfo %></p>
    38 </body>
    39 </html>

    *:该例子中涉及的知识点

      ①:Java 代码一般写在<%  %>语句块中;Html代码写在<body></body>标签之间。

      ②:JSP中输出采用两种方式,使用内置对象out.println()、<%= %>进行输出展示。<%= %>(中不能出现";")

      ③:<%@ page import="java.util.*"%> 属于JSP的page指令 import指令是唯一,一个可以重复出现的指令,其余的像 <%@page language="java"%>等指令,language只能在当前jsp文件中出现一次。

    二:JSP中小知识点

      1.JSP中代码注释,除了使用//外还可以使用<%-- jsp代码注释 --%>

      2.JSP中的java代码部分和Java语法完全一样。无非是<%%>标签后台Html代码的来回切换、穿插。

        比如 if、for、while、switch、break、return等都一样。

        *:值得注意的是,return语句使用后,后面的html代码也是不生效的。

      3.JSP中声明成员方法和成员属性,需要注意一点妖精声明部分的代码放置在<%! %>中:

     1  <%!
     2 
     3     private String name;
     4     public void setName(String name){
     5 
     6       this.name = name;
     7     }
     8     public String getName(){
     9 
    10       return name;
    11     }
    12   %>

      4.JSP的生命周期函数(因为JSP是一种Servlet,所以JSP的生命周期函数和Servlet一样)

        _jspInit() 初始化Jsp 、_jspService 服务Jsp、_jspDestroy 销毁Jsp

        *:当然这些方法在使用的时候也要放置在<%! %>之间,自定义方法的时候尽量不要和上面的方法名称一样,一样的时候默认为覆盖了上面的方法。

    二:JSP指令

    JSP的指令都放置在<%@ %>标签中,常见的指令分为三类:

    ①:<%@page %>

      

    ②:<%@taglib %>为JSP的标签库,使用标签库,能够更加方便的展示数据,同时减少<%%>语句块在Html之间的穿插,避免写java代码。 [jstl标签可以近似的看作是html标签] 

    <%-- 
        添加标签库,前提项目中导入的有jstl-1.2_1.jar
        uri:为标签库的路径
        prefix:表明使用该库中指令的时候需要添加什么样的前缀
    --%>
    <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    
    <%-- 
         使用jstl标签库中的forEach标签
         ${index}该语句是使用了EL表达式,前提项目中要导入jstl_el.jar包
         var="index"是为当前遍历的items命名,配合${}表达式和<c:out>
         标签进行输出显示
     --%>
        <c:forEach begin="0" end="10" var="index">
            <p>
                使用jstl表达式创建的p标签<c:out value="${index}"></c:out>
            </p>
        </c:forEach>    

    ③:<%@include %>  该指令用来引用一些公共的jsp或者html文件。(比如一个web页面的头部和尾部)

    //include 指令【先合并,后编译,属于一个文件】
    <%@ include file="./xxx.jsp" %>
    //include 行为 【先编译,后合并,属于多个文件】
    <jsp:include page="./xxx.jsp">

     三:JSP的行为 【作用:减少<%%>标签(java代码的出现),使得整个jsp文件代码更加整洁。】

      在第二部分中提到的有一个include行为,它的作用和<%@include file="./xxx.jsp"%>指令的作用一样,不同的就是,include行为是,先编译后合并。除了该行为JSP还有以下几种行为:

      JSP行为的一般书写规则为:<jsp:行为名称 属性名称="属性值">

      1.useBean行为【作用:创建一个javaBean类的实例】,配合<jsp:setProperty > 和<jsp:getProperty >行为 使用:

        <!-- 
    该行为代替的就是java代码: JavaBean javaBean = new JavaBean();
    id:为要创建的实例对象的名称
    class:为要创建对象的类名
    scope:指明该对象的作用域(不写默认为page)page指在当前jsp文件中有效,在其他jsp文件中使用<jsp:getProperty>是不能够获得属性的。
            可以选用的值:
    request:本次请求中有效【一个request,可以同过forward()方法,贯穿多个jsp,那么这些jsp中都可以使用】
    session:本次会话中有效【即对当前用户有效】
    application: web应用程序内有效【服务关闭后失效】
    --> <jsp:useBean id="javaBean" class="cn.woo.entity.JavaBean" scope="page"></jsp:useBean> <!-- 给javabean对象的age属性赋值为23 --> <jsp:setProperty property="age" name="javaBean" value="23"/> <!-- 给javabean对象的name属性赋值为woo 类似java代码: javaBean.setName("woo"); --> <jsp:setProperty property="name" name="javaBean" value="woo"/> <p>
    <!--获取javaBean对象的属性值 类似java代码 javaBean.getAge();--> 年龄:<jsp:getProperty property="age" name="javaBean"/> </p> <p> 姓名:<jsp:getProperty property="name" name="javaBean"/> </p>

      2.forward行为【相当于对代码request.getRequestDispatcher("/xxx.jsp").forward(request, response);的封装(转发)】

        <!-- 
    jsp的froward行为,执行该代码将跳转至xxx.jsp文件,并携带参数score = "123";可以在xxx.jsp中采用EL表达式${score}的方式进行获取。
    --> <jsp:forward page="./xxx.jsp"> <!-- 跳转的时候可以携带参数 --> <jsp:param value="123" name="score"/> </jsp:forward>

      3.directive行为 【代替了,jsp的指令 如:<%@page%> 、<%include%>、<%@taglib%>等】  

       <jsp:directive.page/>行为相当于<%@page%>指令
       <jsp:directive.include/>行为相当于<%include%>指令
       <jsp:directive.taglib/>行为相当于<%@taglib%>指令

    四:JSP的9大内置对象和4大作用域

       9大内置对象:

       

       *:注意在使用exception内置对像的时候,要使用<%@page %>指令开启,exception的使用。<%@ page errorPage="true" %>

       4大作用域:【在Servlet中通常将javaBean或者其他响应数据存放在下方域中比如,然后再jsp中利用EL表达式进行数据的获取和展示】

        page指在当前jsp文件中有效
        request:本次请求中有效【一个request,可以同过forward()方法,贯穿多个jsp,那么这些jsp中都可以使用】
    session:本次会话中有效【即对当前用户有效】
    application: web应用程序内有效【服务关闭后失效】

    五:JSP的配置 【JSP是一种Servlet所以它的配置和Servlet很类似】
      
     1   <!-- 配置JSP -->
     2   <servlet>
     3       <servlet-name>second</servlet-name>
     4       <jsp-file>/jsp/second.jsp</jsp-file>
     5       <!-- 
     6           因为jsp也是servlet所以可以配置jsp的初始化参数
     7           在jsp中使用内置对象config进行初始化参数的获取config.getInitParameter("aaa");
     8           当然jsp中也可以使用配置好的上下文参数(使用pageContext内置对象):pageContext.getServletContext().getInitParameter("上下文参数");
     9        -->
    10       <init-param>
    11           <param-name>aaa</param-name>
    12           <param-value>123</param-value>
    13       </init-param>
    14   </servlet>
    15   
    16   <!-- 
    17       配置JSP的映射 【这样一来不仅可以通过浏览器直接访问jsp文件,而且还可以通过映射进行访问】
    18   -->
    19   <servlet-mapping>
    20       <servlet-name>second</servlet-name>
    21       <url-pattern>/jsp/second</url-pattern>
    22       <!-- 配置多映射 -->
    23       <url-pattern>/jsp/second1</url-pattern>
    24   </servlet-mapping>
    六:EL表达式

      1.EL表达式  
    el表达式出现在html代码中,不能放置在<% %>标签中。el表达式使用${}符号进行操作。
     1 <%@ page language="java" contentType="text/html; charset=UTF-8"
     2     pageEncoding="UTF-8"%>
     3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     4 <html>
     5 <head>
     6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
     7 <title>使用EL表达式</title>
     8 </head>
     9 <body>
    10     
    11     <!-- 运用JSP的useBean行为创建对象 -->
    12     <jsp:useBean id="obj" class="cn.woo.entity.JavaBean"></jsp:useBean>
    13     <jsp:setProperty name="obj" property="age" value="23"></jsp:setProperty>
    14     <jsp:setProperty name="obj" property="name" value="unknown"></jsp:setProperty>
    15     <!-- 使用EL表达式获取存放在page域中的对象 -->
    16     <!-- 相当于obj.getName() -->
    17     欢迎:<p>${obj.name}</p>
    <!-- 相当于obj.getAge() --> 18 年龄:<P>${obj.age}</P> 19 </body> 20 </html>
      *:EL表达式查询原则(范围从小到大)先从request中查找,如果没有去session、application中找。【当然你可以直接指定范围,比如:pageScope.obj.age】

       2.EL表达式操作隐藏对象

      

        

      3.EL表达式中的运算符

        + - * / %      > == < != >= <=     &&    ||     !    支持三目运算符 ?:   如:${1+1} 等

        ${javaBean.param[0]} 去除param中的第一个元素

        判断javaBean中的属性是否为空,${empty javaBean.param}

     
  • 相关阅读:
    easyExcel入门
    UML-从需求到设计--迭代进化
    UML-操作契约总结
    102. Binary Tree Level Order Traversal
    98. Validate Binary Search Tree
    95. Unique Binary Search Trees II
    96. Unique Binary Search Trees
    94. Binary Tree Inorder Traversal
    84. Largest Rectangle in Histogram
    92. Reverse Linked List II
  • 原文地址:https://www.cnblogs.com/wooyoohoo/p/9471275.html
Copyright © 2011-2022 走看看