文章目录
前言
在之前学习Servlet时,服务端通过Servlet响应客户端页面,有什么不足之处?- 开发方式麻烦:继承父类、覆盖方法、配置Web.xml或注解
- 代码修改麻烦:重新编译、部署、重启服务
- 显示方式麻烦:获取流、使用println(“”);逐行打印
- 协同开发麻烦:UI负责美化页面,程序员负责编写代码。UI不懂Java,程序员又不能将所有前端页面的内容通过流输出
提示:以下是本篇文章正文内容,下面案例可供参考
一、JSP(Java Server Pages)
1.1概念
简化的Servlet设计,在HTML标签中嵌套Java代码,用以高效开发Web应用的动态网页
1.2作用
替换显示页面部分的Servlet(使用*.jsp文件替换XxxJSP.java)
就是显示网页的,和HTML有什么区别?就是我们的jsp页面可以嵌套java代码
可以和Servlet完美的契合
二、JSP开发【重点】
2.1创建JSP
在web目录下新建*.jsp文件(与WEB_INF平级)
2.1.1 JSP编写java代码
<%--
Created by IntelliJ IDEA.
User: Mriacles21
Date: 2021/9/18
Time: 18:01
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>This is my first page</title>
</head>
<body>
<%=new java.util.Date()%>
</body>
</html>
2.1.2 访问JSP
在浏览器输入http://ip:port/项目路径/资源名称
我的是:http://localhost:8080/day44_xkh_war_exploded/example.jsp
2.2JSP与Servlet
关系:
JSP文件在容器中会转换成Servlet执行
JSP是对Servlet的一种高级封装。本质还是Servlet
区别:
与Servlet相比:JSP可以很方便的编写或者修改HTML网页而不用去面对大量的println语句
2.3JSP实现原理
Tomcat会将xxx.jsp转换成Java代码,进而编译成.class文件运行,最终将运行结果通过response响应给客户端
2.3.1 JSP.java源文件存放目录
使用IDEA开发工具,Tomcat编译后的JSP文件(Xxx_jsp.class和Xxx_jsp.java)的存放地点
C:\用户\账户名\.IntelliJIdea2019.1\system\tomcat\项目名称\work\Catalina\localhost\应用上下文\org\apache\jsp
三、JSP与HTML集成开发【重点】
3.1语法
脚本可以编写java语句、变量、方法或表达式
3.1.1 java代码块
语法:<%Java代码块%>
<%@ page import="java.util.Scanner" %><%--
Created by IntelliJ IDEA.
User: Mriacles21
Date: 2021/9/18
Time: 18:28
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
Hello World!<br>
<%--<% %>中编写java代码块可以成功--%>
<%-- jsp 界面输出 --%>
<%
out.print("out.println: hello jsp");
%>
<%-- 控制台输出 --%>
<%
System.out.println("System.out.println:hello jsp");
%>
<%-- java代码--%>
<%
Scanner scanner = new Scanner(System.in);
System.out.println("a");
int a = 10;
System.out.println(a);
%>
</body>
</html>
经验:普通脚本可以使用所有的Java语法,除了定义函数。
注意:脚本与脚本之间不可以嵌套,脚本与HTML标签不可嵌套
3.1.2 声明
语法:<%!定义变量、函数%>
<%--
Created by IntelliJ IDEA.
User: Mriacles21
Date: 2021/9/18
Time: 19:25
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%!
int b = 20;
public void play(){//声明方法的时候要带!
System.out.println("play....");
}
public int m1(){
return 12;
}
%>
<%-- 输出打印变量b--%>
<%=b%>
<%-- 调用方法--%>
<%
play();//这个是通过方法的名字来调用上面已经声明好的方法
int i = m1();
System.out.println(i);
%>
<%-- 如果声明脚本中的函数具有返回值,可以使用输出脚本调用<%= %>>--%>
<%=m1()%>
<%--这个是jsp注释--%>
<!--html注释-->
</body>
</html>
注意:声明脚本中声明的变量是全局变量。
声明脚本中的内容必须在普通脚本<% %>中调用
如果声明脚本中的函数具有返回值,可以使用输出脚本调用<%= %>
3.1.3 输出
语法:<%=java表达式 %>
表达式输出a: <%=a%>
表达式输出data:<%=new Date()%>
表达式输出a + b : <%=add(1,2)%>
经验:输出脚本可以输出带有返回值的函数
注意:输出脚本中不能加;
3.2JSP注释
JSP注释主要有两个作用:为脚本代码作注释以及HTML内容注释
3.2.1 语法规则
语法 | 描述 |
---|---|
<%-- 注释 --%> | JSP注释,注释内容不会被发送至浏览器甚至不会被编译,效率高点 |
<! – 注释 --> | HTML注释,通过浏览器查看网页源代码时可以看见注释内容 |
3.2.2注释
<%--
Created by IntelliJ IDEA.
User: Mriacles21
Date: 2021/9/18
Time: 20:33
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>基础教程</title>
</head>
<body>
<h3>注释</h3>
<%--jsp 的注释 不会输出到编译的html--%>
<!--使用html式 注释可以写入到生成的html中 -->
</body>
</html>
3.3JSP指令
JSP指令用来设置与整个JSP页面相关的属性
放在jsp页面最顶部的东西
指令 | 描述 |
---|---|
<%@page … %> | 定义页面的依赖属性,比如脚本语言,error页面,缓存需求等等 |
<%@include … %> | 包含其它文件 |
<%@taglib … %> | 引入标签库的定义,可以是自定义标签 |
3.3.1 page指令
语法:<%@page attribute1 = “value1” attribute2 = “value2” …%>
Page指令为容器提供当前页面的使用说明。一个JSP页面可以包含多个page指令。
属性 | 描述 |
---|---|
contentType | 指定当前JSP页面的MIME类型和字符编码格式 |
errorPage | 指定当JSP页面发生异常时需要转向的错误处理页面 |
isErrorPage | 指定当前页面是否可以作为另一个JSP页面的错误处理页面 |
import | 导入要使用的Java类 |
language | 定义JSP页面所用的脚本语言,默认是Java |
session | 指定JSP页面是否使用session。默认为true立即创建,false为使用时创建 |
pageEncoding | 指定JSP页面的编码格式 |
<%@ page contentType=“text/html;charset=UTF-8” language=“java” pageEncoding=“UTF-8” errorPage="error.jsp%>
<%@ page import=“java.util.Scanner” %>
3.3.2include指令
语法:<%@include file=“被包含的JSP路径”>
通过include指令来包含其它文件
被包含的文件可以是JSP文件、HTML文件或文本文件。包含的文件就好像是当前JSP文件的一部分,会同时编译执行(静态包含)
<%@include file = “hedaer.jsp”%>
<%-- 将其它JSP页面包含到当前页面–%>
<%@include file = “content.jsp”%>
<%@include file = “footer.jsp”%>
注意:可能会有重名的冲突问题,不建议使用。
3.3.3taglib指令【重点】引入第三方jar包的时候使用的
语法:<%@taglib uri = “外部标签库路径” prefix=“前缀” %>
引入JSP的标准标签库
目的是引入第三方的jar一个指令
<%@taglib uri = “http://java.sun.com/jsp/jstl/core” prefix=“c”%>
3.4动作标签(用的不多,但是会有)
语法:<jsp:action_name attribute=“value” />
动作标签指的是JSP页面在运行期间的命令
3.4.1include
语法:<js