JSP

1.JSP的概述
  1. JSP的全称是Java Server Pages,即Java的服务器页面
  2. JSP的主要作用是代替Servlet程序回传HTML页面的数据
  3. web目录(或其他)右击 --> new --> JSP/JSPX --> 输入文件名 --> 选择JSP file创建

JSP的本质就是一个servle程序

2.JSP指令
	1. page		: 配置JSP页面的
		* contentType:等同于response.setContentType()
			1. 设置响应体的mime类型以及字符集
			2. 设置当前jsp页面的编码(只能是高级的IDE才能生效,如果使用低级工具,则需要设置pageEncoding属性设置当前页面的字符集)
		* import:导包
		* errorPage:当前页面发生异常后,会自动跳转到指定的错误页面
		* isErrorPage:标识当前也是是否是错误页面。
			* true:是,可以使用内置对象exception
			* false:否。默认值。不可以使用内置对象exception
	2. include	: 页面包含的。导入页面的资源文件
			* <%@include file="top.jsp"%>
	3. taglib	: 导入资源
			* <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
				* prefix:前缀,自定义的		

内置对象

3.常用的脚本
1. 声明脚本

格式:<%! 声明Java代码 %>
作用:可以给JSP翻译出来的Java类定义属性、方法、静态代码块、内部类等
特点:不会在浏览器的页面上显示出来,仅存在于翻译后的Java类中

代码演示:声明脚本的使用(此JSP文件在web目录下,名为First.jsp)

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.util.HashMap" %>
<%@ page import="java.util.Map" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%--1.声明类属性--%>
    <%!
        private String name;
        private static Map<String, Object> map;
    %>
    <%--2.声明类方法--%>
    <%!
        public int sum() {
            return 12;
        }
    %>
    <%--3.声明静态代码块--%>
    <%!
        static {
            map = new HashMap<String, Object>();
            map.put("key1", "value1");
        }
    %>
</body>
</html>
2. 表达式脚本

格式:<%=表达式 %>
作用:在浏览器的JSP页面上输出数据(只有此脚本可以在浏览器的页面上输出数据)
特点:
(1) 所有的表达式脚本都会被翻译到对应的Java类的_jspService()方法中,故表达式脚本可以 直接使用_jspService()方法参数中的对象
(2) 表达式脚本都会被编译后的Java类中的out.print()方法输出到浏览器页面上
(3) 表达式脚本中的表达式不能以分号结束

代码演示:表达式脚本的使用(此JSP文件在web目录下,名为First.jsp)<%=22 %>

<%="可以输出字符串" %> <br/>
<%=map %> <br/>
<%--使用_jspService方法中的对象--%>
<%=request.getParameter("username") %>
3. 代码脚本

格式:<% Java语句 %>
作用:在JSP页面中可以编写需要的Java代码
特点:
(1) 代码脚本翻译后都在_jspService方法中,故代码脚本可以直接使用此方法参数中的对象
(2) 可以由多个代码脚本块组合完成一个完整的Java语句
(3) 代码脚本还可以和表达式脚本一起组合使用,在JSP页面上输出数据

代码演示:代码脚本的使用(此JSP文件在web目录下,名为First.jsp)

<%--1.if语句--%>
<%
    int i = 1;
    if (i == 1) {
        System.out.println("我爱祖国!");
    } else {
        System.out.println("我很爱祖国!");
    }
%> <br/>
<%--2.for循环语句--%>
<%
    for (int j = 0 ; j < 3; j++) {
        System.out.println("第" + j + "次循环");
    }
%> <br/>
<%--3.使用_jspService方法参数中的对象--%>
<%
    String username = request.getParameter("username");
    System.out.println("username对应的值为:" + username);
%>
4.内置对象
  • 在jsp页面中不需要创建,直接使用的对象

  • 一共有9个
    变量名 真实类型 作用

    pageContext PageContext 当前页面共享数据,还可以获取其他八个内置对象
    request HttpServletRequest 一次请求访问的多个资源(转发)
    session HttpSession 一次会话的多个请求间
    application ServletContext 所有用户间共享数据
    response HttpServletResponse 响应对象
    page Object 当前页面(Servlet)的对象 this
    out JspWriter 输出对象,数据输出到页面上
    config ServletConfig Servlet的配置对象
    exception Throwable 异常对象

注意事项:

JSP的out输出和response.getWriter输出的异同

相同点:response表示响应,用于给客户端(浏览器)返回内容 out同样也是用于给客户端(浏览器)输出内

不同点: out输出先进入缓冲区再进入response,而response.getWriter输出,直接进入response缓冲区所以response的输入一定在out输出之前

5.四大域

page范围:只在一个页面保留数据(javax.servlet.jsp.PageContext(抽象类))

request范围:只在一个请求中保存数据(javax.servlet.httpServletRequest)

Session范围:在一次会话中保存数据,仅供单个用户使用(javax.servlet.http.HttpSession)

Application范围:在整个服务器中保存数据,全部用户共享(javax.servlet.ServletContext)

MVC:开发模式

  1. jsp演变历史

  2. 早期只有servlet,只能使用response输出标签数据,非常麻烦

  3. 后来又jsp,简化了Servlet的开发,如果过度使用jsp,在jsp中即写大量的java代码,有写html表,造成难于维护,难于分工协作

  4. 再后来,java的web开发,借鉴mvc开发模式,使得程序的设计更加合理性

  5. MVC:

  6. M:Model,模型。JavaBean

* 完成具体的业务操作,如:查询数据库,封装对象
  1. V:View,视图。JSP
* 展示数据
  1. C:Controller,控制器。Servlet
* 获取用户的输入
* 调用模型
* 将数据交给视图进行展示

EL表达式

1.EL表达式概念
  • Expression Language表达式语言
  • 是一种在JSP页面获取数据的简单方式(只能获取数据,不能设置数据)
  • 在JSP2.0开始引入概念

他的引入是为了取代JSP中的java代码

2.EL获取数据(从四大域中获取属性)
  • EL只能从四大域中获取属性

    下面是对于域的一个简单练习

<%@ page import="java.util.*" %><%--
  Created by IntelliJ IDEA.
  User: 86157
  Date: 2021/11/19
  Time: 16:47
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>el获取域中的数据</title>
</head>
<body>
    <%
        //在域中存储对象
        request.setAttribute("name","张三");
        session.setAttribute("name","李四");
        session.setAttribute("age","23");
        List list = new ArrayList();
        list.add("aaa");
        list.add("bbb");
        Map map = new HashMap();
        map.put("a","A");
        map.put("b","B");
        request.setAttribute("map",map);
        request.setAttribute("list",list);
    %>
<h3>el获取值</h3>
${requestScope.name}
${sessionScope.age}
<%--${sessionScope.age2}--%>
${name}
${list}
${list[1]}
${list[3]}
${map}
${map.a}
${map.["a"]}
<%=list%>
</body>
</html>

EL不仅能获取获取值还能获取对象

<body>
<%
  User user = new User("岚岚",21,new Date());
  request.setAttribute("u",user);
%>
<h3>el获取对象中的值</h3>
${requestScope.u}
<%--通过的是对象的属性来获取--%>
${u.name}
${u.age}
${u.date}<br>
${u.date1}
</body>

还可以通过page获取虚拟目录

<body>
    ${pageContext.request}<br>
    <h4>动态获取虚拟目录</h4>
    ${pageContext.request.contextPath}
</body>

JSTL

既然我们刚刚说到有MCV模式,EL是获取值的那么代码的执行又靠谁呢,于是就有了JSTP这样的JSP标准标签库

是由Apache组织提供的开源的免费的jsp标签 <标签>

1. 作用

​ 用于简化和替换jsp页面上的java代码

2.使用
if语句

​ c:if 必须属性,test,接收一个boolean表达式 如果为true,则显示标签体的内容如果为false,则不显示

<body>
<%--
    c:if
        必须属性,test,接收一个boolean表达式
        如果为true,则显示标签体的内容
        如果为false,则不显示
--%>
    <c:if test="true">
        <h1>我是真</h1>
    </c:if>
    <br>
<%--判断request'域中的一个list集合是否为空,如果不为空则显示遍历集合--%>
<%
    List list = new ArrayList();
    list.add("aaa");
    request.setAttribute("list",list);
    request.setAttribute("number",3);
%>
<c:if test="${not empty list}">
<%--遍历一些集合--%>
</c:if>
<c:if test="${number %2 != 0}">
    ${number}为奇数
</c:if>
</body>
switch语句
<body>
<%--完成数字编号对呀星期几--%>

<%
    request.setAttribute("number",51);
%>
<c:choose>
    <c:when test="${number == 1}">星期1</c:when>
    <c:when test="${number == 2}">星期2</c:when>
    <c:when test="${number == 3}">星期3</c:when>
    <c:when test="${number == 4}">星期4</c:when>
    <c:when test="${number == 5}">星期5</c:when>
    <c:when test="${number == 6}">星期6</c:when>
    <c:when test="${number == 7}">星期7</c:when>
    <c:otherwise>数字输入有误</c:otherwise>
</c:choose>
</body>
for语句
<body>
<c:forEach begin="2" end="10" var="i" step="1" varStatus="s">
    ${i} |${s.index} |${s.count} <br>
</c:forEach>
<hr>
<%
    List list = new ArrayList();
    list.add("a");
    list.add("b");
    list.add("c");
    request.setAttribute("list",list);
%>
<c:forEach items="${list}" var="str" varStatus="s">
    ${s.index}${s.count}${str}
</c:forEach>
</body>
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐