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

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.课外阅读

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值