JSP
一、什么是JSP
Java Server Pages:java服务器端页面,和Servlet一样,开发动态web页面的技术。
最大的特点:写JSP就像在写HTML
区别:HTML只给用户提供静态的数据 ,JSP页面中可以嵌入JAVA代码,为用户提供动态数据。
二、JSP原理
服务器内部工作 tomcat中有一个work目录;
我电脑的地址: D:\Tomcat\apache-tomcat-9.0.45\work\Catalina\localhost\ROOT\org\apache\jsp

页面转变成了java程序。
浏览器向 服务器发送请求,不管访问什么资源,其实都是在访问Servlet。
JSP最终也会被转换成一个java类。
JSP本质就是一个Servlet。
public void _jspInit() { } //初始化
public void _jspDestroy() { } //销毁
public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
throws java.io.IOException, javax.servlet.ServletException { } //JSPService
1、判断请求
2、内置一些对象
final javax.servlet.jsp.PageContext pageContext; //页面上下文
final javax.servlet.ServletContext application; //applicationContext
final javax.servlet.ServletConfig config; // config
javax.servlet.jsp.JspWriter out = null; //out
final java.lang.Object page = this; //page 当前页面
HttpServletRequest request //请求
HttpServletResponse response //响应
3、输出页面前增加的代码
response.setContentType("text/html; charset=UTF-8"); //设置响应的页面类型
pageContext = _jspxFactory.getPageContext(this, request, response,
null, false, 8192, true);
_jspx_page_context = pageContext;
application = pageContext.getServletContext();
config = pageContext.getServletConfig();
out = pageContext.getOut();
_jspx_out = out;
4、以上的这些对象可以在JSP页面中直接使用。

JSP页面中
只要是Java代码就会原封不动的输出
如果是HTML代码,就会被转换为 out.write("<html\r\n>")这样的格式输出到前端。
JSP基础语法
JSP表达式
<%--JSP表达式
作用:用来将程序的输出输出到客户端 <%= 变量或者表达式%> --%>
<%=new java.util.Date()%>
JSP脚本片段
<%--JSP脚本片段--%>
<%
int sum = 0;
for (int i = 0; i < 100; i++) {
sum+=i;
}
out.println("<h1>Sum="+sum+"</h1>");
%>
<%
int x = 10;
out.println(x);
%>
<p>这是一个JSP文档</p>
<%
int y = 20;
out.println(y);
%>
<hr>
<%--在代码中嵌入HTML元素--%>
<% for (int i = 0; i < 5; i++) {%>
<h1>HelloWorld <%=i%> </h1>
<%
}
%>
JSP声明
<%!
static {
System.out.println("Loading Servlet");
}
private int globalVar = 0;
public void drigon(){
System.out.println("进入了方法drigon");
}
%>
JSP声明会被编译到JSP生成的JAVA的类中,其他的会被生成到_jspServlet方法中。
<%%>/片段
<%=%>/表达式输出的值
<%!%> //定义一些全局的方法
JSP的注释不会在客户端显示,HTML就会。
JSP指令
<%@page args...>
<%@include file=""%>
<%--@include会将两个页面合二为一--%>
<%@include file="common/header.jsp"%>
<h1>网页主体</h1>
<%@include file="common/footer.jsp"%>
<hr>
<%--jsp:include 拼接页面,本质还是三个--%>
<%--JSP标签--%>
<jsp:include page="common/header.jsp"/>
<h1>网页主体</h1>
<jsp:include page="common/header.jsp"/>
9大内置对象
PageContext 存东西
Request 存东西
Response
Session 存东西
Application[ServletContext] 存东西
config[ServletConfig]
out
page
exception(异常)
pageContext.setAttribute("name1","一号");//保存的数据只在一个页面中有效
request.setAttribute("name2","二号");//保存的数据只在一次请求中有效,请求转发会携带这个数据
session.setAttribute("name3","三号");//保存的数据只在一次会话中有效,从打开浏览器到关闭浏览器
application.setAttribute("name4","四号");//保存的数据只在服务器中有效,从打开服务器到关闭服务器
request:客户端向服务器发送请求,产生的数据,用户用完了就没用了,比如:新闻,用户看完就没用了
session:客户端向服务器发送请求,产生的数据,用户用完一会还有用,比如:购物车
application:客户端向服务器发送请求,产生的数据,一个用户用完了,其他用户还能使用比如:聊天数据
JSP标签、JSTL标签、EL表达式
<!--JSTL表达式的依赖-->
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
<version>1.2</version>
</dependency>
<!--standard标签库-->
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
EL表达式:${}
获取数据、执行运算、获取web开发的常用对象
JSP标签
<%--jsp:include--%>
<jsp:forward page="/jsptag2.jsp">
<jsp:param name="name" value="longge"/>
<jsp:param name="age" value="12"/>
</jsp:forward>
JSTL表达式
JSTL标签库的使用就是为了弥补HTML标签的不足。 它自定义了许多标签,可以供我们使用,标签的功能和代码一样。
核心标签(掌握部分)
语法:<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
| 标签 | 描述 |
|---|---|
| <c:out> | 用于在JSP中显示数据,就像<%= ... > |
| <c:set> | 用于保存数据 |
| <c:remove> | 用于删除数据 |
| <c:catch> | 用来处理产生错误的异常状况,并且将错误信息储存起来 |
| <c:if> | 与我们在一般程序中用的if一样 |
| <c:choose> | 本身只当做<c:when>和<c:otherwise>的父标签 |
| <c:when> | <c:choose>的子标签,用来判断条件是否成立 |
| <c:otherwise> | <c:choose>的子标签,接在<c:when>标签后,当<c:when>标签判断为false时被执行 |
| <c:import> | 检索一个绝对或相对 URL,然后将其内容暴露给页面 |
| <c:forEach> | 基础迭代标签,接受多种集合类型 |
| <c:forTokens> | 根据指定的分隔符来分隔内容并迭代输出 |
| <c:param> | 用来给包含或重定向的页面传递参数 |
| <c:redirect> | 重定向至一个新的URL. |
| <c:url> | 使用可选的查询参数来创造一个URL |
JSTL标签库使用步骤
引入对应的taglib 使用其中的方法 在Tomcat中也需要引入jstl的包,否则会报错:JSTL解析错误
<h4>if测试</h4>
<hr>
<form action="coreif.jsp" method="get" >
<%--EL表达式获取表单中的数据
${param.参数名}
--%>
<input type="text" name="username" value="${param.username}">
<input type="submit" value="登录">
</form>
<%--判断如果提交的用户名是管理员,则登录成功--%>
<%-- Java代码
if(request.getParameter("username").equals("admin")){
out.print("登录成功");
}
--%>
<c:if test="${param.username=='admin'}" var="isAdmin" >
<c:out value="管理员欢迎您!"></c:out>
</c:if>
<%--自闭合标签--%>
<c:out value="${isAdmin}"></c:out>
格式化标签
SQL标签
XML标签
浙公网安备 33010602011771号