文章目录
我的学习路线
——本次学习的简单说明
本次的学习分为九节
注:点击题目会跳转到其他博客链接
Day1:JSP的入门&环境的配置&Tomcat的注意点
Day2:简单项目的创建和基本的功能的实现(打war包,共享项目)
Day3:JSP基础语法
Day4:JSP 九大内置对象及四个作用域
Day5:JavaBean 组件
Day6:Servlet 开发
Day7:EL 表达式
Day8:Jsp 自定义标签
Day9:Jsp 标准标签库持续更新中:新的博客写完会加链接
下面是Day3的学习
1 page指令
1.1 指令来源
什么是page指令呢?介绍的page指令又是源自哪里呢?
上图是我在项目中创建的一个JSP,其实要开始学JSP,是与HTML进行对比的,HTML是静态的页面,这里的JSP就是动态的页面,并且这个页面可以与后端的数据进行交互,后端连接上数据库,就能变成一个“活的”页面了。
1.2 指令介绍
- Language : 用来定义要使用的脚本语言;
- contentType:定义 JSP 字符的编码和页面响应的 MIME 类型;charset是用户与界面进行交互的时候,上面显示东西的语言类型
- pageEncoding:Jsp 页面的字符编码,也要写成UTF-8的形式,不然你写的代码里面,有汉子,都没法保存
特别注意:默认的语言是英语的,所以我们码农写的提示语句,会变成乱码的情况,这里就要改成UTF-8的数据类型
2 scriptlet标签
2.1 简单介绍
了解一句就够了:通过 scriptlet 标签我们可以在 Jsp 里嵌入 Java 代码
2.2 使用方法
第一种:<%! %> 我们可以在里面定义全局变量、方法、类;
第二种:<% %> 我们可以在里面定义局部变量、编写语句;
第三种:<%=%> 我们可以在里面输出一个变量或一个具体内容;
2.3 原理
方法一演示+原理
第一种方法的实现
最终这个是会编译成一个servlet类的,是后端的一个java代码,这个是自动生成的。
下面的这个只有在apache-tomcat的安装包里面才能看到!不要你存eclipse中的项目地方看,那里是没有的,这个就是jsp中用script写得东西的原理。
我的理解是:本质jsp是没法写后端的java文件的,我们上面写的那些全局变量其实是后端的东西,那么jsp是怎么处理这些后端的java语句的呢?就是把我们通过scriptlet写的东西,自动编译成它原本的格式,这里的测试的代码的原本的就是后端的java代码。
千万不要去项目里面找,找不到的,看图。
方法二演示+原理
编码:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
<%!
String str="全局变量";
%>
<%!
public void fun1(){
System.out.println("全局方法");
}
%>
<%!
class C{
private int a;
public void f(){
System.out.println("全局类");
}
}
%>
<%
int a=7;
String b="我爱学习";
out.println(b+",每周学习"+a+"天");
%>
</head>
<body>
</body>
</html>
跟上面的全局变量的区别就在这里,全局变量是有感叹号的
通过localhost进行访问
那么文件自动编译生成的java文件又是什么样的呢?
一般请情况,编程的习惯就是把全局变量放在最开始的位置,局部变量跟在后面,可以看到,我们定义的局部变量的位置就是在这个自动生成的文件的靠后面的位置
方法三演示+原理
在上面的代码的基础上,加上一个输出b,这里输出的是局部变量
再次通过localhost访问一下
那么servlet自动生成的java代码是什么样的呢?
就是多了一个语句的输出。
总结以上三个标签
根据原理,我们实现了三种不同的方法,并且看到了具体的效果,当然原理也是很明显的,通过java文件就可以看到,有一点java编程基础的人应该都能理解的,通过java编程基础和Servlet自动将scriptlet中的语句自动生成java语句,就能看到具体的区别。
java语句怎么找呢?看下面的目录
找到你的文件夹的位置,找到这个java文件,然后通过记事本的方式打开,由于我的电脑装的还有idea,我设置的默认的java文件的打开方式是idea,所以显示的图标是真样的。
3 JSP注释
3.0 简单介绍
代码:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<h1>JS注释</h1>
<!-- HTML注释,客户端可见 -->
<%-- JSP注释,客户端不可见 --%>
</body>
</html>
3.1 客户端可见
查看网页源代码
3.2 客户端不可见
看上面的图,jsp注释的客户端不可见的部分查看网页源代码是看不到的。
4 Jsp 包含指令
简单介绍:https://www.runoob.com/jsp/jsp-directives.html这个是菜鸟学习中的简单的介绍,我也解释不清楚,有需要的点连接看一下。
我主要是学习了两种包含指令,分别是静态包含和动态包含。
4.1 静态包含
<%@ include file=”要包含的文件”%> 静态包含 先包含,后编译处理;
创建两个文件,一个是HTML,一个是jsp,放上一些内容
创建一个测试用的JSP,include.jsp
代码:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<h1>静态包含</h1>
<%@ include file="common/head.html"%>
<p>content</p>
<%@ include file="common/footer.jsp"%>
</body>
</html>
通过localhost进行访问
执行过程:先把HTML内容放到include测试文件中,再把JSP的内容放到测试文件中(这里其实就是顺序结构),最后再执行include这个测试文件。
4.2 动态包含
<jsp:include page=”要包含的文件”> 动态包含 先编译处理,后包含;
代码
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%-- <h1>静态包含</h1>
<%@ include file="common/head.html"%>
<p>content</p>
<%@ include file="common/footer.jsp"%> --%>
<%--上面的代码已经注释了 --%>
<h1>动态包含</h1>
<jsp:include page="common/head.html"></jsp:include>
<p>content</p>
<jsp:include page="common/footer.jsp"></jsp:include>
</body>
</html>
通过localhost进行访问
执行过程:先处理好,比如说footer.jsp先自己编译好,再把编译完的结果放到include测试文件中。
注:以后用到的几乎都是动态包含。
5 JSP跳转指令
5.1底层原理
5.2 实现
创建一个forward.jsp
代码
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<jsp:forward page="target.jsp">
<jsp:param value="我爱学习,学习能使我变得优秀" name="Me"/>
<jsp:param value="足够优秀了,能感动上帝" name="God·"/>
</jsp:forward>
</body>
</html>
创建一个测试的target.jsp
代码
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
服务器内部跳转后的界面<br/>
I hope:<%=request.getParameter("Me") %><br/>
God can:<%=request.getParameter("God") %>
</body>
</html>
访问localhost:8080/forward.jsp,很显然,自动跳转到target.jsp了,并且通过target.jsp获得了forward。=.jsp中的数据。
内部跳转的特征:内部跳转的地址是没有变的,也就是我们跳转的target这个页面的时候,我们的localhost那一行的地址还是属于forward的.
这个是和客户端跳转存在的本质的区别!!!