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标签









 

posted @ 2021-08-18 16:29  mapian  阅读(29)  评论(0)    收藏  举报