现有问题
在之前学习Servlet时,服务端通过Servlet响应客户端页面,有什么不足之处?
开发方式麻烦:继承父类、覆盖方法、配置Web.xml或注解
代码修改麻烦:重新编译、部署、重启服务
显示方式麻烦:获取流、使用println("");逐行打印
协同开发麻烦:UI负责美化页面,程序员负责编写代码。UI不懂Java,程序员又不能将所有前端页面的内容通过流输出
JSP(Java Server Pages)
1. 概念:简化的Servlet设计,在Html标签中嵌套Java代码,用于高效开发Web应用的动态网页
2 . 作用:替换显示页面部分的Servlet(使用*.jsp文件替换XxxJSP.java)
3 . 创建JSP:在web目录下新建*.jsp文件,(与WEB-INF平级)
4 . JSP编写Java代码
<%@ 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>
5 . 访问Jsp
在浏览器输入http://ip:port/项目路径/资源名称
6 . JSP与Servlet
关系
JSP文件在容器中会转换成Servlet执行。
JSP是对Servlet的一种高级封装。本质还是Servlet。
区别
与 Servlet 相比:JSP可以很方便的编写或者修改HTML网页而不用去面对大量的println语句。
7.JSP 实现原理
Tomcat会将xxx.jsp转换成Java代码,进而编译成.class文件运行,最终将运行结果通过response响应给客户端。
8.Jsp.java源文件存放目录
使用IDEA开发工具,Tomcat编译后的JSP文件(Xxx_jsp.class 和 Xxx_jsp.java)的存放地点:
C:\用户\账户名\.IntelliJIdea2019.1\system\tomcat\项目名称\work\Catalina\localhost\应用上下文\org\apache\jsp
9 . JSP与HTML集成开发
9.1 脚本:脚本可以编写Java语句、变量、方法或表达式。
9.2普通脚本:语法:<%java代码%>
<html>
<head><title>Hello World</title></head>
<body>
Hello World!<br/>
<%
//jsp中,使用小脚本嵌入java代码!
out.println("hi");//打印内容在客户端页面
System.out.println("hi");//打印内容在控制台
%>
</body>
</html>
9.3 声明脚本:语法:<%! 定义变量、函数 %>
<%! int i = 0; %>
<%! int a, b, c; %>
<%! Object object = new Object(); %>
<%!
//定义方法
public void m1(){
System.out.println("你好");
}
%>
9.4 :输出脚本 语法<%=java表达式>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>jsp基本使用</title>
</head>
<body>
<p>
今天的日期是: <%= new java.util.Date() %>
</p>
</body>
</html>
-
输出脚本直接输出到浏览器
10.JSP注释:JSP注释主要有两个作用:为脚本代码做注释以及HTML内容注释。
语法规则
语法 描述 <%-- 注释 --%> JSP注释,注释内容不会被发送至浏览器甚至不会被编译 < !--注释-- > HTML注释,通过浏览器查看网页源代码时可以看见注释内容
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>jsp基础教程</title>
</head>
<body>
<%-- JSP注释在网页中不会被显示--%>
<!-- HTML注释在网页源代码中会显示 -->
<p>
今天的日期是: <%= new java.util.Date() %>
</p>
</body>
</html>
11.JSP指令:JSP指令用来设置与整个JSP页面相关的属性
page指令
语法:<%@ page attribute1="value1" attribute2="value2" %>
Page指令为容器提供当前页面的使用说明。一个JSP页面可以包含多个page指令。
属性 描述 errorPage 指定当JSP页面发生异常时需要转向的错误处理页面 isErrorPage 指定当前页面是否可以作为另一个JSP页面的错误处理页面 import 导入要使用的Java类 contentType 指定当前JSP页面的MIME类型和字符编码格式 language 定义JSP页面所用的脚本语言,默认是Java session 指定JSP页面是否使用session。默认为true立即创建,false为使用时创建 pageEncoding 指定JSP页面的解码格式
include指令
语法:<%@ include file = "被包含的JSP路径"%>
通过include指令来包含其他文件。
被包含的文件可以是JSP文件、HTML文件或文本文件。包含的文件就好像是当前JSP文件的一部分,会被同时编译执行(静态包含)。
<%@ include file="header.jsp"%> ... ... <%@ include file="footer.jsp" %>
上图输出张三
setProperty
可以在jsp:useBean元素之后使用jsp:setProperty进行属性的赋值
属性 描述 name name属性是必需的。它表示要设置属性的是哪个Bean。 property property属性是必需的。它表示要设置哪个属性。 value value 属性是可选的。该属性用来指定Bean属性的值。 <jsp:useBean id="user" class="com.qf.entity.User" /> <jsp:setProperty name="user" property="name" value="gavin" />4.4.4 getProperty
jsp:getProperty动作提取指定Bean属性的值,转换成字符串,然后输出。
属性 描述 name 要检索的Bean属性名称。Bean必须已定义。 property 表示要提取Bean属性的值 <jsp:useBean id="user" class="com.qf.entity.User" /> <jsp:setProperty name="user" property="name" value="gavin" /> <jsp:getProperty name="user" property="name" />
forward
语法:<jsp:forward page="相对 URL 地址" />
jsp:forward动作把请求转到另外的页面。
属性 描述 page page属性包含的是一个相对URL。 <jsp:forward page="index.jsp" />
4.4.6 param
语法:<jsp:param name="" value=""/>
在转发动作内部使用,做参数传递
<jsp:forward page="index.jsp"> <!-- http请求参数传递--> <jsp:param name="sex" value="nan" /> </jsp:forward>