1.JSP入门学习
概念:java server pages (java服务器端页面)
可以将其理解成一个特殊的页面,既可以写java代码,又可以定义html代码
作用:简化书写
可以看出我们在写servlet的时候如果使用response对象获取流的方式将html整个页面输出在浏览器,会有多么的麻烦。
原理:jsp本质上就是一个servlet(为我们将html代码封装打印出来)
图解:
JSP脚本:jsp用来声明(定义java代码的方式)
1,<%java代码%>:定义java代码,这个方式写的代码写在service方法中,可以定义service方法中定义的内容。在使用的时候可以使用多个<%java代码1%><%java代码2%>将内容截断。
<%
String path = request.getServletPath();
System.out.println(path);
System.out.println("写在service方法中");
%>
2,<%! java代码%>:定义的java代码,jsp转换后的java类的成员位置(我们使用的很少),因为我们一般不会在servlet中定义成员,防止多线程的数据问题。
<%! int i = 10;%>
3,<%= java代码%>:定义java代码都会输出到页面上,输出语句定义什么,该脚本就可以定义什么。它是利用out.print();进行输出的
<%= 2>3? 2:3%>
jsp的内置对象:在jsp页面中不需要获取和创建,可以直接使用的对象(jsp一共有9个内置对象)
1,request
2,response
3,out :可以将数据输出到页面上(和responde.getWriter()类似)字符输出流对象
out和response.getWriter();之间的区别
在tomcat服务器真正给客户端做出响应之前,会先找到response缓冲区数据,再找out缓冲区数据
所以response的数据输出总是在out的前面
在我们使用的时候推荐统一,推荐使用out,response对象的流对象获取的数据可能会影响布局
<% out.print("out对象");%>
<%! int i = 10;%>
<%
String path = request.getServletPath();
System.out.println(path);
System.out.println("写在service方法中");
%>
<%= 2>3? 2:3%>
<% response.getWriter().write("response流对象");%>
下面使用表格的形式描述jsp的内置对象
编号 | 变量名 | 真实类型 | 作用 |
---|---|---|---|
1 | pageContext | pageContext | 在当前页面共享数据,还可以获取其余的8个对象 |
2 | request | HttpServletRequest | 一次请求的访问的多个资源间共享数据(转发) |
3 | Session | HttpSession | 一次会话的多个请求间共享数据 |
4 | application | ServletContext | 多个用户共享数据 |
5 | response | HttpServletResponse | 响应对象 |
6 | page | Object | 当前页面(servlet)的对象,相当于this |
7 | out | JspWriter | 输出对象数据输出到页面上 |
8 | config | ServletConfig | Servlet的配置对象 |
9 | exception | Throwable | 异常对象 |
pageContext对象功能:
1.在当前页面共享数据
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
内置对象
<%
//1.在当前页面共享数据
pageContext.setAttribute("msg","xzw");
%>
<%=pageContext.getAttribute("msg")%>
2.获取其余的8个对象
jsp指令
作用:用于配置jsp页面,导入资源文件
格式:<%@ 指令名称 属性1=属性值1 属性2=属性值2 ....... %>
指令名称分类
1.page:用于配置jsp页面
常见属性:
1,contentype:等同于response.setContentType();
作用1.设置响应体的mime类型和字符集
作用2.设置当前页面的字符集(只能是IDE才能生效,如果是低级的编译器需要设置pageEncoding)
2,pageEncoding:设置当前页面的字符集
3,language :设置使用语言,永远都是java
4,buffer:缓冲区大小
5,import:导包,在java中使用对象需要用到的包
6,errorpage:错误页面(当前页面出现异常之后,会自动跳转到指定的错误页面,增加用户体验)
7,iserrorpage:标识当前是不是错误页面,默认值为false,设为true之后可以适应exception内置对象
<%@ page contentType="text/html;charset=UTF-8" isErrorPage="true" language="java" %>
错误页面
服务器忙。。。。。
<%=exception.getMessage()%>
只有页面标识成错误页面了之后才能使用exception内置对象
2.include:(用来包含页面,可以将写的对个页面叠加在一起)很少使用
<--页面体 将top.jsp通过include指令导入-->
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@include file="top.jsp"%>
内置对象
页面体
<--页面头top.jsp-->
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
页面头
3.taglib:导入资源(标签库)如:ESTL标签库
我们以后再jsp中无论使用哪一种标签库,都需要提前导入,如导入ESTL标签库
1.导入需要的jar包
2.在jsp页面中导入
导入格式:<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
其中的c是自定义的名字,但是我们在使用ESTL标签库的时候一般都使用c,所以推荐写成c