zoukankan      html  css  js  c++  java
  • JSP

    第一章:JSP

    1.1-JSP概述

    JSP(全称JavaServer Pages)是由Sun Microsystems公司主导创建的一种动态网页技术标准。JSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTMLXML或其他格式文档的Web网页,然后返回给请求者。JSP技术以Java语言作为脚本语言,为用户的HTTP请求提供服务,并能与服务器上的其它Java程序共同处理复杂的业务需求。

    ​ JSP将Java代码和特定变动内容嵌入到静态的页面中,实现以静态页面为模板,动态生成其中的部分内容。JSP引入了被称为“JSP动作”的XML标签,用来调用内建功能。另外,可以创建JSP标签库,然后像使用标准HTML或XML标签一样使用它们。标签库能增强功能和服务器性能,而且不受跨平台问题的限制。JSP文件在运行时会被其编译器转换成更原始的Servlet代码。JSP编译器可以把JSP文件编译成用Java代码写的Servlet,然后再由Java编译器来编译成能快速执行的二进制机器码,也可以直接编译成二进制码。

    • JSP是一种动态网页技术标准。
    • JSP以Java语言作为脚本语言
      • 脚本通常以文本保存,只在被调用时进行解释或编译。
    • JSP本质上是一个Servlet程序

    1.2-JSP指令

    JSP指令用于配置JSP页面,导入资源文件。

    指令概述

    指令格式

    <%@ 指令名称 属性名1=属性值1 属性名2=属性值2 ... %>

    指令名称分类

    1. **page **,用于配置jsp页面
    2. include,用于向jsp页面中导入资源
    3. taglib,定义一个标签库以及其自定义标签的前缀。

    page指令

    代码

    <%@ page import="java.util.Random" %>
    <%@ page contentType="text/html;charset=UTF-8" language="java" errorPage="error.jsp" isErrorPage="false" pageEncoding=“UTF-8” %>
    

    配置属性

    • contentType,等同于response.setContentType()
      1. 设置响应体的mime类型以及字符集
      2. 设置当前jsp页面的编码(只能是高级的IDE才能生效,如果使用低级工具,则需要设置pageEncoding属性设置当前页面的字符集)
    • errorPage,当前页面发生异常后,会自动跳转到指定的错误页面
    • isErrorPage,标识当前也是是否是错误页面。
    • import,导包

    include指令

    代码

    <%@ page contentType="text/html;charset=UTF-8" language="java" errorPage="error.jsp" isErrorPage="false" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <%--导入其他页面--%>
        <%@include file="top.jsp"%>
    </body>
    </html>
    
    

    配置属性

    • file,其他资源路径

    tiglib指令

     <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <c:if est="<boolean>" var="<string>" scope="<string>"> </c:if>
    

    prefix,自定义的标签前缀。

    1.3-JSP中定义Java代码

    定义方式

    1. 方式1:<% 代码 %> ,定义的java代码,在service方法中。service方法中可以定义什么,该脚本中就可以定义什么。
    2. 方式2:<%! 代码 %> ,定义的java代码,在jsp转换后的java类的成员位置。
    3. 方式3:<%= 代码 %> ,定义的java代码,会输出到页面上。输出语句中可以定义什么,该脚本中就可以定义什么。

    代码演示

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <%--定义类成员--%>
        <%!
            private void printInfo(){
                System.out.println("打印...");
            }
            private int count = 1;
        %>
        <%--定义service方法中的程序--%>
        <%
            out.println("service方法中的代码");
            printInfo();
        %>
        <%--输出内容--%>
        <%=count%>
    
    </body>
    </html>
    
    

    1.4-注释

    html注释

    格式:<!--注释内容-->只能注释html代码片段

    jsp注释,jsp页面中推荐使用的注释

    格式: <%--注释内容--%>可以注释所有

    1.5-隐式对象

    JSP隐式对象是JSP容器为每个页面提供的Java对象,开发者可以直接使用它们而不用显式声明。JSP隐式对象也被称为预定义变量。

    JSP所支持的九大隐式对象:

    对象 描述
    request HttpServletRequest 接口的实例
    response HttpServletResponse 接口的实例
    out JspWriter类的实例,用于把结果输出至网页上
    session HttpSession类的实例
    application ServletContext类的实例,与应用上下文有关
    config ServletConfig类的实例
    pageContext PageContext类的实例,提供对JSP页面所有对象以及命名空间的访问
    page 类似于Java类中的this关键字
    Exception Exception类的对象,代表发生错误的JSP页面中对应的异常对象

    第二章:EL表达式

    2.1-概述

    EL( Expression Language )表达式语言是一种简单的语言,提供了在JSP中简化表达式的方法,目的是为了尽量减少JSP页面中的Java代码,使得JSP页面的处理程序编写起来更加简洁,便于开发和维护。

    2.2-语法

    概述

    在JSP中访问模型对象是通过EL表达式的语法来表达。
    所有EL表达式的格式都是以“${}”表示。例如,${ userinfo}代表获取变量userinfo的值。
    当EL表达式中的变量不给定范围时,则默认在page范围查找,然后依次在requestsessionapplication范围查找。
    也可以用范围作为前缀表示属于哪个范围的变量,例如:${ pageScope. userinfo}表示访问page范围中的userinfo变量。

    • 格式:${el}
      • el,表达式
    • 域对象,el只能从域对象中读取变量,域名称如下
      1. pageScope,对应隐式对象 pageContext
      2. requestScope,对应隐式对象 request
      3. sessionScope,对应隐式对象 session
      4. applicationScope ,对应隐式对象 application(ServletContext)

    代码

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <%--Java代码--%>
        <%
            pageContext.setAttribute("name","张三-pageContext");
            request.setAttribute("name","张三-request");
            session.setAttribute("name","张三-session");
            application.setAttribute("name","张三-application");
        %>
        ${name}<br>
        <%--结果:张三-pageContext--%>
        ${requestScope.get("name")}
        <%--结果:张三-request--%>
    
    </body>
    </html>
    
    

    2.3-运算符

    概述

    • 算术运算符:加+、减-、乘*、除/div、取模%mod
    • 逻辑运算符:大于>、小于<、大于等于>=、小于等于<=、等于==、不等于!=
    • 比较运算符:与&&、或||、非!
      • && 可以用and表示
      • || 可以用or表示
    • 空运算符:empty

    代码

    <%@ page import="domain.User" %>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <%
            User user = new User("张三",10,"男");
            request.setAttribute("user",user);
            String str = "";
            int i = 0;
            Object obj = null;
        %>
        ${10 div 2}<br>     	<!--结果:5-->
        ${3 mod 4}<br>      	<!--结果:3-->
        ${10<2}<br>         	<!--结果:false-->
        ${10>9||10>11}<br>  	<!--结果:true-->
        ${user.name}<br>   		<!--结果:张三-->
        ${user["age"]}<br>		<!--结果:10-->
        ${empty user}<br> 		<!--检测是否为null,结果:false-->
        ${not empty user}<br> 	<!--检测是否不是null,结果:true-->
        ${empty obj}<br> 		<!--检测是否为null,结果:true-->
        ${empty str}<br> 		<!--检测是否为空字符串 结果:true-->
        ${empty i}<br>   		<!--检测是否为0 结果:true-->
    </body>
    </html>
    
    

    注意:EL 提供“ . “和“ [ ] “两种运算符来存取数据

    第三章:JSTL

    3.1-概述

    JSTL(Java server pages standarded tag library,即JSP标准标签库)是由JCP(Java community Proces)所制定的标准规范,它主要提供给Java Web开发人员一个标准通用的标签库,并由Apache的Jakarta小组来维护。开发人员可以利用这些标签取代JSP页面上的Java代码,从而提高程序的可读性,降低程序的维护难度。

    3.2-使用方式

    步骤

    1. 导入jstl相关jar包
    2. 引入标签库:taglib指令: <%@ taglib %>
    3. 使用标签

    jar包下载

    链接:https://pan.baidu.com/s/1UzilSLlnhDxWN8MpxxBkig
    提取码:xbnn

    代码

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%--tablib指令,标签前缀是c--%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <%--使用标签--%>
        <c:if test="true">
            <h1>你好</h1>
        </c:if>
    </body>
    </html>
    
    

    3.3-常用的JSTL标签

    if标签

    类似于java中的if结构。

    关联属性:

    • test,必须属性,接收boolean表达式。
      • 如果表达式为true,则显示if标签体内容,如果为false,则不显示标签体内容
      • 一般情况下,test属性值会结合el表达式一起使用

    注意事项:if标签没有else情况,想要else情况,则可以在定义一个if标签

    代码:

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%--tablib指令,标签前缀是c--%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <%--使用标签--%>
        <c:if test="true">
            <h1>你好</h1>
        </c:if>
    </body>
    </html>
    
    

    choose标签

    类似于java中的switch结构。

    关联标签:

    • 使用choose标签声明,相当于switch声明
    • 使用when标签做判断,相当于case
    • 使用otherwise标签做其他情况的声明,相当于default

    代码:

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <%
            request.setAttribute("num",3);
        %>
        <c:choose>
            <c:when test="${num==1}">星期一</c:when>
            <c:when test="${num==2}">星期二</c:when>
            <c:when test="${num==3}">星期三</c:when>
            <c:when test="${num==4}">星期四</c:when>
            <c:when test="${num==5}">星期五</c:when>
            <c:when test="${num==6}">星期六</c:when>
            <c:when test="${num==7}">星期日</c:when>
            <c:otherwise>内容不合法</c:otherwise>
        </c:choose>
    </body>
    </html>
    
    

    foreach标签

    类似于java代码的for语句。

    foreach标签循环次数控制关联属性和代码:

    • begin,开始值
    • end,结束值
    • var,临时变量
    • step,步长
    • varStatus,循环状态对象
      • index,表示元素的索引,从0开始
      • count,表示循环的次数,从1开始

    foreach标签遍历容器控制:

    • items,容器对象
    • var ,临时变量

    代码:

    <%@ page import="java.util.List" %>
    <%@ page import="java.util.ArrayList" %>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <%
            List list= new ArrayList();
            list.add("张三");
            list.add("李四");
            request.setAttribute("list",list);
        %>
        <%--遍历次数--%>
        <c:forEach begin="0" end="10" var="i" varStatus="status">
            <h2>你好${i},索引:${status.index}</h2>
        </c:forEach>
        <%--遍历对象--%>
        <c:forEach items="${list}" var="value">
            ${value}<br>
        </c:forEach>
    
    </body>
    </html>
    
    

    第四章:MVC开发模式

    4.1-概述

    MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。

    MVC开始是存在于桌面程序中的,M是指业务模型,V是指用户界面],C则是控制器,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。比如一批统计数据可以分别用柱状图、饼图来表示。C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新。

    4.2-MVC框架内容

    MVC指MVC模式的某种框架,它强制性的使应用程序的输入、处理和输出分开。使用MVC应用程序被分成三个核心部件:模型、视图、控制器。它们各自处理自己的任务。最典型的MVC就是JSP + servlet +javabean的模式。

    4.3-View-视图

    视图是用户看到并与之交互的界面。对老式的Web应用程序来说,视图就是由HTML元素组成的界面,在新式的Web应用程序中,HTML依旧在视图中扮演着重要的角色,但一些新的技术已层出不穷,它们包括Adobe Flash和像XHTMLXML/XSL,WML等一些标识语言和Web services.

    MVC好处是它能为应用程序处理很多不同的视图。在视图中其实没有真正的处理发生,不管这些数据是联机存储的还是一个雇员列表,作为视图来讲,它只是作为一种输出数据并允许用户操纵的方式。

    4.4-Model-模型

    是应用程序中用于处理应用程序数据逻辑的部分。 通常模型对象负责在数据库中存取数据。 被模型返回的数据是中立的,就是说模型与数据格式无关,这样一个模型能为多个视图提供数据,由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。

    4.5-Controller-控制器

    控制器接受用户的输入并调用模型和视图去完成用户的需求,所以当单击Web页面中的超链接和发送HTML表单时,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后再确定用哪个视图来显示返回的数据。

    4.6-MVC的好处

    MVC 分层有助于管理复杂的应用程序,因为您可以在一个时间内专门关注一个方面。例如,您可以在不依赖业务逻辑的情况下专注于视图设计。同时也让应用程序的测试更加容易。

    MVC 分层同时也简化了分组开发。不同的开发人员可同时开发视图、控制器逻辑和业务逻辑。

    • 的耦合性低,方便维护,可以利于分工协作
    • 复用性高,减少代码冗余。

    第五章:三层架构

    5.1-概述

    三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:界面层(User Interface layer)、业务逻辑层(Business Logic Layer)、数据访问层(Data access layer)。区分层次的目的即为了“高内聚低耦合”的思想。在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。微软推荐的分层式结构一般分为三层,从下至上分别为:数据访问层、业务逻辑层(又或称为领域层)、表示层。

    5.2-界面层

    表示层又称表现层UI,位于三层构架的最上层,与用户直接接触,主要是B/S信息系统中的Web浏览页面。作为Web浏览页面,表示层的主要功能是实现系统数据的传入与输出,在此过程中不需要借助逻辑判断操作就可以将数据传送到BLL系统中进行数据处理,处理后会将处理结果反馈到表示层中。换句话说,表示层就是实现用户界面功能,将用户的需求传达和反馈,并用BLL或者是Models进行调试,保证用户体验。

    5.3-业务逻辑层

    业务逻辑层BLL的功能是对具体问题进行逻辑判断与执行操作,接收到表现层UI的用户指令后,会连接数据访问层DAL,访问层在三层构架中位于表示层与数据层中间位置,同时也是表示层与数据层的桥梁,实现三层之间的数据连接和指令传达,可以对接收数据进行逻辑处理,实现数据的修改、获取、删除等功能,并将处理结果反馈到表示层UI中,实现软件功能。

    5.4-数据访问层

    数据访问层DAL是数据库的主要操控系统,实现数据的增加、删除、修改、查询等操作,并将操作结果反馈到业务逻辑层BLL。在实际运行的过程中,数据访问层没有逻辑判断能力,为了实现代码编写的严谨性,提高代码阅读程度,一般软件开发人员会在该层中编写DataAccessCommon,保证数据访问层DAL数据处理功能

    5.5-三层架构和MVC开发模式

  • 相关阅读:
    山丽防水墙客户端的卸载
    还原冰点密码清除
    STP学习总结
    NTFS权限设置时卡死
    SQL server 2000安装时“以前的某个程序安装已在安装计算机上创建挂起”
    Projecet客户端登陆无法通过验证
    Linux-nftables
    Linux-kernel-timeline
    blog编辑技巧
    Linux-swap
  • 原文地址:https://www.cnblogs.com/lpl666/p/12125467.html
Copyright © 2011-2022 走看看