8、JSP

8、1什么是JSP

  • java Server Page:Java服务端页面,也和Servlet一样,用于动态web技术
  • 最大的特点:
    • 写jsp就像在写HTML
    • 区别:HTML只给用户提供静态数据
      JSP页面中可以嵌入Java代码,为用户提供动态数据

8、2JSP原理

思路:JSP到底怎么执行

  • 代码层面没有任何问题
  • 服务器内部工作
    • tomcat中有一个word目录
    • IDEA使用Tomcat会在IDEA的Tomcat中产生一个work目录


我电脑的地址

D:\Tomcat8.0\work\Catalina\localhost\ROOT\org\apache\jsp

发现页面变成jsp文件

游览器向服务器发送请求,不管访问什么资源,其实都是在访问Servlet
JSP本身就是Servlet

//请求
public void _jspInit() {}
//销毁public void _jspDestroy() {}
JSPService
public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)

1、判断请求
2、内置一些对象

  final javax.servlet.jsp.PageContext pageContext;   //页面上下文javax.servlet.http.HttpSession session = null;   //sessionfinal javax.servlet.ServletContext application;  //applicationfinal javax.servlet.ServletConfig config;  //configjavax.servlet.jsp.JspWriter out = null;  //outfinal java.lang.Object page = this;  //page
final javax.servlet.http.HttpServletRequest request //请求
final javax.servlet.http.HttpServletResponse response  //响应

3、输出页面前增加的代码

response.setContentType("text/html; charset=UTF-8");  //设置对象响应类型
pageContext = _jspxFactory.getPageContext(this, request, response,null, false, 8192, true);
_jspx_page_context = pageContext;
application = pageContext.getServletContext();
config = pageContext.getServletConfig();
out = pageContext.getOut();
_jspx_out = out;

4、以上这些对象均可以在jsp中使用

在JSP页面中,只要是java代码,就会原封不动的输出,
如果是HTML代码,就会转化为

out.write("<html>\r\n");

这样的格式输出到前端页面中

8、3JSP基础语法

任何语言都有自己的语法,java中有。JSP作为java技术的一种应用,它拥有一些自己扩充的语法(了解、知道即可),java所有语法都支持

jsp表达式

<%--JSP表达式作用:用来将程序的输出,输出到客户端<%=new 变量或者表达式%>
--%>
<%=new java.util.Date()%>

jsp脚本片段

<%int sum = 0;for (int i = 0; i < 100; i++) {sum += 1;}out.print("<h1>sum=" + sum +"</h1>");
%>

JSP脚本片段在实现

<%int x = 0;out.print(x);
%>
<p>这是一个JSP文档</p>
<%int y = 15;out.print(y);
%>
<hr>
<%for (int i = 0; i < 10; i++) {%><h1>Hello <%=i%></h1>
<%}
%>

JSP声明

<%!static {System.out.println("lading word");}private int age = 0;public void test(){System.out.println("你是最棒的");}
%>

JSP声明:会被编译到JSP生成java的类中!其它的就会被生成到_JSPService方法中

在JSP中嵌入java代码即可

<% %>
<%= %>
<%----%>
<%! %>

JSP的注释不会在客户端显示,HTML的会在客户端显示

8、4JSP指令

<%--html类型,编码方式:UTF-8--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--定制错误页面--%>
<%@ page errorPage="/Error/error.jsp" %>
<%--显示定义他是错误页面--%>
<%@ page isErrorPage="true" %>

错误页面第二种定义方式:在xml中定义

<error-page><error-code>500</error-code><location>/Error/error.jsp</location></error-page><error-page><error-code>404</error-code><location>/Error/404.jsp</location></error-page>

指令包含于标签包含区别
1、.语法不同:语法范畴不同(jsp、javaee)、写法不同
2、执行机制不同:
指令include:先包含后执行
标签include:如果包含的是动态页面则先执行后包含、静态页面则先包含不执行。
3、一个识别被包含页面的内容,一个不能识别
4、标签包含包含动态页面的时候,当前页面可以向被包含页面传参
5、指令包含包含的时候不能有,也不能有同名的变量定义,否则会报错

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
<%--指令包含:
<%@ include file=""%> 将两个页面合二为一
--%>
<%@ include file="common/header.jsp"%>
<h1>你好</h1>
<%--标签包含:
<jsp:include page=""/>拼接页面,本质还是两个页面
--%>
<jsp:include page="common/header.jsp" />
<h1>你好</h1>
</body>
</html>

8.5、9大内置对象

  • PageContext
  • Request
  • Response
  • Session
  • Application [SerlvetContext]
  • config [servletConfig]
  • out
  • page
  • exception

PageContextDemo01.jsp:存数据并且取出里面的数据

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
<%--内置对象--%>
<%pageContext.setAttribute("name1","冰凝");  //保存数据只在页面中有效request.setAttribute("name3","张大鹏");   //保存数据只在一次请求中有效,请求转发会携带这个数据session.setAttribute("name2","小三");   //保存的数据只在一次会话中有效,从打开游览器到关闭游览器application.setAttribute("name4","王兵");  //保存的数据只在服务器中有效,从打开服务器到关闭服务器pageContext.forward("/PageContextDemo02.jsp");
%>
<%--脚本片段中的代码会原封不动的生成到jsp.java中
要求:java代码必须保证正确性
--%>
<%//从pagecontext开始取出,我们通过寻找的方式//从底层到高层(作用域):page-->request-->Session-->applicationString name1 = (String)(pageContext.findAttribute("name1"));String name2 = (String)(pageContext.findAttribute("name2"));String name3 = (String)(pageContext.findAttribute("name3"));String name4 = (String)(pageContext.findAttribute("name4"));String name5 = (String)(pageContext.findAttribute("name5"));  //不存在
%>
<%--使用EL表达式输出 ${}--%>
<h1>取出值</h1>
<h3>${name1}</h3>
<h3>${name2}</h3>
<h3>${name3}</h3>
<h3>${name4}</h3>
<h3>${name5}</h3>
</body>
</html>

PageContextDemo02.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
<%//从pagecontext开始取出,我们通过寻找的方式//从底层到高层(作用域):page-->request-->Session-->applicationString name1 = (String)(pageContext.findAttribute("name1"));String name2 = (String)(pageContext.findAttribute("name2"));String name3 = (String)(pageContext.findAttribute("name3"));String name4 = (String)(pageContext.findAttribute("name4"));String name5 = (String)(pageContext.findAttribute("name5"));  //不存在
%>
<%--使用EL表达式输出 ${}--%>
<h1>取出值</h1>
<h3>${name1}</h3>
<h3>${name2}</h3>
<h3>${name3}</h3>
<h3>${name4}</h3>
<h3>${name5}</h3>
</body>
</html>

request:客户端向服务器发送请求,产生的数据,用户看完就没用了。比如:新闻,用户看完没用的
session:客户端向服务器发送请求,产生的数据,用户用完一会还有用,比如:购物车
application:客户端向服务器发送请求,产生的数据,一个用户用完了,其它用户还能使用,比如:聊天数据

8.6、JSP标签、JSTL标签、EL表达式

EL表达式:${ }

  • 获取数据
  • 执行运算
  • 获取web开发的常用对象
<!--JSTL依赖--><dependency><groupId>javax.servlet.jsp.jstl</groupId><artifactId>jstl-api</artifactId><version>1.2</version></dependency><!--stand标签库--><dependency><groupId>taglibs</groupId><artifactId>standard</artifactId><version>1.1.2</version></dependency>

JSP标签
JSPtag.jsp:跳转到另一个页面,并传递数据

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
<h1>1</h1>
<%--<jsp:include page=""></jsp:include>--%>
<jsp:forward page="/JSPtag2.jsp"><jsp:param name="name" value="bingning"/><jsp:param name="age" value="13"/>
</jsp:forward></body>
</html>

JSPtag2.jsp:该页面接收数据

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
<h2>2</h2>
姓名:<%=request.getParameter("name")%>
年龄:<%=request.getParameter("age")%>
</body>
</html>

JSTL表达式:JSTL标签库的使用就是为了弥补HTML标签的不足,可以供我们使用,标签的功能和java代码一样
核心标签(掌握部分即可)

使用步骤

  • 引入对应的taglib
  • 在使用对应的JSTL标签
  • 在Tomcat中也需要导入JSTL包,要不然会报解析错误的问题

获取form表单提交的值并判断
<c:if>

<%--只有引入了taglib对应的JSTL,我们才能学习使用JSTL表达式--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
<h1>测试</h1>
<%--EL表达式:${}
--%>
<form action="coreif.jsp"><input type="text" name="username" value="${param.username}"><input type="submit" value="登入">
</form>
<%--判断是否为管理员登入--%>
<c:if test="${param.username=='admit'}" var="isAdmit"><c:out value="管理员欢迎你!"/>
</c:if>
<%--自闭和标签--%>
<c:out value="${isAdmit}"/>
</body>
</html>

<c:choose>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
<%--定义一个变量score,值为85--%>
<c:set var="score" value="85"></c:set>
<c:choose><c:when test="${score > 90}">你的成绩为优秀</c:when><c:when test="${score > 70}">你的成绩为良好</c:when><c:when test="${score > 60}">你的成绩为及格</c:when>
</c:choose>
</body>
</html>

<c:forEach>

<%@ page import="java.util.ArrayList" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
<%ArrayList<String> people = new ArrayList<>();people.add(0,"小明");people.add(1,"小两");people.add(2,"网吧");people.add(3,"优越感");people.add(4,"聪明");request.setAttribute("list",people);
%>
<%--var:每一次变量出来的东西items:要遍历的对象begin:从哪里开始end: 遍历到哪里step:步长--%>
<c:forEach var="name" items="${list}"><c:out value="${name}"/> <br>
</c:forEach>
<hr>
<c:forEach var="pen" items="${list}" begin="1" end="3" step="2"><c:out value="${pen}"/>
</c:forEach>
</body>
</html>

格式化标签
SQL标签
XML 标签
**JSTL函数

javaweb学习笔记(五)相关推荐

  1. JavaWeb学习笔记五:BS结构系统的结构和协议

    访问html地址,可以展示一个用户列表页面.但是这个用户列表页面是写死在HTML文件当中的.这种资源我们称为静态资源.怎么能变成动态资源.显然需要连接数据库. 连接数据库需要JDBC程序,也就是说需要 ...

  2. JavaWeb学习笔记(5)-B站尚硅谷

    文章目录 十四.书城项目第三阶段--优化 (1)页面jsp动态化 (2)抽取页面中相同的内容 A.登录成功的菜单 B.base.css.jQuery标签 C.每个页面的页脚 D.manager模块的菜 ...

  3. JavaWeb学习笔记(十)--HttpServletRequest

    1. HttpServletRequest简介 HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中 2. Ht ...

  4. python函数是一段具有特定功能的语句组_Python学习笔记(五)函数和代码复用

    本文将为您描述Python学习笔记(五)函数和代码复用,具体完成步骤: 函数能提高应用的模块性,和代码的重复利用率.在很多高级语言中,都可以使用函数实现多种功能.在之前的学习中,相信你已经知道Pyth ...

  5. Ethernet/IP 学习笔记五

    Ethernet/IP 学习笔记五 Accessing data within a device using a non-time critical message (an explicit mess ...

  6. JavaWeb学习总结(五十二)——使用JavaMail创建邮件和发送邮件

    JavaWeb学习总结(五十二)--使用JavaMail创建邮件和发送邮件 一.RFC882文档简单说明 RFC882文档规定了如何编写一封简单的邮件(纯文本邮件),一封简单的邮件包含邮件头和邮件体两 ...

  7. StackExchange.Redis学习笔记(五) 发布和订阅

    StackExchange.Redis学习笔记(五) 发布和订阅 原文:StackExchange.Redis学习笔记(五) 发布和订阅 Redis命令中的Pub/Sub Redis在 2.0之后的版 ...

  8. JavaWeb学习笔记-目录(待完成)

    JavaWeb学习笔记-目录(待完成) 01-基础加强(注解+反射) 02-mysql基础 03-mysql约束 04-mysql多表事务 05-jdbc 06-jdbc连接池JDBCTemplate ...

  9. 吴恩达《机器学习》学习笔记五——逻辑回归

    吴恩达<机器学习>学习笔记五--逻辑回归 一. 分类(classification) 1.定义 2.阈值 二. 逻辑(logistic)回归假设函数 1.假设的表达式 2.假设表达式的意义 ...

  10. 好程序员教程分析Vue学习笔记五

    好程序员教程分析Vue学习笔记五,上次我们学习了Vue的组件,这次我们来学习一下路由的使用.在Vue中,所谓的路由其实跟其他的框架中的路由的概念差不多,即指跳转的路径. 注意:在Vue中,要使用路由, ...

最新文章

  1. maven项目没有错,但是在项目头上有红叉的解决方法
  2. Vista下将目录的所有者恢复为 TrustedInstaller 的方法
  3. python 动态类型_python学习--动态类型
  4. mac https本地跨域配置
  5. 实战|对某棋牌站的一次getshell
  6. 2014 Container技术大会:未来Linux Container会是PaaS平台的核心
  7. 为什么AI工程师成为当前薪资最高的技术岗位
  8. 博途plc连接电脑_PLC报错,电脑连接不了PLC
  9. 写了cookie阻止通过输入地址直接访问下一个html,但是直接输入地址访问时,会闪一下下一个页面,怎么回事啊????、...
  10. QT4 designer的使用 QT国际化
  11. 联想小新触摸板驱动_联想lenovo笔记本触摸板驱动-联想触摸驱动 win7版下载16.2.5.0 官方版-西西软件下载...
  12. 查看局域网内的所有设备的IP地址
  13. Mac读写ntfs磁盘工具:Paragon NTFS for Mac
  14. android禁止屏幕自动旋转_在android程序中禁止屏幕旋转和避免重启Activity
  15. CRT团队组员博客地址统计
  16. 开源天气时钟项目删减和更新
  17. 3CDaemon使用教程
  18. 如何写好产品需求文档PRD
  19. gitlab小记(一)
  20. 解决Dependency ‘xxxx:xxxx-xxxxx-java:x.x.18‘ not found无法导入依赖问题

热门文章

  1. python二级第四套答案
  2. FBI 网站被黑,泄露数据已在 Pastebin 公布
  3. SCAU华南农业大学-数电实验-用74LS138实现2421码转BCD码
  4. 阿里巴巴、腾讯、百度和京东金融落户雄安新区 | 亚马逊加入FB与微软阵营,共同支持开源AI平台ONNX
  5. Vector人工智能机器人SDK使用笔记
  6. 百度名词~杂篇--(对日常遇到事物的深入了解)
  7. 2018:5G标准关键年
  8. 弘辽科技:想做好标题优化,这些错误不能犯。
  9. SSM学习笔记4(Spring整合Mybatis,P26-P28,真吉尔难)
  10. 【随笔】7月休假:粤港澳大湾区旅程记录