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}

     
  • 相关阅读:
    python-打包程序
    python-记log
    Git-分支
    跨线程调用控件之MethodInvoker
    c# Invoke和BeginInvoke 区别
    winform 开发之Control.InvokeRequired
    C#三种定时器的实现
    winform窗口打开后文本框的默认焦点设置
    C#在Winform中改变Textbox高度三种方法
    Json.net/Newtonsoft 3.0 新特性JObject/Linq to Json
  • 原文地址:https://www.cnblogs.com/wooyoohoo/p/9471275.html
Copyright © 2011-2022 走看看