JavaWeb详解之JSP
程序员文章站
2022-06-01 22:21:29
...
概述
1.什么是JSP
JSP(全称JavaServer Pages)是由Sun Microsystems公司主导创建的一种动态网页技术标准。
JSP技术以Java语言作为脚本语言,为用户的HTTP请求提供服务,并能与服务器上的其它Java程序共同处理复杂的业务需求。
JSP文件在运行时会被其编译器转换成更原始的Servlet代码。
JSP就是在HTML页面中嵌入了java代码。
JSP本质上也是一个servlet
2.JSP的原理
服务器发现后缀为.jsp,它会根据路径找到helloworld.jsp文件,会将helloworld.jsp翻译成helloworld_jsp.java文件,对这个java文件进行编译,产生一个helloworld_jsp.class文件,将class文件加载运行。
将JSP翻译成java文件,它是将JSP中的所有的HTML代码通过流进行输出,也就是说最终翻译成class,被虚拟机加载,它本质是servlet,它就会往回响应,响应回去就是把JSP中的HTML代码以流的方式写回浏览器。所以在JSP中展示出了HTML代码。
路径:C:\Users\Administrator.IntelliJIdea2018.1\system\tomcat\Unnamed_javaweb-session-cookie\work\Catalina\localhost\ROOT\org\apache\jsp
3.JSP的内置方法
方法 | 概述 |
---|---|
_jspInit() { } | jsp Page被初始化的时候调用该方法,并且该方法仅在初始化时执行一次 |
_jspDestroy() { } | jsp Page由于某种原因被关闭的时候调用该方法 |
_jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response) | 由jsp容器自动创建的处理jsp Page的方法 |
JSP的脚本内容
1.JSP的注释(jsp注释的内容不会出现在生成的servlet中)
<%--注释内容--%>
注意:JSP的注释,不会在客户端显示,HTML就会!
2.JSP的脚本片段(会生成_jspService方法中,写java代码片段需满足java书写规范,不要漏写“;”)
<% %>
3.JSP表达式
<%= 变量或者表达式%>
作用:用来将程序的输出,输出到客户端
4.JSP声明(写在类中,即写在了_jspService方法外)
<%! %>
JSP指令
1.page指令
属性:
pageEncoding属性:设置jsp页面的字符集
contentType:设置jsp的响应类型 (html或plain...)
import:导包
errorPage:当页面执行代码出现异常时,跳转的页面
session:表示当请求到本页面时,是否为其创建一个session对象(默认为true)
案例:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.*,java.text.*" %>
<%@ page errorPage="error.jsp" session="false" %>
<% int a = 1/0; %> 这里一除0是会报错的,结果会跳转到error.jsp页面
2.include指令
<%@include file=""%>
<%--@include会将两个页面合二为一--%>
注意:两个页面中不要有相同的变量名,这样的导入称为静态导入
3.taglib指令
用于导入jsp标准标签库
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
JSP的九大内置对象
- pageContext- - - javax.servlet.jsp.PageContext 保存数据
- request - - - javax.servlet.http.HttpServletRequest 保存数据
- session - - - javax.servlet.http.HttpSession 保存数据
- application - - - javax.servlet.ServletContext 保存数据
- out - - - javax.servlet.jsp.JspWriter 用于浏览器输出数据
- response - - - javax.servlet.http.HttpServletResponse 响应
- page - - - java.lang.Object 当前的servlet对象
- config - - - javax.servlet.ServletConfig 取得服务器的配置信息
- exception - - - java.lang.Throwable 显示异常信息
四种保存数据对象的区别(作用域)
pageContext.setAttribute("name1","张三"); //保存的数据只在一个页面中有效
request.setAttribute("name2","李四"); //保存的数据只在一次请求中有效,请求转发会携带这个数据
session.setAttribute("name3","王麻子"); //保存的数据只在一次会话中有效,从打开浏览器到关闭浏览器
application.setAttribute("name4","天武"); //保存的数据只在服务器中有效,从打开服务器到关闭服务器
request:客户端向服务器发送请求,产生的数据,用户看完就没用了,比如:新闻,用户看完没用的!
session:客户端向服务器发送请求,产生的数据,用户用完一会还有用,比如:购物车;
application:客户端向服务器发送请求,产生的数据,一个用户用完了,其他用户还可能使用,比如:聊天数据;
JSP标签
1.动态导入
<jsp:include page="/common/header.jsp"/>
注意:将两个JSP编译成两个Java文件,实现调用,两个JSP分开执行,变量不会冲突
2.请求转发
<jsp:forward page="/jsptag2.jsp">
<jsp:param name="age" value="12"></jsp:param> //参数传递
</jsp:forward>
1、若要进行参数传递,另一个jsp页面获取时需用request.getParameter(“key”)进行获取
2、不传参数时JSTL,两个中间不能有空格,不然会报错
JSTL标签
- 核心标签
- 格式化标签
- SQL标签
- XML 标签
JSTL标签库的使用步骤
1.引入对应的 taglib
2.使用其中的方法
3.在Tomcat 也需要引入 jstl的包,否则会报错:JSTL解析错误
实例:
1.c:if方法
<form action="coreif.jsp" method="get">
<%--
EL表达式获取表单中的数据
${param.参数名}
--%>
<input type="text" name="username" value="${param.username}">
<input type="submit" value="登录">
</form>
<%--判断如果提交的用户名是管理员,则登录成功--%>
<c:if test="${param.username=='admin'}" var="isAdmin">
<c:out value="管理员欢迎您!"/>
</c:if>
<%--自闭合标签--%>
<c:out value="${isAdmin}"/>
2.c:forEach
<%
ArrayList<String> people = new ArrayList<>();
people.add(0,"张三");
people.add(1,"李四");
people.add(2,"王五");
people.add(3,"赵六");
people.add(4,"田六");
request.setAttribute("list",people);
%>
<%--
var , 每一次遍历出来的变量
items, 要遍历的对象
begin, 哪里开始
end, 到哪里
step, 步长
--%>
<c:forEach var="people" items="${list}">
<c:out value="${people}"/> <br>
</c:forEach>
<hr>
<c:forEach var="people" items="${list}" begin="1" end="3" step="1" >
<c:out value="${people}"/> <br>
</c:forEach>
EL表达式
1.表达式
${ }
2.用途
- 获取数据
- 执行运算
- 获取web开发的常用对象
上一篇: JSP 基础知识
下一篇: JavaWeb基础系列(五)Jsp