一.JSP入门
1.前言
1.1什么是JSP?
JSP是Java Server Page 是动态网页编程技术,是Java Web服务端的动态资源
HTML只能提供静态数据,JSP允许在页面中嵌套Java代码来提供动态数据。
Servlet可以生成动态数据但很难对数据进行排版,JSP可以在生成动态数据的同时方便排版。
通常把Servlet作为web应用中的控制器组件来使用,JSP作为数据显示模板来使用。
其实JSP就是一个Servlet,当我们第一次访问JSP时,JSP引擎会将这个JSP翻译成Servlet,放在Tomcat中的work目录下。
1.2一些设置
Step1:
二.JSP的语法
1.注释
显示注释
能在客户端查看的注释,即通过查看网页源代码可以看到
1.继承HTML风格的注释
<!-- Hello-->2.隐式注释
不能在客户端查看的注释
<%--Hello--%> CTRL+/快捷键 // 写在Java脚本段里的单行注释 /**/ 写在Java脚本段里的多行注释
2.Scriptlet 脚本小程序
三种脚本段
第一种:<% %> 定义局部变量,编写语句 生成的代码在service方法体中
第二种:<%! %> 声明类,方法,全局变量 生成的代码在Servlet类体中
第三种:<%= %> 输出变量或字面量 生成代码在service方法中相当于out.print()
演示
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <% int a = 10; System.out.println(a); out.print(a); out.print(b); out.print("Hello"); out.write("Hello"); %> <%! int b = 20; %> <%= b %> </body> </html>
生成的代码编译后在service方法体中,在Tomcat文件夹->work文件夹的子文件夹中可以查看JSP文件编译后的结果。
3.JSP指令标签
包含操作,可以将一些重复的代码包含进来继续使用。
如点击下面的任何分类,顶端是不会变的,在每个页面中,顶端代码都不会变,这就是包含。
在JSP中使用包含操作有两种做法:
3.1静态包含
特点:将包含的内容进行直接的替换,在servlet引擎转译时,将两个文件的源代码整合到了一起,全放在了jspService方法中,只生成一个servlet,所以两个页面不能有相同的变量名。
演示:
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <%@include file="MyJSP02.jsp"%> //静态包含 <h2>主体</h2> </body> </html>
3.2动态包含
特点:在代码编译阶段,包含和被包含部分是两个独立的部分,只有当运行时,才会动态的包含进来,好比方法的调用。各个文件可以包含相同的变量,动态包含会生成多个源码文件,如果包含两个文件,那么就会生成三个源码文件。耦合度低,耦合度就是参数的依赖程度,各个文件之间没有依赖关系。
演示:
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <jsp:include page="MyJSP02.jsp"></jsp:include> /* 当动态包含不需要传递参数时,include双标签之间不要有任何内容,包括换行和空格 如果有空格的话会默认有数据,编译时找不到就会报错 如果有数据的话,看下面的语法 */ <h2>主体</h2> </body> </html>
演示:传递参数,在MyJSP01中传递的参数,在MyJSP02中获取
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <% String str = "hello"; %> <jsp:include page="MyJSP02.jsp">//这个文件名也可以用<%=url%>这种形式 <jsp:param name="user" value="admin"/> <jsp:param name="msg" value="<%=str%>"/> </jsp:include> <%-- name属性不支持表达式<%= %> value属性支持表达式 --%> <h2>主体</h2> </body> </html>
<%@ page import="javax.print.attribute.standard.MediaSize" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <h2>顶部</h2> <% String uname = request.getParameter("user"); String msg = request.getParameter("msg"); out.print(uname); out.print(msg); %> </body> </html>
4.JSP的四大域对象
4.1四种属性范围
所谓属性保存范围,指的是一个设置的对象,可以在多少页面中保存并可以继续使用
1.page范围
pageContext:只在一个页面中保存属性,跳转后无效。
2.request范围
request:只在一次请求中保存,服务器跳转后依然有效。客户端跳转无效。
客户端跳转相当于发了两次请求,那么第一次请求就不存在了。
如果希望不管是客户端还是服务端跳转都能保存的话,就需要继续扩大范围。
3.session范围
session:在一次会话范围中,无论何种跳转都有效。
无论是客户端还是服务端都可以获取。
但是新开一个浏览器,就无法取得之前设置的session对象。
对于服务器,每一个连接到它的客户端都是一个session。
如果想要属性设置好,不管是否新开浏览器都能拿到,就使用application。
4.application范围
application:在整个服务器上保存。
所有用户(每个session)都可以直接访问。表示公共的内容。
服务器重启后,所有属性都消失了,要重新设置。
4.2域对象使用的方法
演示:
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <% //设置page域对象 pageContext.setAttribute("name1","1"); //设置request域对象 request.setAttribute("