JSP
什么是JSP
JavaServerPages:Java服务器端页面,也和Servlet一样,用于动态Web技术1
最大的特点:
- 写JSP就像在写HTML
- 区别:
- HTML只给用户提供静态的数据
- JSP页面中可以嵌入JAVA代码,为用户提供动态数据;
JSP原理
思路:JSP到底怎么执行的
服务器内部工作
- tomcat中有一个work目录
- IDEA中使用Tomcat的会在IDEA的tomcat中生产一个work目录。
浏览器向服务器发送请求,不管访问什么资源,其实都是在访问Servlet
JSP最终也会被转换为Java类。
JSP本质上就是一个Servlet
public interface JspPage extends Servlet {
void jspInit(); //初始化
void jspDestroy(); } //销毁
//JSPService
public interface HttpJspPage extends JspPage {
void _jspService(HttpServletRequest var1, HttpServletResponse var2) throws ServletException, IOException;
}
1.判断请求,post还是get
2.内置一些对象
以下是JSP中的九大内置对象及其用途:
-
request: 代表客户端的请求,可以获取请求参数、头信息等。
-
response: 代表对客户端的响应,可以发送数据或重定向到其他页面。
-
session: 用于跟踪用户会话,可以存储用户特定的信息。
-
application: 代表整个Web应用程序的环境,用于共享数据。
-
out: 用于向客户端发送输出。
-
pageContext: 提供对JSP页面所有对象及命名空间的访问。
-
config: 提供对Servlet配置信息的访问。
-
page: 相当于Java中的this关键字,代表当前页面实例。
-
exception: 用于处理页面执行中的异常。
在JSP中以上对象可以直接使用
访问JSP页面流程:
在JSP页面中:
只要是Java代码就会原封不动的输出;
如果是HTML代码,就会封装为:
out.write("<html>\r\n");
这样的格式输出到前端
JSP的基础语法
前提:注意在pom.xml文件下导入依赖
<dependencies>
<!--Servlet依赖-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<!--JSP的依赖-->
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
</dependency>
<dependency>
<!--JSTL表达式的依赖-->
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<!--standard标签库的依赖-->
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
</dependencies>
任何语言都有自己的语法,JAVA有,JSP作为Java技术的一种应用,它拥有一些自己扩充的语法(了解,知道即可!)Java所有语法都支持
JSP表达式
<%=变量或者表达式%>
<%--jsp表达式:
作用:用来将程序的输出,输出到客户端
--%><%=new java.util.Date()%>
jsp脚步片段
<%Java代码%>
<%
int sum=0;
for (int i = 0; i <= 100; i++) {
sum+=i;
}
out.println("<h1>Sum="+sum+"</h1>");
%>
脚步片段的再实现
<%=输出值%>
<%--在代码中嵌入HTML元素,循环输出5次HTML中的内容--%>
<%
for (int i = 0; i < 5; i++) {
%>
<p>Hello,World!</p>
<%
}
%>
JSP声明
<%! Java代码%>
<%--jsp声明--%>
<%!
static {
System.out.println("Loding Servlet");
}
private int globaVar=0;
public void zhangsan(){
System.out.println("进入了方法zhangsan");
}
%>
JSP声明:会被编译到SP生成的Java的类中!
其他的如表达式和脚本片段会被生成到_jspServlet方法中!
<%--我是JSP的注释--%>
jsp的注释不会在客户端显示,HTML的注释会。
JSP指令
page指令:定义网页依赖属性,比如脚本语言、error页面、缓存需求等等
<%@page 属性%>
定制500错误页面:
定制错误页面方式二:
显示的声明,这是一个错误页面:
<%@page isErrorPage="true" %>
include指令:
在JSP(Java Server Pages)中,include指令用于在一个JSP页面中包含另一个文件的内容。这个文件可以是JSP文件、HTML文件或文本文件。根据包含的方式,include指令分为静态包含和动态包含。
<%@include file=""%>
9大内置对象
- PageContext 存东西
- Request 存东西
- Response
- Session 存东西
- Application(ServletContext) 存东西
- config(ServletConfig)
- out
- page 不用了解
- exception
为以下对象存入数据:
通过findAttribute()拿出数据:
<%--脚本片段中的代码会被原封不动的生成在jsp.java中
要求:这里面的代码:必须保证Java语法的准确性--%>
<%
//作用域(从高层到底层):page->request->session->application
//pageContext取出,我们通过寻找的方式
//JVM:双亲委派机制
String name1 =(String) pageContext.findAttribute("name1");
String name2 =(String)pageContext.findAttribute("name2");
String name3 =(String)pageContext.findAttribute("name3");
String name4 =(String)pageContext.findAttribute("name4");
String name5 =(String)pageContext.findAttribute("name5");//不存在
%>
<%--使用EL表达式${}}输出最快--%>
<h1>取出的值为</h1>
<h3>${name1}</h3>
<h3>${name2}</h3>
<h3>${name3}</h3>
<h3>${name4}</h3>
<h3><%=name5%></h3>
在同一个jsp页面中查找与不同页面中查找:可得到结果:
以上对象作用域级别:
public static final int PAGE_SCOPE = 1;
public static final int REQUEST_SCOPE = 2;
public static final int SESSION_SCOPE = 3;
public static final int APPLICATION_SCOPE = 4;
在设置数据时,会选择作用域级别:
//scope作用域
public void setAttribute(String name, Object attribute, int scope) {
switch(scope) {
case 1:
this.mPage.put(name, attribute);
break;
case 2:
this.mRequest.put(name, attribute);
break;
case 3:
this.mSession.put(name, attribute);
break;
case 4:
this.mApp.put(name, attribute);
break;
default:
throw new IllegalArgumentException("Bad scope " + scope);
也可在设置数据时,手动设置作用域
使用场景:
request:客户端向服务器发送请求,产生的数据,用户看完了就没用了,比如:新闻,用户看完了就没用了。
session:客户端向服务器发送请求,产生的数据,用户用完一会还有用,比如:购物车。
qpplication:客户端向服务器发送请求,产生的数据,一个用户用完了,其他用户还可以使用,比如:聊天数据。
JSP标签、JSTL标签、EL表达式(暂定,后期补上)
<dependency>
<!--JSTL表达式的依赖-->
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<!--standard标签库的依赖-->
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
EL表达式:${ }
- 获取数据
- 执行运算
- 获取web开发的常用对象