欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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的原理

JavaWeb详解之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标签

  1. 核心标签
  2. 格式化标签
  3. SQL标签
  4. 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开发的常用对象