JavaWeb-jsp

简介

JSP:Java Server Page

浏览器向服务器发送请求,不管访问什么资源,其实都是在访问Servlet。
JSP最终也会被转换成为一个Java类。

原理

JavaWeb-jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<% String name = "Bob"; %>
hello, <%=name%>!
</body>
</html>

本质

在访问JSP时,java代码会原封不动的输出,HTML代码会变转化,可以看到本质都是Servlet!

JavaWeb-jsp

依赖

<dependencies>
  <!-- servlet的依赖 -->
  <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
  </dependency>

  <!-- jsp的依赖 -->
  <dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>javax.servlet.jsp-api</artifactId>
    <version>2.3.3</version>
    <scope>provided</scope>
  </dependency>

  <!-- standard标签库 -->
  <dependency>
    <groupId>taglibs</groupId>
    <artifactId>standard</artifactId>
    <version>1.1.2</version>
  </dependency>

  <!-- jstl表达式依赖 -->
  <dependency>
    <groupId>javax.servlet.jsp.jstl</groupId>
    <artifactId>jstl-api</artifactId>
    <version>1.2</version>
  </dependency>

</dependencies>

基础语法

表达式

<%= 变量或表达式%> 将输出展示在客户端

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  <%= new java.util.Date()%>
  </body>
</html>

JavaWeb-jsp

脚本片段

<% java代码 %>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  <%
    int sum=0;
    for (int i = 0; i < 100; i++) {
      sum +=i;
    }
    out.println("sum=" + sum);
  %>
  </body>
</html>

JavaWeb-jsp

脚本再实现

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  <%= new java.util.Date()%>
  <hr>
  <%
    for (int i = 0; i < 5; i++) {
  %>
  hello world!<%=i%> <br>
  <%
    }
  %>
  </body>
</html>

JavaWeb-jsp

声明

<%! java代码 %>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <% int i = 1/0; %>
</body>
</html>

<%!
    static {
    System.out.println("Loading servlet");
}
	private int globalVar = 0;
	public void fun(){
   		System.out.println("It is a function");
	}
%>

jsp的声明会被JSP生成到Java的类中,其他的被生成到_jspService 方法中

注释

<%-- 注释 --%>

自定义错误页面

规定页面

<%@ page errorPage="xxx.jsp" %>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page errorPage="/error/500.jsp" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <% int i = 1/0; %>
</body>
</html>

JavaWeb-jsp

全局

配置web.xml

<error-page>
	<error-code>404</error-code>
	<location>/error/404.jsp</location>
</error-page>

JavaWeb-jsp

包含页面

<%-- 将两个页面合二为一 会产生影响 --%>
<%@include file = "commmon/header.jsp" %>
<%-- 拼接页面 互不影响 --%>
<jsp:include page = "/common/header.jsp" />

九大对象

  • PageContext JSP的页面容器
  • Request 获取用户的请求信息
  • Response 服务器向客户端的回应信息
  • Session 用来保存每一个用户的信息
  • ServletContext 表示所有用户的共享信息
  • Config 服务器配置信息
  • out 页面输出
  • page 只在一个页面中保存属性
  • exception 错误处理

获取对象

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%
    //保存的数据仅在一个页面中有效
    pageContext.setAttribute("name1", "test1");
    //保存的数据仅在一次请求中有效,请求转发会携带
    request.setAttribute("name2", "test2");
    //在一次会话中有效,从打开浏览器到关闭浏览器
    session.setAttribute("name3", "test3");
    //保存的数据在服务器中有效,从打开服务器到关闭服务器
    application.setAttribute("name4", "test4");
%>

<%
    String name1 = (String) pageContext.findAttribute("name1");
    String name2 = (String) pageContext.findAttribute("name2");
    String name3 = (String) pageContext.findAttribute("name3");
    String name4 = (String) pageContext.findAttribute("name4");
    String name5 = (String) pageContext.findAttribute("name5");
%>

<%--el表达式输出--%>
<h2>${name1}</h2>
<h2>${name2}</h2>
<h2>${name3}</h2>
<h2>${name4}</h2>
<h2>${name5}</h2>
</body>
</html>

JavaWeb-jsp

pageContext.forword("1.jsp") request数据也会转发

标签

jsp标签

jspTag.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <jsp:forward page="/jspTag2.jsp">
        <jsp:param name="name" value="Bob"/>
        <jsp:param name="age" value="18"/>
    </jsp:forward>
</body>
</html>

jspTag2.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%=request.getParameter("name")%>
    <%=request.getParameter("age")%>
</body>
</html>

JavaWeb-jsp

jstl标签

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

  • 核心标签
  • 格式化标签
  • sql标签
  • xml标签

核心标签

JavaWeb-jsp

使用步骤

  • 引入对应的taglib
  • 使用其中的方法
  • 在tomcat中也需要引入jstl的包
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<%--引入jstl核心标签库--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="jstl.jsp" method="get">
    <%--el表达式获取表单内容--%>
    <input type="text" name="username" value="${param.username}">
    <input type="submit" value="登录">
</form>
<%--判断--%>
<c:if test="${param.username == ‘admin‘}" var="isAdmin">
    <c:out value="welcome" />
</c:if>
</body>
</html>

JavaWeb-jsp

JavaWeb-jsp

上一篇:appium 介绍及环境搭建


下一篇:【应用服务 App Service】在Azure Web App的部署文件中,是否可以限制某些文件无法被访问?(如json)