一、创建jsp
-
什么是jsp
-
jsp全称是java servlet pages,它和servlet技术一样,都是用来开发动态web应用程序的
-
-
目录结构
-
html、jsp等页面相关的内容都创建在web目录下
-
在web目录下创建css目录、js目录、images目录等用于存放css、js及图片文件等
-
现阶段,前端资源不要放在WEB-INFO目录下,因为该目录受保护,将资源放在该目录下,访问时会报404错误
-
-
page指令
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ page import="java.util.Date" %>
-
page指令:告诉服务器如何翻译我的jsp页面
-
contentType="text/html;charset=UTF-8":告诉服务器,我要向页面响应的内容是html文档,编码格式是utf-8
-
language="java":告诉web服务器,该jsp页面使用的脚本语言是java语言
-
import="java.util.Date":用于引用java语言中用到的第三方类文件
-
二、jsp页面的组成
public String getDate(Date date){
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
String currentDate = sf.format(date);
return currentDate;
}
-
指令
-
page
-
include
-
taglib
-
-
静态元素
<%--html css--%> <p style="color: red">这是一个段落</p> <%--js--%> <script> alert("这是jsp中的js代码") </script>
-
java
-
<%%>中写java片段,即一个代码块,每一行以分号结束
<%--下面这段代码只是执行java语言,但是不会把结果显示在页面上--%> <% Date date = new Date(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日"); String currentTime = simpleDateFormat.format(date); %>
-
<%= %>中写jsp表达式,用来向页面输出内容,最后不加分号
<%--输出--%> <%="当前日期是:" + currentTime%>
-
<%!%>中声明jsp的全部变量和方法
<%--jsp中还可以写完整的方法--%> <%! String getDate(Date date) { SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd"); //String currentTime = sf.format(date) return sf.format(date); } %>
-
-
注释
-
<!--html注释,F12,在客户端能看到--> <%--jsp注释,F12,在客户端看不到--%> java注释:F12,客户端看不到,要写在<%%>里面 <% //这是java单行注释 /* 这是多行注释 */ %>
-
-
jsp九大内置对象
三、jsp的原理
-
web服务器是如何调用并执行一个jsp页面的呢?
-
用户通过浏览器向服务器发送请求,不管访问的是什么资源,其实都是在访问servlet,所以jsp的本质就是servlet。服务器在执行jsp的时候,先把它翻译为一个servlet,所以我们请求一个jsp页面的时候,实际请求的是翻译后的servlet
-
jsp的运行过程
-
(hello.java --编译-- hello.class 修改了hello.java --编译-- hello.class)
-
第一次执行
-
客户端用户通过浏览器向服务器请求资源(.jsp文件)
-
web服务器获取到.jsp文件,到web目录下查找.jsp文件,找到请求的.jsp文件
-
把请求的.jsp文件翻译为.java类
-
将.java类编译生成.class文件
-
最终服务器要执行.class文件,并把内容输出给浏览器,浏览器显示页面
-
-
第二次执行
-
因为已经存在相应的.class文件,所以不需要翻译和编译的过程
-
如果修改了jsp文件,就需要重新翻译和编译
-
-
-
四、九大内置对象
-
所谓内置对象,就是web服务器把jsp翻译为servlet时创建的一组对象,可以拿来直接使用,不需要new创建,也称为隐式对象
-
只能用在<%%>及<%=%>中
//1.page对象:类型是java.lang.Object
//代表当前jsp页面,一个jsp页面就是一个page对象,即代表当前jsp被翻译后的类的实例
//一般使用this
ServletConfig servletConfig = this.getServletConfig();
//2.out对象:类型是JSPWriter
//用于向客户端发送数据,有两个常用方法:print()和write()
//作用和<%=%>相同
//print():能识别标签,可以输出对象
out.print("<h1>" + new Date() + "</h1>");
//write():能识别标签,不能输出对象
out.write("<h2>二级标题</h2>");
//3.request对象,类型HttpServletRequest
//封装了用户的请求信息,对应客户的请求
//4.response对象,类型HttpServletResponse
//封装了响应信息,对客户端的请求做出动态的响应,向客户端发送数据
//5.application对象,类型是ServletContext
//代表当前web应用,可以用它来设置整个web应用的共享数据
//6.session对象,类型是HttpSession
//代表一个会话,会话:从客户打开浏览器并连接到服务器开始
// 到客户关闭浏览器断开与服务器的连接结束
//7.pageContext对象,类型是pageContext
//俗称页面上下文,可以表示这个页面中的所有内容,它内部封装了其他八大内置对象,
//可以通过相应的get对象名()得到具体的内置对象
application = pageContext.getServletContext();
config = pageContext.getServletConfig();
session = pageContext.getSession();
out = pageContext.getOut();
//8.config对象,类型是ServletConfig
//代表servlet的配置信息,因为jsp不需要配置,所以这个对象基本没用
//9.exception对象,类型是Throwable
//只能在isErrorPage="true"的页面中使用,即定义为错误页面使用,直接在jsp页面中使用会报错,需要设置
//<%@ page contentType="text/html;charset=UTF-8" language="java" isErrorPage="true" %>
五、jsp中的四大范围
//1.page:代表当前页面,用this表示,page相关的数据只在本页面内生效,
// 实际使用的对象是pageContext
String str = "我是用来测试page范围的,我的作用范围只是本页面";
//将str存入page范围内,即存到pageContext对象中
pageContext.setAttribute("str",str);
out.print("page范围内的数据是:" + pageContext.getAttribute("str") + "<br>");
//不同页面中的pageContext对象不是同一个对象
//2.request:代表一次请求,request相关的数据只在一次请求内生效,
String req = "一次请求中的数据";
//存入request范围
request.setAttribute("req",req);
out.print("request范围内的数据是:" + request.getAttribute("req"));
//转发到test03.jsp
//request.getRequestDispatcher("test03.jsp").forward(request,response);
//3.session:代表一次会话,session相关的数据在一次会话期间有效
//4.application:代表整个web应用,存在application中的数据是web应用的全局变量,每一个用户共享
//往application中存入数据
application.setAttribute("app","application");
out.print(application.getAttribute("app"));
六、response的重定向
-
案例:登录功能
-
登录成功,跳转到欢迎页面,显示欢迎使用本系统
-
登录失败,跳转回登录页面,显示用户名或密码错误
-
-
重定向的方法
response.sendRedirect("String path")
-
path:要跳转的路径
-
可以是内部页面的名称,如:welcome.jsp
response.sendRedirect("welcome.jsp");
-
也可以是外部网站的网址:如:
-
response.sendRedirect("http://www.baidu.com");
-
-
-
什么是重定向
-
一个web资源(LoginServlet)接收到客户端的请求,通知客户端去访问另一个web资源(welcome.jsp)
-
-
特点:
-
重定向发生在客户端
-
重定向后,浏览器的地址栏url发生改变,改变为重定向后的地址
-
重定向是二次请求
-
重定向的url地址可以是本web应用的内部资源,也可以是外部网址
-
-
注意:
-
重定向后,之前的请求信息就访问不到了,因为重定向是发起了新的请求
-
七、request的转发(请求转发)
-
转发过程
//第一步,获取一个转发对象 //RequestDispatcher rd = request.getRequestDispatcher("welcome.jsp"); //第二步,进行转发操偶做 //rd.forward(request,response); //以上两步合起来写 request.getRequestDispatcher("welcome.jsp").forward(request,response);
-
什么是转发
-
一个web资源(LoginServlet)接收到客户端的请求后,通知服务器去访问另一个web资源(welcome.jsp)
-
-
特点
-
转发发生在服务器端
-
转发后浏览器的地址栏url不会改变
-
转发是一次请求,将请求信息在多个资源间进行跳转
-
转发只能转发到本web应用的内部资源
-
转发因为是一次请求在多个资源间进行跳转,所以请求的数据可以共享
-