JSP
全称:Java Server Pages,动态生成html文档的技术
jsp的主要作用是代替servlet程序回传HTML页面的数据。因为Servlet程序回传HTML页面数据是一件非常繁琐的事情。开发成本和维护成本都很高。
注意:html是静态资源,jsp是动态资源,jsp可以动态请求后端资源,比如用el表达式获得数据,但html不行。
可以通过HttpServletResponse对象回传html标签:
resp.setContentType("text/html;charset=utf-8")
PrintWriter writer = resp.getWriter();
writer.write("<!DOCTYPE html><br>")
jsp本质是一个servlet程序
jsp脚本:
脚本的本质:就是将代码插入到Servlet的service()方法中
声明脚本的格式:<%!声明Java代码%>
内容会放到_jspService()方法之外,被类直接包含,JSP其实就是一个类,一个Servlet类。<%!…%>的作用是在类中添加方法或成员的,所以<%!…%>中的内容不会出现在_jspService()中。
<%! private String name="张三"%>
<%! private String age="23"%>
表达式脚本的格式:<%=表达式%>
<%=…%>与out.print()功能是相同的!它们都是向客户端输出,例如:
<%=s1%>等同于<% out.print(s1); %>
表达式的本质:在将JSP页面转换成Servlet后,使用out.print()将表达式的值输出
<%=name%>
<%=age%>
代码脚本的格式:<%Java语句%> 代码脚本中可以写任意Java脚本,JSP中多个<%…%>是相通的,甚至可以将代码分开写在代码脚本中。
比如这样:
<%
for (int i = 0;i < 100;i++){
%>
<%
System.out.println(i);
}
%>
jsp中的三种注释:
html注释:
java注释:
<%
//单行Java注释
/多行Java注释/
%>
jsp注释:<%—jsp注释—%>
JSP九大内置对象
一、四大域对象
1.request
类型:HttpServletRequest
作用范围:一次请求之内(转发属于一次请求,重定向不属于)。
生命周期:在service 方法调用前由服务器创建,传入service方法。整个请求结束,request生命结束。
2.pageContext
(页面上下文对象)
类型:PageContext
作用范围:当前jsp界面。
生命周期:当对JSP的请求时开始,当响应结束时销毁。
3.session
(会话对象)
类型:HttpSession
作用范围:一次会话之内(浏览器的开启到关闭)
生命周期:在第一次调用 request.getSession() 方法时,服务器会检查是否已经有对应的session,如果没有就在内存中创建一个session并返回。当一段时间内session没有被使用(默认为30分钟),则服务器会销毁该session。如果服务器非正常关闭(强行关闭),没有到期的session也会跟着销毁。如果调用session提供的invalidate(),可以立即销毁session。
注意:服务器正常关闭,再启动,Session对象会进行钝化和活化操作。同时如果服务器钝化的时间在session 默认销毁时间之内,则活化后session还是存在的。否则Session不存在。 如果JavaBean 数据在session钝化时,没有实现Serializable 则当Session活化时,会消失。
4.application
类型:ServletContext
作用范围:整个web工程
生命周期:当Web应用被加载进容器时创建代表整个web应用的ServletContext对象,当服务器关闭或Web应用被移除时,ServletContext对象跟着销毁。
四个域对象完成的功能相同:保存数据,获取数据,共享数据。但域的作用范围不同。例如request取值范围是一次请求之内。
从小到大的顺序是:pageContext,request,Session,application
ps: jsp中,域对象需要写在脚本里。
二、其余的输出对象和配置对象(只做了解)
response
out输出
servletConfig
page
exception
jsp常用标签:
静态包含:一个页面包含另一个页面的数据
格式:
<%--file:包含的页面(相对路径)--%>
<%@include file=" "%>
静态包含实际上运行后只生成了运行页面的.java
文件,被包含页面并没有生成,而是将被包含页面的数据通过流的形式打印到前端。
动态包含:
格式(双标签):
<%--page:包含的页面(相对路径)--%>
<jsp:include page="/jsp/test2.jsp"></jsp:include>
`<br />动态包含会在运行后生成运行界面和被包含页面的.
java`文件。
请求转发:格式:<jsp:forward page="/jsp/test2.jsp"></jsp:forward>
el表达式
主要是为了替换jsp中的输出脚本<%=xxx%>
1、判断集合,对象,数组,属性是否为空:${empty xxx}
2、获取数据
从各种类型的web域中检索java对象、获取数据。(某个web域 中的对象,访问javabean的属性、访问list集合、访问map集合、访问数组)
<%
ArrayList<String> strings = new ArrayList<>();
strings.add("dfas");
%>
${strings[0]}
3、执行运算
利用EL表达式可以在JSP页面中执行一些基本的关系运算、逻辑运算和算术运算,以在JSP页面中完成一些简单的逻辑运算。
${50+40}
${50+40 == 100}
4、获取web开发常用对象
EL 表达式定义了一些隐式对象,利用这些隐式对象,web开发人员可以很轻松获得对web常用对象的引用,从而获得这些对象中的数据。
5、调用Java方法
el表达式允许用户开发自定义el函数,以在JSP页面中通过EL表达式调用Java类的方法。通过el表达式获取类的对象字段时,实际上是通过调用get方法获取的。
例如获取person.name,实际是通过getName方法获取的。