zoukankan      html  css  js  c++  java
  • 一、jsp和Servlet基础理论及jstl和EL表达式用法

    1、题外话:使用JSP有近一年半的时间了,但是开发量不大。昨天部门突然让做个读取EXCLE文件,然后在前台页面进行展示、并通过点击查看按钮可以对每条明细记录进行跳转后进行详情查看,并按照页面原型进行页面渲染,还需要预留一个接口供别的开发进行每条明细数据的获取和加工。因为时间着急就不想搭建框架进行实现了。但是竟然想不起来如何使用Servlet和JSP来实现该功能,觉得很是尴尬,觉得自己太不专业了。不过最后还是花了一天半时间把功能圆满完成,看着自己这么不着调的样子,也挺来气的。所以决定把Servlet和JSP从头再来一边。之间有看过韩顺平老师的视频,并留有笔记所以复习起来还是比较快的。开始进入正题吧!


    2、Jsp(java server page)是什么
    1)是一种动态网页技术,是java的一部分,是动态的要和数据库进行连接的。
    2)它在传统的网页html文件(*.htm,*.html)中嵌入java程序段(Scriptlet、表达式和声明)和jsp标记(tag),来实现相关的逻辑控制,从而形成jsp文件(*.jsp)
    说明:Scriptlet:是包含在<%%>之间的java代码,在web容器处理jsp页面时执行,通常会产生输出,并将输出发送到客户的输出流中

    3、JSP运行原理:
    1)JSP代码由容器进行解析,java代码由jdk进行解析,tomcat容器和jdk都是运行在windows/linux等操作系统中的;
    2)容器在启动的时候项目就启动,随时接受访问,如果拿到请求,则把请求的页面发送给客户端(已经在服务器解析了java和jsp代码)客户端看到的是最终的解析结果,拿到页面之后客户可以再发送请求如此循环;
    3)项目是部署在容器里面,并且在容器启动的时候,项目就开始运行了,等待你去访问(通过网络来访问容器的),也就是说容器没有关闭,项目是不会关闭的,除非你把容器里面的项目给删除了;
    另外一种话术:
        JSP页面由HTM标签和嵌入其中的Java代码所组成。服务器在页面被客户端请求以后对这些Java代码进行处理,然后将生成的HTML页面返回给客户端的浏览器。Java Servlet 是JSP的技术基础,而且大型的Web应用程序的开发需要Java Servlet和JSP配合才能完成。Web服务器在遇到访问JSP网页的请求时,首先执行其中的程序段,然后将执行结果连同JSP文件中的HTML代码一起返回给客户。插入的Java程序段可以操作数据库、重新定向网页等,以实现建立动态网页所需要的功能。 用jsp开发的web应用是跨平台的,即能在linux下运行,也能在其他操作系统上面运行;

    4、JSP页面中常见的可以编写HTML、CSS、JavaScript、JAVA代码等
    4.1)JSP页面编写JAVA代码共有三种:<%@ >、<%%>、<%= %>
    4.1.1)<%@ >用法

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    涉及知识点
    上述代码作用:是JSP页面的声明代码,即表示jsp的指令,表明该页面为java语言。JSP是JAVA的一个子集;如果不加上面代码会报错:org.apache.jasper.JasperException: Unable to compile class for JSP:
    编码格式有:iso-8859-1只支持英文编码;GBK支持中文简体和繁体;GB2312只支持简体字;UTF-8全球性编码

    4.1.2)<%%>用法:JAVA代码结束时后面需要跟分号()

    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    <%
        for(int i=o;i<5;i++){
            out.print(i);//此处有分号
        }
    %>
    涉及的知识点:
          F12后是参看不到JAVA源码的只能看到运行后的值
         可以通过out.print(path);在JSP页面进行显示path=/servletJsp    basePath=http://localhost:8080/servletJsp/
    View Code

    4.1.3)<%= %> 用法:是简写的JAVA代码输出方式,代码结束后,后面是不需要跟分号(;)

    <%
        ArrayList<Student> students=(ArrayList) request.getAttribute("students");
        for(int i=0;i<students.size;i++){
    %>
    <tr>
        //<%=students.get(i).getSid()此处无分号,表示简写的输出,专门是针对数据的输出的,因为数据的输出一般都一行
        <td><%=students.get(i).getSid()%></td>
        <td><%=students.get(i).getSname()%></td>
        <td><%=students.get(i).getSaddress()%></td>
        <td><%=students.get(i).getSlikes()%></td>
    </tr>
    <%
        }
    %>
    View Code


    4.2)JSP页面编写CSS代码需使用<style>标签
    <style>
        html {
            background-color: #cdcdcd;
        }
    </style>

    4.3)JSP页面编写JavaScript代码示列

    <script language="JavaScript" src="js/jquery-1.6.js"></script>//引入jquery
    
    <script type="text/javascript">
        function checkQuery(){
            var rowNum = $("#rowNum").val();
            var uwDecisionid = $("#uwDecisionid").val();
            if (rowNum) {
                document.getElementById("form2").action = "/showProject/servlet/PredictionSer";
                document.getElementById("form2").method = "post";
                $("#form2").submit();
            }
        }
    </script>
    View Code


    5、Web工程目录说明:
        新建的Web Project,里面的src和WebRoot都是虚拟目录,真正部署到容器的时候这两个目录是没有的。虚拟目录的用途在于对项目的代码分类存放管理也便于开发,src目录下存放JAVA代码,WebRoot目录下存放JSP等前端代码。

    6、MVC与Servlet理解
    想要理解Servlet先要对MVC设计模式有所认识,如下;
    6.1)MVC设计模式:
    M(Model)模型层:负责数据录入和业务逻辑的实现
    V(View)视图层:获取数据,显示数据
    C(Control)控制层:获取视图层的数据,并调用业务逻辑类

    6.2)Servlet用来处理客户请求
    a)作用是控制层,也就是获取前台的数据,并把数据交给业务逻辑层,起桥梁的作用,符合MVC设计模式
    a)Servlet中doGet用来处理get请求,doPost请求用来处理post请求
    b)传入的doGet(HttpServletRequest request, HttpServletResponse response)
    request代表一个请求,页面的所有数据都封装到了request对象中

    6.3)Servlet生命周期
    a)当你前台触发一个Servlet对象的请求时,该Servlet才会被实例化(先执行无参构造方法,再执行init方法实例化),以后常驻内存。
    只能实例化一次的对象,称为单态类,这样做是为了节省内存。
    b)get请求则doGet方法执行,post请求则doPost方法执行
    c)容器被销毁的时候,destroy方法执行

    7、jstl
    7.1)JSP标准标签库
        JSTL(JSP Standard Tag Library,JSP标准标签库)是一个JSP标签集合,它封装了JSP应用的通用核心功能。它是一个不断完善的开放源代码的JSP标签库,是由apache的jakarta小组来维护的。JSTL只能运行在支持JSP1.2和Servlet2.3规范的容器上,如tomcat 4.x。在JSP 2.0中也是作为标准支持的。
        JSTL支持通用的、结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签。 除了这些,它还提供了一个框架来使用集成JSTL的自定义标签。根据JSTL标签所提供的功能,可以将其分为5个类别:core:核心类库;fmt:格式化|国际化;xml:过时了;sql:过时了;functions:函数库很少使用,如下图:


    core标记库:提供了定制操作,通过限制了作用域的变量管理数据,以及执行页面内容的迭代和条件操作。它还提供了用来生成和操作 URL 的标记;
    format标记库:定义了用来格式化数据(尤其是数字和日期)的操作。它还支持使用本地化资源束进行JSP页面的国际化;
    xml标记库:库包含一些标记,这些标记用来操作通过XML表示的数据;
    sql标记库:定义了用来查询关系数据库的操作;
    两个 JSTL 标记库验证器允许开发人员在其 JSP 应用程序中强制使用编码标准。


    7.2)使用JSP标准标签库前期准备
    JSTL是Apache用来代替Java脚本的,使用前需要
    1)引入jar包(jstl.jar和standard.jar),并且在页面导入标签库
    2)在页面上导入标签库:<%taglib prefix="" uri=""   %>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    备注:如果使用javaee5.0,已包含jstl相关的jar文件。一般不需要再拷贝。

    3、jstl的常用标签

    1)<c:if>
    <c:if test="${true}">
        <b>我是粗体</b>
    </c:if>
    2)<c:choose>

    <c:choose>
        <c:when test="${false}">
            true
        </c:when>
        <c:otherwise>
            false
        </c:otherwise>
    </c:choose>
    View Code

    3)<c:forEach>

    示例1:
    <c:forEach begin="1" end="10" var="i" step="2" >
                ${i}
    </c:forEach>
    示例2:
    <%
        ArrayList<String> temp=new ArrayList<String>();
        temp.add("aaa");
        temp.add("bbb");
        request.setAttribute("temp",temp);
        request.setAttribute("abc",null);
    %>
    <c:forEach items="${requestScope.temp}" var="s">
        ${s}
    </c:forEach></br>
    View Code

    4)<c:url>

    <td>
        <c:url value="/updateGrade.jsp" var="update">
            <c:param name="gid" value="${grade.gid}" />
            <c:param name="gname" value="${grade.gname}" />
        </c:url>
        <a href="${update}">更新</a>
    </td>
    View Code

    备注:jstl标签教程.pdf 百度网盘下载地址:https://pan.baidu.com/s/1IF872IkROgj1IvsyhUvBnA

    8、EL表达式(Expression Language)
    8.1、EL表达式:
        EL表达式,作为一种表现层的技术,防止了null空指针的异常。如果发现为null,他就不输出了。它是一种数据访问语言。目的为了使JSP写起来更加简单。表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言,它提供了在 JSP 中简化表达式的方法,让Jsp的代码更加简化。


    8.2、语法${expression}
    ${ 必须相连,中间不能有空格,后边的 } 也同样不能分开

    8.3、el表达式的两种运算符:[ ]与.运算符,用以存取数据
    1)当要存取的属性名称中包含一些特殊字符,如 . 或 - 等并非字母或数字的符号,就一定要使用“[ ]“。
    示列:${ user. My-Name}应当改为${user["My-Name"]}
    2)如果要动态取值时,就可以用“[ ]“来做,而“.“无法做到动态取值。例如:
    ${sessionScope.user[data]}中data 是一个变量

    8.4、变量
        EL存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为username的变量。若没有指定哪一个范围的username,
    则会依序从Page、Request、Session、Application范围查找。假如途中找到username,就直接回传,不再继续找下去,但是假如全部的范围都没
    有找到时,就回传null。

    8.5、EL表达式有哪些功能:
    1) 使用变量访问web域中存储的对象 ${user }
    2) 访问javabean的属性 ${user.address.city }
    3)获取数组、 list 、 map中的值
    4) 执行基本的逻辑运算
    5) 直接使用隐式对象
    6) 调用 el 函数

     

    可以参看博文 https://www.cnblogs.com/jiarui-zjb/p/6413418.html,并进行demo源码下载,让你很快掌握jsp、servlet基础知识

    参看博文https://www.cnblogs.com/zhaotiancheng/p/6391894.html

    细水长流,打磨濡染,渐趋极致,才是一个人最好的状态。
  • 相关阅读:
    Assembly 学习随笔——第一章
    实验 9 根据材料编程
    实验五 编写、调试具有多个段的程序
    汇编实验四 [bx]和loop的使用
    汇编实验 三 编程、编译、连接、跟踪
    汇编实验二 用机器指令和汇编指令编程
    实验一 查看CPU和内存,使用机器语言和汇编语言进行编程
    汇编第一章
    sqlmap的安装
    sql注入-输入’or 1=1#
  • 原文地址:https://www.cnblogs.com/jiarui-zjb/p/9461644.html
Copyright © 2011-2022 走看看