|
1.JVM
JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。
说的通俗一点,我们的java程序都是运行在jvm上的运行的,正是这一点所以java语言有一个特点是跨平台性。这个平台指的是你的电脑上的操作系统,比如,window系统、linux系统、os系统等。

补充:javac 、java 、java -version[查看当前jdk版本,前提我们的jdk环境变量必须配置好]
javac 和 java 命令存放路径:jdk/bin 目录

2.JDK
JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。

JDK(Java Development Kit) 是 Java 语言的软件开发工具包(SDK)。
SE(JavaSE),standard edition,标准版,是我们通常用的一个版本,从JDK 5.0开始,改名为Java SE。
EE(JavaEE),enterprise edition,企业版,使用这种JDK开发J2EE应用程序,从JDK 5.0开始,改名为Java EE。从2018年2月26日开始,J2EE改名为Jakarta EE [1] 。
ME(J2ME),micro edition,主要用于移动设备、嵌入式设备上的java应用程序,从JDK 5.0开始,改名为Java ME。
没有JDK的话,无法编译Java程序(指java源码.java文件),如果想只运行Java程序(指class或jar或其它归档文件),要确保已安装相应的JRE。
3.JRE
Java运行环境(Java Runtime Environment,简称JRE)是一个软件,由Sun公司所研发,JRE可以让计算机系统运行Java应用程序(Java Application)。
JRE的内部有一个Java虚拟机(Java Virtual Machine,JVM)以及一些标准的类别函数库(Class Library)。
4.JSP三大指令
https://blog.csdn.net/weixin_41547486/article/details/81476015
https://www.cnblogs.com/huiyuantang/p/5332428.html
https://blog.csdn.net/zhang150114/article/details/89434617
https://www.cnblogs.com/lihuiyy/archive/2012/02/24/2366806.html
https://blog.csdn.net/pan_junbiao/article/details/88662176
5.什么是jsp指令
JSP指令的格式:<%@指令名 attr1=”” attr2=”” %>,一般都会把JSP指令放到JSP文件的最上方,但这不是必须的。
JSP中有三大指令:page、include、taglib,最为常用,也最为复杂的就是page指令了,其实所谓的复杂就是指page指令中的属性比较多而已。
Tomcat编译系统会根据JSP的指令信息来编译JSP,生成Java文件。
在生成的Java文件中,不存在指令信息!
6.PAGE
language=&#34;java: 这个属性用于设定jsp的编程语言,目前java是唯一有效的编程语言。
pageEncoding指定的是当前JSP页面的编码!Tomcat编译系统会使用这个编码把JSP编译成Java文件。
contentType指定的是响应给客户端时使用的编码,即对应response.setConteType()方法的参数值! Tomcat都会把响应正文转换成UTF-8编译,然后发送给客户端,并且会在响应头中设置Content-Type头信息为text/html;charset=utf-8,这样浏览器就知道使用服务器发送过来的正文使用了什么编码。
import是page指令中一个很特别的属性!
import属性值对应“真身”中的import语句。真身其实就是java代码中import导入的包。比如说,在我们正常写的一个java代码中需要导入List包【import java.util.List】,现在在jsp页面中当用到各种工具包时也需要导入。
import属性值可以使逗号:<%@ page language=&#34;java&#34; contentType=&#34;text/html; charset=UTF-8&#34;
pageEncoding=&#34;UTF-8&#34; import=&#34;cn.entity.User,java.util.List,java.util.ArrayList&#34; %>

但是,我们一般会使用多个page指令来导入多个包:
<%@ page import=&#34;cn.entity.User&#34; %>
<!-- java.util.* ,*表示引入java.util包下的所有java文件 -->
<%@ page import=&#34;java.util.*&#34; %>
6.1 案例
<%@ page language=&#34;java&#34; contentType=&#34;text/html; charset=UTF-8&#34;
pageEncoding=&#34;UTF-8&#34; %>
<%@ page import=&#34;cn.entity.User&#34; %>
<!-- java.util.* ,*表示引入java.util包下的所有java文件 -->
<%@ page import=&#34;java.util.*&#34; %>
<!DOCTYPE html>
<html>
<head>
<meta charset=&#34;UTF-8&#34;>
<title>Insert title here</title>
</head>
<body>
<%
/* 定义个集合用来存放User实例对象 */
List<User> list = new ArrayList<User>();
/* 向集合中添加数据【User实例对象】 */
list.add(new User(&#34;张三&#34;,&#34;计算机科学与技术&#34;,20));
list.add(new User(&#34;李四&#34;,&#34;软件工程&#34;,20));
list.add(new User(&#34;王五&#34;,&#34;网络工程&#34;,20));
%>
<table>
<tr>
<th>姓名</th><th>系别</th><th>年龄</th>
</tr>
<%
for(int i = 0 ;i<list.size();i++){
%>
<tr>
<td><%=list.get(i).getName() %>
</td><td><%=list.get(i).getSdept() %>
</td><td><%=list.get(i).getAge() %></td>
</tr>
<%
}
%>
</table>
</body>
</html>
7.include
通俗的讲include指令就是将外部的一个文件包含到当前文件中 .
include指令表示静态包含!,当然还有一种包含关系为 动态包含。
include指令只有一个属性:file,指定要包含的页面,
例如:

<!--静态包含,将外部的一个名叫header.jsp的文件包含到该文件中 -->
<%@ include file=&#34;header.jsp&#34; %>
静态包含的过程[和动态包含不一样的地方,也是面试会问到的]:当main.jsp页面包含了header.jsp页面后,在编译main.jsp页面时,需要把main.jsp和header.jsp页面合并成一个文件,然后再编译成Servlet(Java文件)。
验证:
在我们的tomcat 安装目录下有一个work文件夹,这个文件夹用来存放tomcat 编译jsp文件后的java源文件和字节码文件

在这文件夹下没有找到我们的main.jsp文件编译后的java源文件和class文件,这个时候需要我们启动服务器,然后在浏览器中访问main.jsp 文件

这个时候我们再去查看work目录:

8.taglib
在JSP页面中使用第三方的标签库时,需要使用taglib指令来“导包”。
例如:
<!-- 引入jstl的核心标签库 -->
<%@ taglib uri=&#34;http://java.sun.com/jstl/core&#34; prefix=&#34;c&#34;%>
其中prefix表示标签的前缀,这个名称可以随便起,但是我们一般起名为c,
uri是由第三方标签库定义的,所以你需要知道第三方定义的uri。
9.jsp动态指令
<%@ page language=&#34;java&#34; contentType=&#34;text/html; charset=utf-8&#34;
pageEncoding=&#34;utf-8&#34;%>
<!DOCTYPE html PUBLIC &#34;-//W3C//DTD HTML 4.01 Transitional//EN&#34; &#34;http://www.w3.org/TR/html4/loose.dtd&#34;>
<html>
<head>
<meta http-equiv=&#34;Content-Type&#34; content=&#34;text/html; charset=utf-8&#34;>
<title>标题</title>
</head>
<body>
<h2>jsp动态指令</h2>
<!-- jsp:include
jsp:param
jsp:forword
jsp:useBean -->
<!-- jsp:include 动态包含
@ include file=&#34;footer.jsp&#34; 静态包含
先把要包含的jsp页面导入到当前jsp页面之后,形成一个新的jsp页面,在对这个新的jsp页面编译,
所以最终看到的只有一个编译的jsp页面
面试:
include 指令的包含过程为静态包含,因为在使用 include 指令包含文件时,
服务器最终执行的是将两个文件合成后由 JSP 编译器编译成的一个 Class 文件,
所以被包含文件的内容应是固定不变的,
若改变了被包含的文件,则主文件的代码就发生了改变,因此服务器会重新编译主文件。
动作的包含过程为动态包含,通常用来包含那些经常需要改动的文件。
因为服务器执行的是两个文件,被包含文件的改动不会影响主文件,因此服务器不会对主文件重新编译,
而只须重新编译被包含的文件即可。并且对被包含文件的编译是在执行时才进行的,也就是说,
只有当 jsp:include 动作被执行时,使用该标记包含的目标文件才会被编译,否则,被包含的文件不会被编译。
-->
<%-- <%@ include file=&#34;footer.jsp&#34; %> --%>
<jsp:include page=&#34;footer.jsp&#34;>
<jsp:param value=&#34;12&#34; name=&#34;arg_0&#34;/>
<jsp:param value=&#34;2334&#34; name=&#34;arg_1&#34;/>
<jsp:param value=&#34;1&#34; name=&#34;arg_2&#34;/>
</jsp:include>
<form method=&#34;post&#34; action=&#34;&#34; name=&#34;&#34;>
用户名:<input type=&#34;text&#34; name=&#34;usr&#34;/>
<br />
密码:<input type=&#34;password&#34; name=&#34;pwd&#34;/>
<br />
<input type=&#34;submit&#34; value=&#34;提交&#34;/>
</form>
<%
String usr = request.getParameter(&#34;usr&#34;);
String pwd = request.getParameter(&#34;pwd&#34;);
if(usr!=null &&pwd!=null){
%>
<jsp:forward page=&#34;index.jsp&#34;></jsp:forward>
<%
}
%>
<!-- 在大多数的网络应用程序中,都有这样的情况:在用户成功登录后转向欢迎页面,此处的“转向”,就是跳转。
jsp:forward 动作标记就可以实现页面的跳转,
用来将请求转到另外一个 JSP、HTML 或相关的资源文件中。
当 jsp:forward 动作标记被执行后,当前的页面将不再被执行,
而是去执行该标记指定的目标页面,但是,用户此时在地址栏中看到的仍然是当前网页的地址,而内容却已经是转向的目标页面了。 -->
<%=usr %>
<%=pwd %>
</body>
</html>
footer.jsp
<%@ page language=&#34;java&#34; contentType=&#34;text/html; charset=utf-8&#34;
pageEncoding=&#34;utf-8&#34;%>
<!DOCTYPE html PUBLIC &#34;-//W3C//DTD HTML 4.01 Transitional//EN&#34; &#34;http://www.w3.org/TR/html4/loose.dtd&#34;>
<html>
<head>
<meta http-equiv=&#34;Content-Type&#34; content=&#34;text/html; charset=utf-8&#34;>
<title>Insert title here</title>
</head>
<body>
<p style=&#34;font-size:14px;color:red;&#34;>
加油努力奋斗
</p>
<!-- 接收main.jsp页面 jsp:param指令传递过来的参数 -->
<%
String arg_0 = request.getParameter(&#34;arg_0&#34;);
String arg_1 = request.getParameter(&#34;arg_1&#34;);
String arg_2 = request.getParameter(&#34;arg_2&#34;);
int a = Integer.parseInt(arg_0);
int b = Integer.parseInt(arg_1);
int c = Integer.parseInt(arg_2);
int max ;
if(a > b){
if(a > c){
max = a;
}else {
max = c;
}
}else {
if(b > c){
max = b;
}else {
max = c;
}
}
%>
<%=arg_0 %>
<%=arg_1 %>
<%=arg_2 %>
<br/>
<%=max %>
</body>
</html> |
|