jsp

02.jsp介绍与体验【应用】
问题
out.write("<div>欢迎"+loginUser.getUsername()+"用户,<a href='LoginOutServlet'>注销</a></div>");

上面的代码写java有智能提示,但是html代码完全没有,有没有解决方案呢?

答:jsp就可以解决

目标

理解jsp的介绍

jsp介绍

jsp全称Java server Pages , java的服务页面. 既可以写java代码又可以写html等前端代码,都有智能提示,开发效率高。

[外链图片转存失败(img-BBfjCbkx-1566373791732)(assets/)]

jsp开发处体验
需求

页面上打印服务器系统时间

效果

[外链图片转存失败(img-9gCVjC57-1566373791733)(assets/)]

代码

[外链图片转存失败(img-gEw8YaT5-1566373791733)(assets/)] 

<%@ page import="java.text.SimpleDateFormat" %>
<%@ page import="java.util.Date" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h2>系统服务器时间:
<!--java代码-->
    <%
        //获取系统时间
        String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
        //使用jsp的字符输出流输出时间
        out.write(time);
    %>
</h2>
</body>
</html>

访问地址
http://localhost:8080/day28_jsp_el_jstl_war_exploded/jsp/01_demo.jsp
小结
  • jsp开发特点?

    写前端代码和后端代码都可以智能提示
    
03.jsp运行原理【理解】
目标

掌握jsp运行原理

疑问1:jsp为什么可以写java代码又可以写html代码,不是只有.java文件才可以写java代码吗?

答:服务器会将jsp文件翻译生成.java文件并编译成.class文件

[外链图片转存失败(img-de3mfuYi-1566373791734)(assets/1566264888610.png)]

疑问2:访问jsp可以直接返回动态资源数据,说明jsp可以处理请求与响应,这是为什么?

答:jsp生成的java代码就是HttpServlet的子类

[外链图片转存失败(img-OpGYnmp1-1566373791734)(assets/)]

[外链图片转存失败(img-wlsaQZBn-1566373791734)(assets/)]

[外链图片转存失败(img-w7ch8MeZ-1566373791735)(assets/)]

jsp本质就是servlet

运行原理

[外链图片转存失败(img-LhGKNfNh-1566373791735)(assets/)]

小结
  • jsp什么时候翻译生成java文件?

    默认第一次访问的时候
    
  • 服务器会每次都翻译jsp生成java文件吗?

    不会,只有jsp文件被修改了才会在访问的时候将其翻译生成java文件
    
  • jsp运行原理?

    jsp--》翻译成java文件--》编译class文件  走servlet的生命周期
    
04.jsp基本语法1-注释【应用】
目标

掌握jsp注释的使用

注释语法
注释类型格式
html注释
jsp注释<%-- 注释内容 --%>
Html注释特点
1.网页查看源代码,注释内容可以看到
2.html注释只能注释html代码
JSP注释特点【在jsp页面推荐使用jsp注释】
1.网页查看源代码,注释内容看不到,这个更加安全
2.jsp注释可以注释所有代码(前端+后端)
实现代码

[外链图片转存失败(img-QsREhcx4-1566373791735)(assets/)] 

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
        <h2>html注释</h2>
        <!--html注释内容  不能注释java代码:<% out.write("hello"); %>-->
        <h2>jsp注释</h2>
        <%--使用快捷键Ctrl+Shift+/自动生成jsp注释, 可以注释java代码:<% out.write("hello"); %>--%>
</body>
</html>

运行效果,查看网页源代码

view-source:http://localhost:8080/day28_jsp_el_jstl_war_exploded/jsp/02_demo.jsp

[外链图片转存失败(img-g8iMr8xa-1566373791736)(assets/)]

网页效果

http://localhost:8080/day28_jsp_el_jstl_war_exploded/jsp/02_demo.jsp

[外链图片转存失败(img-a11AqU5O-1566373791737)(assets/)]

小结

jsp注释格式

<%--注释内容--%>
05.jsp基本语法2-写java代码的3种方式【应用】
目标

掌握在jsp上编写java代码的多种方式

脚本代码3种方式

java脚本代码片段
java脚本表达式
java脚本声明

脚本语法

java脚本代码片段

[外链图片转存失败(img-xHvqGuxL-1566373791737)(assets/)]

代码片段生成的位置:翻译成java文件在service处理请求方法内部

java脚本表达式

[外链图片转存失败(img-gQgvoeCK-1566373791737)(assets/)]

代码片段生成的位置:翻译成java文件在service处理请求方法内部

jsp脚本声明

[外链图片转存失败(img-IGZdAPQe-1566373791738)(assets/)]

代码片段生成的位置:翻译成java文件在service处理请求方法外部

讲解

代码位置

[外链图片转存失败(img-8YCha183-1566373791738)(assets/] 

实现代码

<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h2>代码片段</h2>
<%
    int number = 100;
    out.print(number);//输出字符串使用write方法,其他类型输出用print方法
%>

<%--目标:定义一个List集合存储用户列表数据,使用table表格布局显示数据--%>
<%
    //定义用户列表List集合
    List<String> userList = new ArrayList<>();
    //存储数据
    userList.add("小黑");
    userList.add("隔壁老王");
    userList.add("传智");
%>
<%--使用表格布局userList数据显示
    border-collapse: collapse; 将表格的边框线与单元格的边框线合成一条
--%>
<table border="1" width="50%" align="center" style="border-collapse: collapse;">
    <tr>
        <th>序号</th>
        <th>用户名称</th>
    </tr>
    <%--使用循环遍历userList集合显示数据--%>
    <%
        for (int i = 0; i < userList.size(); i++) {
     %>
    <tr>
        <td><% out.print(i+1); %></td>
        <td><% out.write(userList.get(i)); %></td>
    </tr>
    <%
        }
    %>
</table>

<h2>表达式</h2>

<%
    int number2 = 100;
%>
<%=number2  %>

<%--目标:定义一个List集合存储用户列表数据,使用table表格布局显示数据--%>


<table border="1" width="50%" align="center" style="border-collapse: collapse;">
    <tr>
        <th>序号</th>
        <th>用户名称</th>
    </tr>
    <%--使用循环遍历userList集合显示数据--%>
    <%
        for (int i = 0; i < userList.size(); i++) {
    %>
    <tr>
        <td><%=i+1 %></td>
        <td><%=userList.get(i) %></td>
    </tr>
    <%
        }
    %>
</table>

<h2>声明</h2>

<%--目标:声明一个求和的全局方法--%>
<%!
    //求和方法
    private int sum(int a,int b){
        return a+b;
    }
%>
<%--使用表达式调用方法输出返回值--%>
<p>1+3=<%=sum(1,3)%></p>
</body>
</html>

脚本声明在servlet里面生成的源码

[外链图片转存失败(img-so83SLoI-1566373791740)(assets/)]

运行效果

方法地址

http://localhost:8080/day28_jsp_el_jstl_war_exploded/jsp/03_demo.jsp

运行效果

[外链图片转存失败(img-27lSHFZX-1566373791741)(assets/)]

小结

[外链图片转存失败(img-FkHhoEN4-1566373791744)(assets/)]

06.jsp基本语法3-三大指令之page【应用】
目标

掌握jsp的page指令

三大指令
page:页面指令
taglib:标签库指令
include:包含另一个页面指令
指令格式

[外链图片转存失败(img-zSINtxWk-1566373791745)(../%E7%AC%94%E8%AE%B0/assets/)]

page指令作用

page 是 jsp 中必须使用的一个指令,用于设置 JSP 上各种页面的属性,告诉 tomcat 如何将一个
JSP 翻译成 Servlet

page指令位置

可以放在 JSP 中任何位置,一般建议放在页面的最顶部

page指令语法
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
page指令属性1—导包的属性

language=“java” 当前页面使用的语言,不写默认是 java
import=“java.util.*” 导入 java.util 下所有类,导包

  1. 方式一:每个 page 指令导入一个类
<%@page import="java.text.SimpleDateFormat"%>
<%@page import="java.util.Date"%>
  1. 方式二:一个 page 指令的 import 属性导入所有的包,包之间使用逗号分隔
<%@page import="java.util.Date,java.text.SimpleDateFormat"%>
page指令属性2—与编码相关的属性

contentType=“text/html; charset=utf-8” 或 pageEncoding=“UTF-8” 2个功能一样

相当于 response.setContentType(“text/html; charset=utf-8”);这句话,,每个jsp默认解决了输出乱码

page指令属性3—与错误相关的属性,友好页面设置
errorPage=“错误页面的 URL”

用于指定如果当前页面出错,转发到哪个页面去

<%@ page language="java" pageEncoding="utf-8" errorPage="error.jsp"%>
isErrorPage=“false”

当前这个页面是否是一个错误页面,如果为true是错误页面,这个页面可以多使用一个exception对象。可以打印错误消息到控制台让开发人员解决

<%@ page pageEncoding="UTF-8" isErrorPage="true"%>
错误信息的跳转方式1—errorPage=“error.jsp”

如果页面出错,转发到 error.jsp 这个页面

案例需求

创建一个info.jsp页面编写模拟异常代码,浏览器访问自动跳转到error.jsp页面显示友好信息,
error.jsp页面控制台打印异常信息让开发人员解决

实现代码

[外链图片转存失败(img-rwqZfeXd-1566373791745)(assets/)] 

info.jsp代码

<%@ page contentType="text/html;charset=UTF-8" language="java" errorPage="error.jsp" %>
<%--errorPage="error.jsp": 当前页面发生错误自动会转发跳转到error.jsp友好错误页面--%>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%--模拟异常代码--%>
<%
    int a=1/0;
%>
</body>
</html>

error.jsp代码

<%@ page contentType="text/html;charset=UTF-8" language="java" isErrorPage="true" %>
<%--isErrorPage="true":含义是可以使用exception对象打印异常消息到控制台或日志文件,
                       目的是让开发人员发现错误,从而解决错误--%>
<%
    exception.printStackTrace();//打印到控制台
%>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h2>您好,服务器正在忙,请明天再来。。。</h2>
</body>
</html>

访问地址

http://localhost:8080/day28_jsp_el_jstl_war_exploded/jsp/04_error/info.jsp

运行效果

[外链图片转存失败(img-E9keWyCI-1566373791745)(assets/)]

错误信息的跳转方式2—配置文件 web.xml指定错误码【推荐方式】

**优势:**xml统一配置,代替每个jsp页面page指令设置errorPage

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <!-- xml统一配置指定错误页面 -->
    <error-page>
        <!-- 指定错误码 -->
        <error-code>404</error-code>
        <!-- 出错以后跳转到哪个页面 -->
        <location>/error/404.jsp</location>
    </error-page>
    <!-- 指定错误页面 -->
    <error-page>
        <!-- 指定错误码 -->
        <error-code>500</error-code>
        <!-- 出错以后跳转到哪个页面 -->
        <location>/error/500.jsp</location>
    </error-page>
</web-app>
案例需求【重点】

配置网站统一的错误页面,在xml中配置

代码结构

[外链图片转存失败(img-jFpVoIG6-1566373791746)(assets/)] 

404.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h2>您访问的资源走丢了,可以返回首页继续浏览</h2>
<a href="http://www.itcast.cn">首页</a>
</body>
</html>

500.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" isErrorPage="true" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h2>您好,服务器正在忙,请明天再来。。。</h2>
<a href="http://www.itcast.cn">首页</a>
<%
    exception.printStackTrace();  //目的错误让开发人员解决
%>
</body>
</html>

访问运行

[外链图片转存失败(img-Jr8JP157-1566373791746)(assets/)]

[外链图片转存失败(img-Z7OhdyNH-1566373791747)(assets/)]

错误信息的跳转方式3—指定错误的类型配置 web.xml
<!-- 指定错误的类型 -->
<error-page>
    <exception-type>java.lang.NullPointerException</exception-type>
    <location>/none.jsp</location>
</error-page>

不推荐使用,以为你不可能针对所有系统异常配置,非常麻烦

page指令小结

[外链图片转存失败(img-hOfY8w5Y-1566373791747)(assets/)]

07.jsp基本语法4-三大指令之taglib和include【应用】
目标

掌握jsp三大指令之taglib和include

三大指令2—taglib
作用

用于导入标签库,在页面上使用

格式

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
三大指令2—include
作用

在一个 JSP 页面中静态包含另一个 JSP

语法

[外链图片转存失败(img-G6OcONus-1566373791747)(assets/1566229642921.png)]

案例需求

创建A.jsp静态页面包含B.jsp页面

实现代码

[外链图片转存失败(img-38FfAAI5-1566373791748)(assets/)] 

A.jsp页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<h2>我是A页面</h2>
<%--静态包含B.jsp页面--%>
<%@include file="B.jsp"%>

B.jsp页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<h2>我是B页面</h2>
运行效果

访问地址

http://localhost:8080/day28_jsp_el_jstl_war_exploded/jsp/05_include/A.jsp

效果

[外链图片转存失败(img-pbL6QFtk-1566373791748)(assets/)]

案例需求

一个 index.jsp 和 login.jsp 包含另一个 head.jsp,参考原型

素材

[外链图片转存失败(img-v85MqjS3-1566373791748)(assets/)]

index.jsp单独页面效果

[外链图片转存失败(img-IrjjwJKT-1566373791749)(assets/)]

index.jsp包含header.jsp页面效果

[外链图片转存失败(img-CRMnn4SX-1566373791749)(assets/)]

实现代码

[外链图片转存失败(img-DYdb58sw-1566373791749)(assets/)] 

index.jsp代码与login.jsp页面都加入如下代码

[外链图片转存失败(img-r3WqmJ3R-1566373791749)(assets/)]

访问地址
http://localhost:8080/day28_jsp_el_jstl_war_exploded/jsp/06_demo/index.jsp
08.jsp基本语法5-jsp的动作标签【应用】
目标

掌握jsp动作标签:include,forward,param

动作标签有3个

[外链图片转存失败(img-tXWZElOB-1566373791750)(assets/)]

动作标签1—include
作用

用于一个 JSP 页面动态包含另一个 JSP 页面

语法

[外链图片转存失败(img-Dqv4CzgW-1566373791750)(assets/)]

include动作与include指令区别

[外链图片转存失败(img-oxImJyVK-1566373791751)(assets/)]

案例需求

创建A.jsp页面包含B.jsp页面

实现代码

[外链图片转存失败(img-uKBIslKE-1566373791751)(assets/)] 

A.jsp页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<h2>我是A页面</h2>
<%--动态包含B.jsp页面--%>
<jsp:include page="B.jsp"></jsp:include>
<%
    int a=0;  //动态包含,可以定义与包含页面同名变量
%>

B.jsp页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<h2>我是B页面</h2>
<%
    int a = 0;
%>
运行效果

访问地址

http://localhost:8080/day28_jsp_el_jstl_war_exploded/jsp/07_demo/A.jsp

效果

[外链图片转存失败(img-fvy3oWdv-1566373791752)(assets/)]

动作标签2—forward
介绍

用于页面的转发,与request.getRequestDispatcher("/URL").foward(request,response);

语法

[外链图片转存失败(img-dkHMQyER-1566373791753)(assets/)]

案例需求

创建one.jsp和two.jsp,实现访问当前one.jsp使用forward动作标签转发跳转另一个页面

实现代码

代码位置

[外链图片转存失败(img-kcjbwgNq-1566373791753)(assets/)] 

one.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--转发跳转到two.jsp页面--%>
<jsp:forward page="two.jsp"></jsp:forward>

two.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<h2>我是two.jsp页面</h2>
运行效果

访问地址

http://localhost:8080/day28_jsp_el_jstl_war_exploded/jsp/08_demo/one.jsp

效果

[外链图片转存失败(img-CaLGkB3R-1566373791753)(assets/)]

动作标签3—param
介绍

用于页面的转发跳转的时候传递参数数据,经常与<jsp:forward>配合使用

语法
<jsp:param name="参数名" value="参数值"/>
案例需求

创建one.jsp和two.jsp,实现访问当前one.jsp使用forward动作标签转发跳转另一个页面并传递参数数据

实现代码

代码位置

[外链图片转存失败(img-lXxRn6Ve-1566373791754)(assets/)] 

one.jsp跳转

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--转发跳转到two.jsp页面--%>
<jsp:forward page="two.jsp">
    <jsp:param name="name" value="admin"/>
    <jsp:param name="password" value="123456"/>
</jsp:forward>

two.jsp获取数据

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<h2>我是two.jsp页面</h2>
<%--接收传递过来的2个参数--%>
<p>name=<%=request.getParameter("name")%></p>
<p>password=<%=request.getParameter("password")%></p>
运行效果

访问地址

http://localhost:8080/day28_jsp_el_jstl_war_exploded/jsp/09_demo/one.jsp

效果

[外链图片转存失败(img-06PcUdZG-1566373791754)(assets/)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值