概念JSP(Java Server Pages),它是基于Servlet的扩展技术。其作用是简化JavaWeb应用中动态页
面的开发。
使用JSP技术替换原有的Servlet版View,可以更方便的编辑出更好看的网页。
Servlet实现的View在进行动态页面开发时存在的问题:
1. 开发繁琐,必须实现Servlet接口,重写service方法。
2. 一旦修改,必须要重新编译、部署、测试。
3. 不利于修改页面的样式,不利于编辑内容丰富的页面。
4. 不利于前后端的协作。
1 第一个JSP程序的开发[重点]
1.打开IDEA如图所示的界面,点击Create New Project:
2.选择Empty Project,点击Next。如图所示:
3.填写项目名称和点击Finish即可,如图所示:
4.选择Module点击+,如图所示:
5.选择Java,点击Next。如图所示:
6.填写项目名称和点击Finish,如图所示:
7.选择项目。右键点击如图所示:
8.新建一个web项目,如图所示:
9. 在web目录中新建jsp,如图所示:
10.命名为 hello.jsp,如图所示:
11.编写的代码如下:
<%--
JSP Java Server Page Java服务端页面
作用:替代原有的Servlet版本的View,因为Servlet构建HTML页面太复杂。
--%>
<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" %>
<html>
<head>
<title>第一个JSP程序</title>
</head>
<body>
<!-- 显示当前系统时间 -->
<%= new java.util.Date() %>
</body>
</html>
如图所示:
12.启动服务器访问jsp
jsp访问方式:http://ip地址://jsp路径
示例:http://localhost:8080/hello.jsp
如图所示:
2 Servlet和JSP开发对比
对照表,如图所示:
注意:
1.Jsp编译后自动生成Servlet程序(.java),如果内部有html标签,自动将标签放入输出语句中。
2.生成位置:C:\Users\用户名\.IntelliJIdea版本号 \system\tomcat\Tomcatxxx\work\Catalina\localhost\项目名\org\apache\jsp
3 JSP脚本[重点]
JSP的组成部分:HTML标签和Java代码。
JSP中的Java代码必须写在脚本中,所以又称JSP脚本。
1.输出脚本
作用:与System.out.print()作用一致,将结果输出到网页中。
语法如下:
<%= //要输出的内容 %>
演示的代码如下:
<%--
JSP Java Server Page Java服务端页面
作用:替代原有的Servlet版本的View,因为Servlet构建HTML页面太复杂。
--%>
<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" %>
<html>
<head>
<title>第一个JSP程序</title>
</head>
<body>
<%= 1+2 %> <br>
<%= "hello"+" world"%> <br>
</body>
</html>
如图所示:
注意:
1. 输出的内容不要写;号,与在System.out.print()中写代码一样。
2. 脚本中的内容会自动放入print方法中。
2.普通脚本
作用:可以定义变量或执行Java代码。
语法如下:
<% //Java代码 %>
演示的代码如下:
<%--
JSP Java Server Page Java服务端页面
作用:替代原有的Servlet版本的View,因为Servlet构建HTML页面太复杂。
--%>
<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" %>
<html>
<head>
<title>第一个JSP程序</title>
</head>
<body>
<%
// 定义变量
int a = 10;
int b = 20;
// 向控制台输出
System.out.println(a+b);
%>
<!-- 向页面输出必须使用输出脚本配合 -->
<%= a + b%>
<hr>
<%
// 调用方法
String str = "hello world";
str = str.toUpperCase();
%>
<%= str%>
<hr>
<!-- 可以配合输出脚本向html标签中输出数据 -->
<%
String baidu = "https://www.baidu.com";
%>
<a href='<%= baidu%>'>百度一下</a>
<hr>
<!-- 不可以嵌套html标签或其它脚本-->
<!-- 99 乘法表-->
<%
// 先在控制台输出
for(int i = 1; i < 10; i++){
for(int j = 1; j <= i ; j++){
System.out.print(i + "*" + j + "=" + (i * j) + " ");
}
System.out.println();
}
%>
<%--向页面输出,只需要使用输出脚本替换输出语句,使用br标签代替换行打印即可--%>
<% for(int i = 1; i <= 9; i++){
for(int j = 1; j <= i ; j++){%>
<%--*号为绿色 =号为红色 <form color ="red"></form> --%>
<%=j%>
<font color="green">*</font>
<%=i%>
<font color="red">=</font>
<%=(j*i)%>
<%}%>
<br/>
<%}%>
</body>
</html>
如图所示:
注意:普通脚本中的代码最后会生成到service方法中。
3.声明脚本[了解]
作用:可以定义方法和属性(变量)。
语法如下:
<%! //定义方法或变量 %>
演示的代码如下:
<%--
JSP Java Server Page Java服务端页面
作用:替代原有的Servlet版本的View,因为Servlet构建HTML页面太复杂。
--%>
<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" %>
<html>
<head>
<title>第一个JSP程序</title>
</head>
<body>
<%!
public int sun(int a, int b){
return a + b;
}
int a = 10;
int b = 20;
%>
<%=sun(10,20)%>
<%--<% sun(i,j);%>
<%= sun(i,j)%>--%>
</body>
</html>
如图所示:
注意:声明脚本中的代码会生成在类以内方法以外的位置。
4.注释脚本[了解]
在jsp中可以使用html中的注释,jsp也有自己的注释方式!
演示的代码如下:
<%--
JSP Java Server Page Java服务端页面
作用:替代原有的Servlet版本的View,因为Servlet构建HTML页面太复杂。
--%>
<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" %>
<html>
<head>
<title>第一个JSP程序</title>
</head>
<body>
<!-- html中的注释 -->
<%-- jsp中的注释 --%>
<!--
<%
System.out.println("html注释");
%>
<%= 1+2%>
html注释中脚本仍会执行,只是不显示在页面
-->
<%--
jsp注释中的内容,不会执行。也不会显示在页面
<%
System.out.println("jsp注释");
%>
<%= 1+2 %>
--%>
</body>
</html>
如图所示:
4 JSP工作原理
JSP并不能直接运行,jsp会先翻译成Servlet程序(.java),再编译java为class文件,最终运行class生成动态页面。
如图所示:
编译过程:
1.当浏览器第1次访问jsp时,jsp会先翻译成java,然后编译成class,由class文件运行响应结果。
2.如果浏览器2次访问jsp时,直接使用之前编译的class。
注意:一旦修改jsp源码,再次访问,Tomcat还需要重新翻译并编译。
5 指令
概念:用来设置和整个JSP网页相关的属性,比如网页的编解码集和session的开启等等。
语法如下:
<%@ 指令 属性名="属性值" 属性名2="属性值2" %>
1.page指令
作用:用来设置和整个JSP网页相关的属性。
语法如下:
<%@ page 属性名="属性值" 属性名2="属性值2" %>
常见属性:
2.taglib指令
作用:引入外部提供的标签库。
语法如下:
<%@ taglib uri="标签库的唯一标识" prefix="前缀" %>
- include 指令(静态包含)
作用:在当前页面包含其它页面,以达到复用页面的效果。
语法如下:
<%@ include file="其它页面路径" %>
演示:将jsp中重复的内容单独抽取。
在jsp中引入其他jsp,如图所示:
编写header.jsp的代码如下:
<%@ page pageEncoding="UTF-8" contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>欢迎使用本公司系统</h1>
</body>
</html>
如图所示:
编写fooder.jsp的代码如下:
<%@ page import="java.util.Date" %>
<%@ page pageEncoding="UTF-8" contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
公司名称:©<%= new Date()%>
</body>
</html>
如图所示:
编写hello.jsp的代码如下:
<%--
JSP Java Server Page Java服务端页面
作用:替代原有的Servlet版本的View,因为Servlet构建HTML页面太复杂。
--%>
<%@ page pageEncoding="UTF-8" contentType="text/html;charset=UTF-8" isELIgnored="false" %>
<html>
<head>
<title>第一个JSP程序</title>
</head>
<body>
<%--引入header.jsp--%>
<%@include file="header.jsp"%>
<%--引入fooder.jsp--%>
<%@include file="fooder.jsp"%>
</body>
</html>
如图所示:
6 动作
1.include动作[重点](动态包含)
作用:在当前页面包含其它页面,作用和include指令类似。
语法如下:
<jsp:include page="其它页面路径"/>
如图所示:
包含指令(静态包含)和包含动作(动态包含)的区别:
静态包含:在翻译阶段将3个jsp翻译成1个java文件,最终编译后得到包含3部分内容的class文件。
动态包含:在翻译阶段将3个jsp翻译成3个java文件,最终编译成3个class文件,index会自动向被包含的jsp发送请求,将显示结果包含其中总结:静态包含,包含代码,先包含后编译;动态包含,包含jsp响应结果,先编译后包含。
2。forward动作[了解]
作用:从当前jsp页面请求转发到另外一个jsp页面。
语法如下:
<jsp:forward page="另外一个页面的路径"/
如图所示:
7 JSP中内置对象与作用域
作用:在jsp脚本中,不需要新建,可以直接使用的对象。
九个内置对象,如图所示:
pageContext获取8个隐含对象,如图所示:
pageContext可以操作其它3个作用域。
<%--使用pageContext向4个作用域中保存数据--%>
<% pageContext.setAttribute("name","pageContext"); %>
<% pageContext.setAttribute("name", "request",PageContext.REQUEST_SCOPE); %>
<% pageContext.setAttribute("name", "session",PageContext.SESSION_SCOPE); %>
<% pageContext.setAttribute("name", "application",PageContext.APPLICATION_SCOPE); %>
<%--使用pageContext从4个作用域中获取数据--%>
<%= pageContext.getAttribute("name")%>
<%= pageContext.getAttribute("name",PageContext.REQUEST_SCOPE)%>
<%= pageContext.getAttribute("name",PageContext.SESSION_SCOPE)%>
<%= pageContext.getAttribute("name",PageContext.APPLICATION_SCOPE)%
8 使用JSP替换原有Servlet视图
原有项目中的视图有静态的HTML和动态的View型Servlet,在学习了JSP技术后就应该使用功能更强大的JSP替换原有的视图。
1.静态html页面的替换
替换步骤:
1.直接将html页面内容复制到jsp中即可。
2.需要项目名的地方使用 <%= request.getContextPath() %>替换。
比如:
2.动态Servlet(View)替换为jsp
替换步骤:
1.在jsp中通过普通脚本获取作用域中的数据。
2.直接书写html标签,需要回显数据的地方使用输出脚本。
比如:
注意:如果以/person/showAllPersonView.jsp的方式访问jsp,jsp应放在web/person目录中。
ideaweb项目运行,如图所示: