java-web9-JSP基础知识

在人生的道路上,不管是潇洒走一回,或者是千山独行,皆须是自己想走的路,虽然,有的人并不是很快就能找到自己的方向和道路,不过,只要坚持到底,我相信,就一定可以找到自己的路,只要找到路,就不必怕路途遥远了。

导读:本篇文章讲解 java-web9-JSP基础知识,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

9.JSP

9.1 jsp介绍

  • jsp:java server pages:java服务器端页面和servlet一样,用于动态web技术
  • 写jsp就像在写HTML
  • 现在的页面基本都是HTML了,静态模板技术取代了JSP

9.2 jsp和HTML区别:

  • HTML给用户提供静态数据
  • jsp页面可以嵌入java代码,给用户提供动态数据

9.3 JSP原理

  • JSP执行过程:在服务器内部工作,tomcat中有一个work目录
  • 我们使用的时idea集成的tomcat会在idea的tomcat中生成一个work目录,将正在访问的jsp页面编译为java/class文件
    在这里插入图片描述
    在这里插入图片描述
  • 正在访问的jsp页面被编译为java文件
    在这里插入图片描述
  • HttpJspBase 继承了HttpServlet
    在这里插入图片描述
  • 浏览器向服务器发送请求,无论访问什么资源,本质是访问servlet
  • jsp本质上时servlet
    在这里插入图片描述
public void _jspInit() {
}
public void _jspDestroy() {
}
public void _jspService(HttpServletRequest request,HttpServletResponse response)
throws java.io.IOException, javax.servlet.ServletException {}
9.3.1 源码刨析
  • 判断请求

  • 内置对象9个

final javax.servlet.jsp.PageContext pageContext; //页面上下文
javax.servlet.http.HttpSession session = null;
final javax.servlet.ServletContext application;
final javax.servlet.ServletConfig config;
javax.servlet.jsp.JspWriter out = null;
final java.lang.Object page = this;
HttpServletRequest req
HttpServletResponse resp
ServletException  exception
  • 输出页面前增加代码,响应和对象设置
response.setContentType("text/html;charset=UTF-8");
      pageContext = _jspxFactory.getPageContext(this, request, response,
      			null, true, 8192, true);
      _jspx_page_context = pageContext;
      application = pageContext.getServletContext();
      config = pageContext.getServletConfig();
      session = pageContext.getSession();
      out = pageContext.getOut();
      _jspx_out = out;
  • 上诉对象可以在jsp中直接使用
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%String name="托尼";%>
<%=name%>
</body>
</html>

在这里插入图片描述

  • jsp页面中,java代码会原样输出
  • 若是html代码则会转换输出到前端,是为渲染的过程

9.4 jsp基础语法

  • 普通项目转web项目
    在这里插入图片描述
    在这里插入图片描述
  • 此方式创建的web项目会有更新局部类功能
    在这里插入图片描述
  • 引入jar包taglibs-standard、jstl-api
<dependency>
    <groupId>javax.servlet.jsp.jstl</groupId>
    <artifactId>jstl-api</artifactId>
    <version>1.2</version>
</dependency>
 <dependency>
    <groupId>taglibs</groupId>
    <artifactId>standard</artifactId>
    <version>1.1.2</version>
</dependency>
  • jsp是java的一种应用,扩充了自己的一些语法,java语法对其支持

  • <%= %>等价于一个表达式,不需要;

9.4.1 jsp表达式,遵循java规则
<%--jsp表达式,将程序结果输出到客户端--%>
<%= new Date()%>
9.4.2 jsp脚本片段
<%
  String name = "zs";
%>
  • 也可以脚本片段和html代码混合使用
<%
  String name = "zs";
  out.write("<h4>name="+name+"</h4>");
%>
<p>分割</p>
<%
  out.write("<h3>name="+name+"</h3>");
%>
9.4.3 jsp声明,被service方法调用
<%--jsp声明提高作用域在,源码service方法外部,servlet类中--%>
<%!
  static {
    final double PI=3.14;
  }
%>
  • jsp注释不会显示在页面上,html注释页面上依然存在
<%--jsp注释--%>
<!--html注释-->

9.5 jsp指令

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.util.Date" %>
<%--指定错误页面,isErrorPage="true"显示的声明是错误页面--%>
<%--<%@page errorPage="error/error.jsp" isErrorPage="true" %>--%>

在这里插入图片描述

  • jsp脚本和jsp标签区别
<%--jsp脚本--%>
<%@include file="common/header.jsp"%>
<h3>主体</h3>
<%@include file="common/footer.jsp"%>
<hr>
<%--jsp标签--%>
<jsp:include page="/common/header.jsp"/>
<h3>主体</h3>
<jsp:include page="/common/footer.jsp"/>

在这里插入图片描述

  • 拼接引入的页面
    在这里插入图片描述
  • 两个同名同类型变量,在jsp脚本合并的页面会冲突,但在jsp标签拼接的页面时,由于时若干个页面所以不会冲突。

9.6 jsp内置对象9个

final javax.servlet.jsp.PageContext pageContext; //页面上下文
javax.servlet.http.HttpSession session = null;
final javax.servlet.ServletContext application;
final javax.servlet.ServletConfig config;
javax.servlet.jsp.JspWriter out = null;
final java.lang.Object page = this; //不用
HttpServletRequest req
HttpServletResponse resp
ServletException exception

  • 使用方式:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isELIgnored="false" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%--4大作用域--%>
<%
pageContext.setAttribute("user4","赵六");//本页面
request.setAttribute("user1","张三"); //本次请求,转发也会传输
session.setAttribute("user2","李四");//当前会话,浏览器打开到关闭
application.setAttribute("user3","王五");//当前web容器,服务器打开到关闭
%>
<%
    //设置作用域,第三个参数
    pageContext.setAttribute("user4","赵六",PageContext.SESSION_SCOPE);//当前会话,浏览器打开到关闭
%>
<%--java中不要写jsp注释等内容,会原样输出到servlet类中
pageContext域中取数据,会遵循从小到大作用域的方式查找,
类似:jvm的双亲委派机制,应用加载器中存在某个根加载器中的类,它不会即可利用应用加载器中的,他会先找扩展类的,找不到在找根加载器的,找到后从上到下加载
跨页面后,若request请求不转发,则只能从session、application作用域中取到值
--%>
<%
String user1 = (String)pageContext.findAttribute("user1");
String user2 = (String)pageContext.findAttribute("user2");
String user3 = (String)pageContext.findAttribute("user3");
String user4 = (String)pageContext.findAttribute("user4");
String user5 = (String)pageContext.findAttribute("user5");
%>
<%--用el表达式输出,null值不输出--%>
<h2>作用域中的值为:</h2>
<h3>user1===${user1}</h3>
<h3>user2===${user2}</h3>
<h3>user3===${user3}</h3>
<h3>user4===${user4}</h3>
<h3>user5===${user5}</h3>
<%--jsp表达式的输出项,null值输出--%>
<h3>user5===<%=user5%></h3>
</body>
</html>
<%pageContext.forward("/page.jsp");
/*效果等同*/
/*request.getRequestDispatcher("/page.jsp").forward(request,response);*/%>
  • 使用场景

request:clinet向service发送请求,产生的数据,用户使用完不用了。新闻

session:clinet向service发送请求,产生的数据,用户使用完稍后还有用。购物车

application::clinet向service发送请求,产生的数据,用户使用完稍后别的用户有用。在线人数

9.7 jsp标签,jstl标签,el表达式

9.7.1 el表达式作用${}
  • 获取数据(作用域中的数据)
  • 执行运算
  • 获取web开发的常用对象
  • 调用方法(不常用)

注意:EL表达式不需要导包 jstl才需要导包

9.7.2 jsp标签
<jsp:forward page="/page04.jsp">
    <jsp:param name="name" value="托尼"/>
    <jsp:param name="pwd" value="123456"/>
</jsp:forward>
<p>page04页面</p>
name==<%=request.getParameter("name")%>
pwd==<%=request.getParameter("pwd")%>
9.7.3 jstl标签
  • 是一个JSP标签集合,它封装了JSP应用的通用核心功能

  • JSTL支持通用的、结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签。

  • 为弥补html标签的不足;自定义了许多标签,可以使用,标签的功能和java代码一样

  • 根据JSTL标签所提供的功能,可以将其分为5个类别。

    • 核心标签
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    
    • 格式化标签
    <%@ taglib prefix="fmt" 
               uri="http://java.sun.com/jsp/jstl/fmt" %>
    
    • SQL 标签
    <%@ taglib prefix="sql" 
               uri="http://java.sun.com/jsp/jstl/sql" %>
    
    • XML 标签
    <%@ taglib prefix="x" 
               uri="http://java.sun.com/jsp/jstl/xml" %>
    
    • JSTL 函数
    <%@ taglib prefix="fn" 
               uri="http://java.sun.com/jsp/jstl/functions" %>
    

问题:服务器无法解析jstl.jar包,tomcat的lib包中缺少jstl-api-1.2.jar和standard-1.1.2.jar包
在这里插入图片描述

  • el表达式获取表单数据用${param.参数名}
  • c:if使用
<form action="page05.jsp" method="post">
    <%--el表达式获取表单数据用${param.参数名}--%>
    <input type="text" name="username" value="${param.username}">
    <input type="submit" value="提交">
</form>
<c:if test="${param.username=='root'}" var="isCheck">
    <c:out value="进入管理界面"></c:out>
</c:if>
<c:out value="${isCheck}"></c:out>
  • c:choose使用
<c:set var="goods" value="50">
</c:set>
<c:choose>
    <c:when test="${goods>=50}">
        高于50%
    </c:when>
    <c:when test="${goods<50}">
        低于50%
    </c:when>
</c:choose>
  • c:forEach使用
<%String[] arrs = {"as","cv","we"};
    request.setAttribute("arrs",arrs);
    ArrayList<String> arrayList = new ArrayList<>();
    //下标从0开始
    arrayList.add(0,"sd");
    arrayList.add(1,"sds");
    arrayList.add(2,"sdse");
    request.setAttribute("arrayList",arrayList);
%>
<c:forEach var="arr" items="${arrs}">
    <c:out value="${arr}"></c:out>
    <br>
</c:forEach>
<c:forEach var="list" items="${arrayList}">
    <c:out value="${list}"></c:out>
    <br>
</c:forEach>

9.8 JavaBean

  • 实体类:

JavaBean的特性:

必须有一个无参构造

属性必须私有化

有对应的get/set方法

  • 一般和数据库表字段做映射,叫OR0M映射

ORM映射关系

表-实体类

字段-属性

行-对象

  • idea连数据库时要设置时区:serverTimezone=UTC
    在这里插入图片描述
<jsp:useBean id="user" class="com.zk.pojo.User" scope="page"></jsp:useBean>
<jsp:setProperty name="user" property="id" value="20"/>
<jsp:setProperty name="user" property="name" value="虚竹"/>
<jsp:setProperty name="user" property="password" value="12456"/>
<jsp:setProperty name="user" property="email" value="12456@123.com"/>
<% Date date = new Date(System.currentTimeMillis());%>
<jsp:setProperty name="user" property="birthday" value="<%=date%>"/>

id==<jsp:getProperty name="user" property="id"/>
name==<jsp:getProperty name="user" property="name"/>
password==<jsp:getProperty name="user" property="password"/>
email==<jsp:getProperty name="user" property="email"/>
birthday==<jsp:getProperty name="user" property="birthday"/>

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/123938.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!