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/

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>
<%
}
%>

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>

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>

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>

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>

备注: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

一、jsp和Servlet基础理论及jstl和EL表达式用法的更多相关文章

  1. JSP/Servlet开发——第八章 JSTL和EL

    1. EL表达式: ●需要EL表达式的原因: ◆在JSP中使用Java脚本的局限: 1).在JSP页面中嵌入大量的Java代码: 2).访问结构比较复杂的数据时代码烦琐,且经常需要强制类型转换: eg ...

  2. 【转】JSP中的JSTL与EL表达式用法及区别

    对于JSTL和EL之间的关系,这个问题对于初学JSP的朋友来说,估计是个问题,下面来详细介绍一下JSTL和EL表达式他们之间的关系,以及JSTL和EL一些相关概念! EL相关概念JSTL一般要配合EL ...

  3. jsp中的JSTL与EL表达式用法及区别

    对于JSTL和EL之间的关系,这个问题对于初学JSP的朋友来说,估计是个问题,下面来详细介绍一下JSTL和EL表达式他们之间的关系,以及JSTL和EL一些相关概念! EL相关概念 JSTL一般要配合E ...

  4. jsp中的JSTL与EL表达式用法

    JSTL (JSP Standard Tag Library ,JSP标准标签库) JSTL标签库分为5类:JSTL核心标签库.JSTL函数标签库.数据库标签库.I18N格式化标签库.XML标签库. ...

  5. javaweb基础整理随笔------jstl与el表达式

    虽然jsp中可以写java代码,但是现在不推荐这么做. jsp虽然本质是servlet,但是主要作用只是视图,视图的任务就是显示响应,而不是在JSP中做任何关于程序控制和业务逻辑的事情.所以在JSP页 ...

  6. jstl,el表达式

    在上一篇中,我们写了将数据传到jsp页面,在jsp页面进行展示数组,但是我们发现,在jsp页面写代码是一件很烦的事,一个循环要拆成两部分,例如for循环,在例如if语句: <%int a=22; ...

  7. JSTL与EL表达式(为空判断)

    JSTL与EL表达式(为空判断) 一.循环遍历集合  1.在jsp中引入标准函数声明  <%@ taglib uri="http://java.sun.com/jsp/jstl/cor ...

  8. jsp(一) : servlet基础

    1.客户  servlet容器   servlet 2.实现接口     #1.接口:servlet :             constrontor .init().service.destroy ...

  9. jsp标签jstl和el表达式

    1.el表达式的使用 1)访问bean的属性 方式一: ${user.name},容器会依次从pageContext,request,session,application中查找(getAttribu ...

随机推荐

  1. Linux重装为Windows后读取原EXT类型数据盘

    Linux重装为Windows后读取原EXT类型数据盘 1 2 3 4 分步阅读 Windows的文件系统通常使用NTFS或者FAT32格式,而Linux的文件系统格式通常是EXT系列.当操作系统从L ...

  2. Java IO流详解(四)——字符流Reader和Writer

    前面一章介绍了字节流的使用,提到了字节流在处理utf-8编码的中文可能会出现乱码的情况(其他编码的中文同样会出现乱码),所以Java针对这一情况提供了字符流. 但是字符流只能处理字符,不能用来处理 . ...

  3. 第3章 Java基本的程序设计结构

    3.运算符 浅谈java中源码常见的几个关键字(native,strictfp,transient,volatile) 需要注意 , 整数被 0 除将会产生一个异常, 而浮点数被0 除将会得到无穷大或 ...

  4. 【JS 常用操作】全选、给后来元素增加事件

    11 //全选 $("#allCheckbox").click(function () { var checkedStatus = this.checked; //alert(ch ...

  5. Nginx笔试题!

    1.Nginx实现HTTP及TCP负载均衡的模块?HTTP就是工作在七层协议TCP工作在四层协议 Nginx七层负载:七层通过虚拟的URL或主机名接收请求在server里面配置location反向代理 ...

  6. Java 8 stream 实战

    概述 平时工作用python的机会比较多,习惯了python函数式编程的简洁和优雅.切换到java后,对于数据处理的『冗长代码』还是有点不习惯的.有幸的是,Java8版本后,引入了Lambda表达式和 ...

  7. Java基础知识笔记第六章:接口

    接口 /* 使用关键字interface来定义一个接口.接口的定义和类的定义很相似,分为接口声明和接口体 */ interface Printable{ final int max=100; void ...

  8. Topcoder SRM 590 Fox And City

    Link 注意到原图给的是一个无向连通图. 如果在原图中两点之间有一条无向边,那么这两点到\(1\)的距离之差不大于\(1\). 这个命题的正确性是显然的,我们考虑它的逆命题: 给定每个点到\(1\) ...

  9. 4 Action的3种编写方式,pojo,实现和继承(推荐)

    Action的访问: 1 Action类是pojo(Plain Ordinary Java Object):简单Java对象,无接口,无继承.例如上篇文章中只创建了public String exec ...

  10. Java基础 -2.3

    浮点数类型 所有的数据类型进行自动转型的时候都是由小类型到大类型进行自动转换处理.默认的类型为double,但是也可以定义位数相对较少的float变量 ,此时从赋值的时候就必须采用强制类型转换 pub ...