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开发模式

posted @ 2019-12-31 17:15  雷哒哒  阅读(307)  评论(0编辑  收藏  举报