javaweb学习笔记(五)
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学习笔记(五)相关推荐
- JavaWeb学习笔记五:BS结构系统的结构和协议
访问html地址,可以展示一个用户列表页面.但是这个用户列表页面是写死在HTML文件当中的.这种资源我们称为静态资源.怎么能变成动态资源.显然需要连接数据库. 连接数据库需要JDBC程序,也就是说需要 ...
- JavaWeb学习笔记(5)-B站尚硅谷
文章目录 十四.书城项目第三阶段--优化 (1)页面jsp动态化 (2)抽取页面中相同的内容 A.登录成功的菜单 B.base.css.jQuery标签 C.每个页面的页脚 D.manager模块的菜 ...
- JavaWeb学习笔记(十)--HttpServletRequest
1. HttpServletRequest简介 HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中 2. Ht ...
- python函数是一段具有特定功能的语句组_Python学习笔记(五)函数和代码复用
本文将为您描述Python学习笔记(五)函数和代码复用,具体完成步骤: 函数能提高应用的模块性,和代码的重复利用率.在很多高级语言中,都可以使用函数实现多种功能.在之前的学习中,相信你已经知道Pyth ...
- Ethernet/IP 学习笔记五
Ethernet/IP 学习笔记五 Accessing data within a device using a non-time critical message (an explicit mess ...
- JavaWeb学习总结(五十二)——使用JavaMail创建邮件和发送邮件
JavaWeb学习总结(五十二)--使用JavaMail创建邮件和发送邮件 一.RFC882文档简单说明 RFC882文档规定了如何编写一封简单的邮件(纯文本邮件),一封简单的邮件包含邮件头和邮件体两 ...
- StackExchange.Redis学习笔记(五) 发布和订阅
StackExchange.Redis学习笔记(五) 发布和订阅 原文:StackExchange.Redis学习笔记(五) 发布和订阅 Redis命令中的Pub/Sub Redis在 2.0之后的版 ...
- JavaWeb学习笔记-目录(待完成)
JavaWeb学习笔记-目录(待完成) 01-基础加强(注解+反射) 02-mysql基础 03-mysql约束 04-mysql多表事务 05-jdbc 06-jdbc连接池JDBCTemplate ...
- 吴恩达《机器学习》学习笔记五——逻辑回归
吴恩达<机器学习>学习笔记五--逻辑回归 一. 分类(classification) 1.定义 2.阈值 二. 逻辑(logistic)回归假设函数 1.假设的表达式 2.假设表达式的意义 ...
- 好程序员教程分析Vue学习笔记五
好程序员教程分析Vue学习笔记五,上次我们学习了Vue的组件,这次我们来学习一下路由的使用.在Vue中,所谓的路由其实跟其他的框架中的路由的概念差不多,即指跳转的路径. 注意:在Vue中,要使用路由, ...
最新文章
- maven项目没有错,但是在项目头上有红叉的解决方法
- Vista下将目录的所有者恢复为 TrustedInstaller 的方法
- python 动态类型_python学习--动态类型
- mac https本地跨域配置
- 实战|对某棋牌站的一次getshell
- 2014 Container技术大会:未来Linux Container会是PaaS平台的核心
- 为什么AI工程师成为当前薪资最高的技术岗位
- 博途plc连接电脑_PLC报错,电脑连接不了PLC
- 写了cookie阻止通过输入地址直接访问下一个html,但是直接输入地址访问时,会闪一下下一个页面,怎么回事啊????、...
- QT4 designer的使用 QT国际化
- 联想小新触摸板驱动_联想lenovo笔记本触摸板驱动-联想触摸驱动 win7版下载16.2.5.0 官方版-西西软件下载...
- 查看局域网内的所有设备的IP地址
- Mac读写ntfs磁盘工具:Paragon NTFS for Mac
- android禁止屏幕自动旋转_在android程序中禁止屏幕旋转和避免重启Activity
- CRT团队组员博客地址统计
- 开源天气时钟项目删减和更新
- 3CDaemon使用教程
- 如何写好产品需求文档PRD
- gitlab小记(一)
- 解决Dependency ‘xxxx:xxxx-xxxxx-java:x.x.18‘ not found无法导入依赖问题