1.课程介绍

  1. Servlet三大职责; (掌握)
  2. Servlet重定向和请求转发; (掌握)
  3. JSP介绍; (了解)
  4. JSP语法; (掌握)
  5. JSP三大指令; (掌握))
  6. JSP九大内置对象; (了解)
  7. 四大作用域对象; (掌握))
  8. JSP动作元素; (了解)

2.Servlet交互

2.1.Servlet的三大职责

1.接收请求参数(封装)- BeanUtil类底层是反射和内省机制 ;
2.调用业务方法处理业务(去调用service业务层);
3.响应请求(跳转页面或其他Servlet);

2.2.为什么需要共享信息与页面跳转

1.为什么需要跳转和数据共享?
  跳转:需要做责任分离(Servlet擅长写代码即处理业务逻辑,jsp擅长展示页面);
  共享:Http是无状态的,我们跳转的时候数据无法传递,因此需要做数据共享;
2.页面跳转可以怎么跳?
  Servlet跳转其它资源(jsp,html);
  Serlvet跳转其他Servlet(一般来说: 最后都会跳转到页面);
3.学习跳转的方式?
  请求转发;
  重定向;

2.3.请求转发Forward

示例:创建两个Servlet,分别是AServlet与BServlet,然后我访问AServlet,从AServlet跳转到BServlet;(分别使用转发和重定向实现);
转发的方式:req.getRequestDispatcher(“路径”).forward(request, response);
注意:千万不要忘了forward;
代码:

转发特点:
(1)转发地址不会变化:

(2)发送了一次请求(可以共享同一个请求对象 - 可以发请求的时候手动加一个参数)

注:请求的数据是相同的(request)

(3)请求的顺序,最后一个response才起作用:

注1:在AServlet 里面跳转之后,resp.getWriter().println(“我要显示一个东西出来”);
不会显示在页面上,因为这个resp 不会转发之后,在回AServlet里面来;

注2:最后一个reponse起作用:

(4)Forward不可以跨域访问:

(5)可以访问到 WEB-INF中的资源:
注1:不能直接通过/locolhost/WEB-INF/haha.html进行访问:

注2:可以通过转发访问到WEB-INF里面的内容:

2.4.重定向Redirect

重定向跳转的方式:resp.sendRedirect(“路径”);//直接跳转
重定向特点:
(1)地址会发生变化:

(2)两次请求(不同共享同一个request对象):

①请求的顺序,显示的依然是最后一个:


(3)可以跨域访问:

(4)不能访问到WEB-INF下面的内容:

2.5.面试题

有关重定向(redirect)和转发(forword)的面试题:
1.请分别说出Forword与Redirect的特点和区别?
Forword:1次请求,可以共享同一组request和response,地址栏不会变化,不能到外部应用
Redirect:多次请求,不可以共享同一组request和response,地址栏会变化,可以到外部
2.我们在什么情况下使用哪一种跳转?
(1)如果我们需要做请求的数据共享,使用forward
(2)如果我们需要访问WEB-INF里面只有使用forward
(3)如果我们要跨域访问(访问外部程序),必须使用Redirect

3.JSP

3.1.JSP的简介

1.为了将Servlet中用于表现的部分分离出来,Java使用JSP实现;
2.JSP(java server page):java服务器端(动态)网页,JSP就是Java中用来做动态网页的技术;
3.既然是页面,对于前端代码编写人员来说,可以当成html页面来进行渲染工作;
4.JSP底层就是一个Servlet,在执行的时候先转成Servlet然后同样要经历Servlet的生命周期;
5.如果想把页面做好看一些,怎么做?很明显Servlet是不行的,所以需要用到JSP(看上去就跟HTML页面差不多),Servlet主要是处理业务为主(Java后台代码),JSP主要以表现为主(HTML,CSS,JS等前端代码);
6.Servlet更擅长逻辑的编写,Jsp更擅长于数据的显示,以后我们开发会慢慢达到一个目标,servlet里面不要写HTML代码,jsp里面不要写java代码;
7.学习JSP,首先创建一个JSP出来?

注意:
1.如果没有导入jsp的jar包,页面会报错,但是不影响运行(tomcat – lib – jsp.ar);
2.不能直接拖到浏览器上面运行,它只能在服务器上面(JSP是服务器端页面)使用,服务器对它作了编译的。如下图直接运行时显示的是源码,并不是页面效果:

3.2.JSP原理分析
引入:Jsp页面上面的代码怎么运行之后,就变成右边的时间呢?

1.当我们访问hello.jsp --> 会去找到[conf目录]web.xml里面*.jsp,在会找到JspServlet,如下图:

2.生成后的jsp文件在apache-tomcat-7.0.57\work\Catalina文件夹下面,如下图:

3.在hello_jsp.java文件里面的_jspService方法里面出现的:

过程:

3.3.JSP中Java代码语法

3.3.1.JSP页面上面注释

JSP注释:<%–这是注释–%> 在jsp翻译成Servlet的时候这个注释就没有了,源代码看不到;
HTML注释:我们还可以用html的注释(),在页面上看源代码可以看到:

3.3.2.JSP中的JAVA代码

1.JSP表达式:
语法:<%=表达式%>(实际上就是调用输出流打印到页面上 out.print(表达式))
作用:输出数据到页面上;
例子:<%=new java.util.Date().toLocaleString() %>
转化成Java代码:转换到自动生成Servlet的_jspService方法中;

2.JSP小脚本:
语法:
<%
Java语句1;
Java语句2;
%>
作用:编写Java逻辑代码;
转化成Java代码:转换到自动生成Servlet的_jspService方法中;

注:在JSP里面写Java代码很恶心:如下

3.JSP申明:
语法:
<%!
Java代码
%>
作用:定义成员;
转化成Java代码:转换成自动生成的Servlet类中的成员;

3.4.JSP三大指令

1.page:页面指令;
2.include:包含指令;
3.taglib:标签指令(JSTL); 引入标签库

3.4.1.page指令

格式:
<%@page language=“java” contentType=“text/html; charset=UTF-8” pageEncoding=“UTF-8” … >
属性:
language=“java”:语言只有java,意义不大
contentType=“text/html; charset=UTF-8”:输出的页面类型,相当于在Servlet里面写:
resp.setContentType(“text/html;charset=utf-8”)

pageEncoding=“UTF-8”

其他的属性:

errorPage="/myerror.jsp" :如果当前页面出错,就跳转到对应的页面
hello.jsp指定errorPage="/myerror.jsp"

isErrorPage=“true”:这个页面是否是错误页面(当我们要在页面上直接使用exception的时候就可以加上它)

结果跳转:

注意:在web.xml里面也可以配置错误页面:

3.4.2.include指令

1.当每个页面都有导航的时候,我们只需要使用一个,这个时候就可以使用包含指令:

a.jsp

b.jsp

结果:

注:一般被包含的jsp文件我们会取名为 jspf(jsp片断)

3.5.JSP九大内置对象

引入:在jsp页面里面,可以直接使用request和session,为什么可以直接使用?
原因:这里request和session 就是别人已经帮我们定义好的对象,这些对象叫内置对象。JSP中有9个内置对象中,这些对象我们直接拿到使用就是,不需要去创建,但是对象的名称不能写错;
原理:JSP内置对象的实质,要么是_jspService()方法的形参,要么是在_jspService()方法的局部变量,所以JSP脚本或者表达式中直接调用这些对象,无需创建它们;

注意:如果没有找到exception 需要在页面设置isErrorPage="true"才出来

内置对象使用:


3.6.四大作用域对象

引入:我们在做数据共享的时候,会把数据放到不同的地方。这个不同的地方就是放到不同的作用域里面,作用域对象有4个;

pageContext:每次访问的时候创建,可以有多个【每个jsp页面都会创建】;
request:每次请求的时候创建,可以有多个【每次请求都会创建】;
session:每次会话的时候创建,不同人打开不同的浏览器,就创建多个,可以有个多个;
application:整个应用有且只有一个对象,tomcat启动的创建,关闭的时候销毁;

我们需要学习 怎么把数据放到作用域里面?
怎么从作用域中拿到共享后的数据?
怎么从作用域中删除数据?
怎么修改作用域里面的数据? – 重新放一次
注意:
1.JSP四大作用域对象属于9大内置对象里面的,用来共享或传递数据的;
2.Servlet中同样有这四个作用域对象,不过不是内置的,使用之前必须先创建;

3.6.1.作用域对象的操作

在service方法中如何拿到相应的作用域对象:

3.6.1.1.作用域对象中添加修改数据

语法:作用域对象.setAttribute(key,value);
注意:如果是修改(就设置一个相同的key)

3.6.1.2.作用域对象中获取数据

作用域对象.getAttribute(key);

3.6.1.3.删除作用域中的数据

语法:作用域对象.removeAttribute(“key”);

3.6.1.4.不能跨域获取值

1.作用域有大小,存在哪个作用域对象里,就需要在哪个作用域对象中去取得。即不能跨域获取值:

3.6.2.ServletContext对象的介绍

1.ServletContext 表示上下文对象的类型,也是JSP内置对象application的类型。那怎么去得到ServletContext对象呢?

3.6.2.1.得到ServletContext的方式

1.它们拿到的对象都是同一个对象,那我们选择哪种方式呢?
(1)第①中或第②种通过super获取;
(2)第③种更简单,不兼容低版本,不兼容tomcat7以前的版本;
(3)第④种麻烦一点,兼容性好;

3.6.2.2.ServletContext的常用方法

1.ServletContext对象已经拿到,那怎么使用它呢?主要看里面的一些方法:

getContextPath(); – 拿到上下文路径
getRealPath("/"); – 拿到真实路径(以后做上传下载可以使用)
getInitParameter(“encoding”); – 拿到初始化参数(只能拿到全局里面的参数信息)

2.代码如下:

3.与之前获取Servlet初始化参数对比:
(1)以前取到servlet里面配置的参数信息通过super.getServletConfig().getInitParameter(“encoding”)拿到


(2)现在web.xml配置全局的信息,通过app1.getInitParameter(“encoding”) 拿到:

注意:app1.getInitParameter(“encoding”); 只能拿到context-param里面配置,不能拿到Servlet里面配置的参数;

3.7.JSP动作元素

3.7.1.包含元素jsp:include

1.在JSP动作元素中,我们只了解 jsp:include这个动作元素:

注1:我们要用 jsp:include 来做包含页面的功能:

注2:使用jsp:include这个的时候,就不能再使用片段;

3.7.2.动态包含与静态包含的区别

1.动态包含指的是标签jsp:include,静态包含指的是指令include,它们包含的时机不同:
(1)静态包含先把页面包含进来,再翻译成java代码(只有一个文件);
(2)动态包含先都编译成java代码,再将内容进行包含(有多个文件);
2.什么时候用动态包含,什么时候用静态包含?
(1)如果包含的是静态页面(html),那么使用静态包含;
(2)如果包含的是动态网页(jsp),那么使用动态包含;
注:编译的文件(\apache-tomcat-7.0.57\work\Catalina\路径下面)
静态包含:<%@ include file="/include/b.jsp" %>

动态包含:<jsp:include page="/include2/b.jsp"></jsp:include>

4.课程总结

4.1.重点

1.转发forward和重定向redirect;
2.掌握四大作用域对象的创建,使用;
3.JSP的语法(Jsp中java代码的编写);
4.JSP三大指令,九大内置对象,四大作用域对象(面试题);

(1)JSP三大指令:page,include,tablib
(2)九大内置对象:request,response,out,pageContext,session,application,page,config,exception
(3)四大作用域对象:pageContext,request,session,application

4.2.难点

1.重定向和转发的区别;

(1)转发:一次请求,地址栏不会变化,request的数据可以共享,只能访问当前应用
(2)重定向:多次请求,地址栏会变化,request的数据不能共享,可以访问当前应用

2.九大内置对象,四大作用域对象不好记;

4.3.如何掌握

1.课上认真听课;
2.完成课后练习;
3.抓住课程重点;
4.JSP原理:查看 java文件解决;

4.4.排错技巧

1.通过异常和错误找出问题,分析问题,解决问题;
2.分析自己的逻辑是否出现问题;

5.常见问题

6.课后练习

1.课堂代码1-2遍;
2.完成一个网页计算器,图示: (预计30分钟完成)

思路:
(1)点击=按钮(提交按钮)将前面三个文本框的内容提交到Servlet;
(2)在Servlet中获取这三个参数,判断是什么操作(+,-,*,/);
(3)计算结果,然后绑定回页面(使用转发),显示在显示结果的文本框中;

7.面试题

1.JSP与Servlet区别? (预计5分钟完成)
(1)JSP底层就是一个Servlet;
(2)JSP注重数据的展示,Servlet注重业务逻辑的处理;
2.重定向redirect和转发forward区别是什么? (预计10分钟完成)
3.JSP九大内置对象有哪些? (预计5分钟完成)
4.动态包含和静态包含的区别? (预计10分钟完成)
5.page指令中errorPage与isErrorPage的区别? (预计5分钟完成)

8.扩展知识或者课外阅读推荐(可选)

8.1.扩展知识
8.2.课外阅读

javaweb实训第三天下午——Web基础-Servlet交互JSP原理及运用相关推荐

  1. javaweb实训第五天下午——SpringMVC基础

    SpringMVC基础 1.课程介绍 2.SpringMVC概述 3.SpringMVC入门 3.1.入门需知 3.1.1.Jar包管理 3.1.2.核心控制器(前端控制器) 3.2.加入相关Spri ...

  2. javaweb实训第三天上午——Servlet

    文章目录 Servlet基础 1.Servlet基础 1.1.什么是Servlet 1.2.如何开发一个Servlet 1.3.Servlet执行流程 1.4.Servlet生命周期 1.5.Serv ...

  3. javaweb实训第五天下午——xml配置文件约束报错问题

    spring框架中xml配置文件约束报错问题 问题描述: 问题描述: 如果电脑连不上网,或者网速不好可能会造成Spring框架中xml配置文件出现错误.但是这个错误不影响项目的运行的: <bea ...

  4. javaweb实训第五天上午——Spring基础

    Spring基础 1.课程介绍 2.为什么需要Spring 3.初识Spring 3.1.什么是Spring 3.2.Spring框架的好处 3.3.Spring框架的模块化 4.Spring入门 4 ...

  5. javaweb实训第四天上午——MySQL基础

    目录 1 课程介绍 2 数据库概述 2.1 数据库概念 2.2 数据库的由来和发展 2.3 常见的==关系型数据==库服务器(DBMS) 2.4 SQL概述 2.5 表的概念(table) 3 数据库 ...

  6. java web开发实训心得,【JavaWeb实训心得体会材料】

    JavaWeb实训心得体会材料 <JavaWeb实训心得体会材料.doc>由会员分享,可免费在线阅读全文,更多与<JavaWeb实训心得体会材料>相关文档资源请在帮帮文库(ww ...

  7. [JavaWeb实训Day4]__jsoup爬虫(爬新闻页面)词云的生成( kumo库)

    目录 一.本次实验分析过程 二.Jee连接MySQL数据库 三.异步传值及界面设计 四.jsoup爬虫爬取新闻网页 五.新闻词云的生成( kumo库) 六.存入数据库 快速链接:[JavaWeb项目实 ...

  8. JavaWeb实训项目:基于SSM框架的CRM客户关系管理系统(文章最后有源码)

    JavaWeb实训项目:基于SSM框架的CRM客户关系管理系统(附部分源码) 一.项目背景 项目演示 二.项目介绍 三.涉及技术 总结 源码地址 一.项目背景 "世上本来没有CRM,大家的生 ...

  9. 山东大学软件学院项目实训-创新实训-SDUMeeting(三)

    山东大学软件学院项目实训-创新实训-SDUMeeting(三) 山大会议项目web安全之文件注入防护 一.前言 山大会议的客户端加入了对用户自定义头像的支持,需要用户自行上传头像图片,这个过程存在文件 ...

最新文章

  1. [UI自动化]:控制浏览器操作
  2. python 科学计算基础教程电子版-终于领会python科学计算入门教程
  3. 使用screen -r时提示“There is no screen to be resumed matching xxx”的解决办法
  4. 【100亿次的挑战】之春晚控制后台故事分享
  5. SQL 窗口函数的优化和执行
  6. 图神经网络GNN论文2019-2020顶会列表
  7. mm和mmm编译说明
  8. 第二章:上下文无关文法
  9. 打印机连接计算机用什么端口,如何设置打印机端口,打印机端口设置的方法步骤...
  10. SQL Server 函数汉字转首字母或全拼
  11. 基带混用导致信号弱?iPhone网络差的原因及修复,望周知
  12. Linux下移动硬盘,创建windows,ntfs分区并挂载
  13. C语言中fseek函数
  14. 工地反光衣识别检测系统 YOLOv7
  15. 大厂面试系列(七):数据结构与算法等
  16. QT读取位置时发生访问冲突
  17. 如何破解SQLyog 企业版,无限期试用
  18. 一行代码解决问题gpedit.msc组策略找不到的问题,太好用了
  19. 滇西应用技术大学有没有计算机专业,科普滇西应用技术大学在哪以及滇西应用技术大学有哪些好专业...
  20. 论文解析:变分自编码器

热门文章

  1. 中国酒精拭子市场趋势报告、技术动态创新及市场预测
  2. 中国卡曼涡气流传感器行业市场供需与战略研究报告
  3. html和css的缺点,个人缺点20个
  4. windows10常用快捷键
  5. bootstrap表格插件php,深入了解Bootstrap table表格插件(一)
  6. 标准IO库fgets和fputs对一个文本文件的读写操作
  7. “攀哥”离场 不掩融云组最强战舰技术顶流如云
  8. 作为 Web 开发人员我踩过哪些技术的坑?
  9. 区块链生态系统将崩溃、Rust 超越 Go、无服务器成主导,这十大计算机预测将成真?...
  10. 两年盗取 1000 万美元的 Xbox 礼品卡,这个人竟然是“内鬼”!