八、JSP(Java Server Pages)

八、JSP(Java Server Pages

8.1、什么是jsp

Java Server Pages :Java服务器端页面,也和Servlet一样,用于动态Web技术

最大的特点:

  • 写jsp就像写HTML

  • 区别:

    • HTMl只能给用户提供静态v的数据

    • JSP页面可以嵌入Java代码,为用户提供动态v数据:

8.2、JSP原理

思路:JSP到底怎么样执行的

  • 代码层面没有任何问题

  • 服务器内部工作

    tomcat中有一个Work目录

    IDEA中使用Tomcat的会在IDEA的tomcat中产生一个work目录

发现页面转换成了Java程序

浏览器向服务器发出请求,不管访问什么资源,其实都是在访问Servlet!

JSP最终也会变成一个Java类

JSP本质上就是一个Servlet

//初始化
public void _jspInit() {
}
//销毁
public void _jspDestroy() {
}
//JSPService
public void _jspService(HttpServletRequest request,HttpServletResponse response){
}
  1. 判断请求

  2. 内置一些对象

    final javax.servlet.jsp.PageContext pageContext;//页面上下文
    javax.servlet.http.HttpSession session = null;//session
    final javax.servlet.ServletContext application;//applicationContext
    final javax.servlet.ServletConfig config;
    javax.servlet.jsp.JspWriter out = null;
    final java.lang.Object page = this;//当前
  3. 输出页面前增加的代码

      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();
  4. 以上这些对象我们可以在JSP页面中可以直接使用

8.3、jsp基本语法

任何语言都有自己的语法,Java中有,jsp也有,作为Java技术的一种应用,它拥有一些自己扩充的语法(了解,知道即可),Java语言都支持

JSP表达式

<%--JSP表达式作用:用来将程序的输出,输出到客户端--%>
<%= 变量或者表达式%>
<%= new java.util.Date()%>

JSP脚本片段

<%--JSP脚本片段--%>
<%
    int sum=0;
    for (int i = 0; i < 100; i++) {
        sum+=i;
    }
%>

JSP声明

<%!
    static {
        System.out.println("Loading Servlet");
    }
    public void lyh(){
        System.out.println("进入了方法lyh");
    }
​
%>

JSP声明:会被编译到JSP生成的Java的类中,其他的,就会被生成到_jspService方法中

在JSP,嵌入Java代码即可

<% %> 写Java代码的
<%= %> 在客户端输出一个Java的值
<%! %> 声明在_jspService之外

8.4、9大内置对象

  • PageContext 存东西

  • Request 存东西

  • Response

  • Session 存东西

  • Application 【ServletContext】 存东西

  • config 【SerlvetConfig】

  • out

  • page(基本不用)

  • exception

    //保存的数据只在一个页面中生效
    pageContext.setAttribute("name1","李永辉1");
    //保存的数据只在一次请求中有效,请求转发会携带这个数据
    request.setAttribute("name2","李永辉2");
    //保存的数据只能再一次会话中有效,从打开浏览器到关闭浏览器
    session.setAttribute("name3","李永辉3");
    //保存的数据只在服务器中有效,从打开服务器到关闭服务器
    application.setAttribute("name4","李永辉4");

8.5、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:forward page="/jsptag2.jsp">
    <jsp:param name="name" value="李永辉"/>
    <jsp:param name="age" value="22"/>
</jsp:forward>
JSTL表达式:

JSTL标签库的使用就是为了弥补HTML标签的不足,他自定义许多标签,可以供我们使用,标签的功能和Java代码吗一样

核心标签

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<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:out>
</c:if>
<c:out value="${isAdmin}"></c:out>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<c:set var="score" value="80"/>
<c:choose>
    <c:when test="${score>=90}">
        优秀
    </c:when>
    <c:when test="${score>=80}">
        一般
    </c:when>
    <c:when test="${score>=70}">
        及格
    </c:when>
    <c:when test="${score<=60}">
        不及格
    </c:when>
</c:choose>
​
</body>
</html>
<%@ page import="java.util.ArrayList" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%
    ArrayList<String> people = new ArrayList<>();
    people.add(0,"张三");
    people.add(1,"李四");
    people.add(2,"李永辉");
    people.add(3,"赵六");
    people.add(4,"清瘦");
    people.add(5,"天六月");
    request.setAttribute("list",people);
%>
<%--
var:每一次遍历出来的变量
items:要遍历的对象
begin:哪里开始
end:到哪里
step:步长
--%>
<c:forEach var="people" items="${list}">
    <c:out value="${people}"></c:out>
    <br>
</c:forEach>
​
</body>
</html>

格式化标签

SQL标签

posted @ 2022-12-04 19:15  菜鸡前来  阅读(76)  评论(0编辑  收藏  举报