一、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

 

posted @ 2018-08-11 23:45  爱笑的berg  阅读(619)  评论(0编辑  收藏  举报