JavaWeb--JSP转发和重定向

一、创建jsp

  • 什么是jsp

    • jsp全称是java servlet pages,它和servlet技术一样,都是用来开发动态web应用程序的

  • 目录结构

    • html、jsp等页面相关的内容都创建在web目录下

    • 在web目录下创建css目录、js目录、images目录等用于存放css、js及图片文件等

    • 现阶段,前端资源不要放在WEB-INFO目录下,因为该目录受保护,将资源放在该目录下,访问时会报404错误

  • page指令

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%@ page import="java.util.Date" %>
    • page指令:告诉服务器如何翻译我的jsp页面

    • contentType="text/html;charset=UTF-8":告诉服务器,我要向页面响应的内容是html文档,编码格式是utf-8

    • language="java":告诉web服务器,该jsp页面使用的脚本语言是java语言

    • import="java.util.Date":用于引用java语言中用到的第三方类文件

二、jsp页面的组成

public String getDate(Date date){
    SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
    String currentDate = sf.format(date);
    return currentDate;
}
  • 指令

    • page

    • include

    • taglib

  • 静态元素

    <%--html css--%>
    <p style="color: red">这是一个段落</p>
    <%--js--%>
    <script>
        alert("这是jsp中的js代码")
    </script>

  • java

    • <%%>中写java片段,即一个代码块,每一行以分号结束

      <%--下面这段代码只是执行java语言,但是不会把结果显示在页面上--%>
      <%
          Date date = new Date();
          SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日");
          String currentTime = simpleDateFormat.format(date);
      %>

    • <%= %>中写jsp表达式,用来向页面输出内容,最后不加分号

      <%--输出--%>
      <%="当前日期是:" + currentTime%>
    • <%!%>中声明jsp的全部变量和方法

      <%--jsp中还可以写完整的方法--%>
      <%!
          String getDate(Date date) {
              SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
              //String currentTime = sf.format(date)
              return sf.format(date);
          }
      %>

  • 注释

    • <!--html注释,F12,在客户端能看到-->
      <%--jsp注释,F12,在客户端看不到--%>
      java注释:F12,客户端看不到,要写在<%%>里面
      <%
          //这是java单行注释
          /*
          这是多行注释
          */
      %>
      ​
  • jsp九大内置对象

三、jsp的原理

  • web服务器是如何调用并执行一个jsp页面的呢?

    • 用户通过浏览器向服务器发送请求,不管访问的是什么资源,其实都是在访问servlet,所以jsp的本质就是servlet。服务器在执行jsp的时候,先把它翻译为一个servlet,所以我们请求一个jsp页面的时候,实际请求的是翻译后的servlet

    • jsp的运行过程

      • (hello.java --编译-- hello.class 修改了hello.java --编译-- hello.class)

      • 第一次执行

        1. 客户端用户通过浏览器向服务器请求资源(.jsp文件)

        2. web服务器获取到.jsp文件,到web目录下查找.jsp文件,找到请求的.jsp文件

        3. 把请求的.jsp文件翻译为.java类

        4. 将.java类编译生成.class文件

        5. 最终服务器要执行.class文件,并把内容输出给浏览器,浏览器显示页面

      • 第二次执行

        • 因为已经存在相应的.class文件,所以不需要翻译和编译的过程

        • 如果修改了jsp文件,就需要重新翻译和编译

四、九大内置对象

  • 所谓内置对象,就是web服务器把jsp翻译为servlet时创建的一组对象,可以拿来直接使用,不需要new创建,也称为隐式对象

  • 只能用在<%%>及<%=%>中

//1.page对象:类型是java.lang.Object
//代表当前jsp页面,一个jsp页面就是一个page对象,即代表当前jsp被翻译后的类的实例
//一般使用this
ServletConfig servletConfig = this.getServletConfig();
​
//2.out对象:类型是JSPWriter
//用于向客户端发送数据,有两个常用方法:print()和write()
//作用和<%=%>相同
//print():能识别标签,可以输出对象
out.print("<h1>" + new Date() + "</h1>");
//write():能识别标签,不能输出对象
out.write("<h2>二级标题</h2>");
​
//3.request对象,类型HttpServletRequest
//封装了用户的请求信息,对应客户的请求
//4.response对象,类型HttpServletResponse
//封装了响应信息,对客户端的请求做出动态的响应,向客户端发送数据
​
//5.application对象,类型是ServletContext
//代表当前web应用,可以用它来设置整个web应用的共享数据
​
//6.session对象,类型是HttpSession
//代表一个会话,会话:从客户打开浏览器并连接到服务器开始
// 到客户关闭浏览器断开与服务器的连接结束
​
//7.pageContext对象,类型是pageContext
//俗称页面上下文,可以表示这个页面中的所有内容,它内部封装了其他八大内置对象,
//可以通过相应的get对象名()得到具体的内置对象
application = pageContext.getServletContext();
config = pageContext.getServletConfig();
session = pageContext.getSession();
out = pageContext.getOut();
​
//8.config对象,类型是ServletConfig
//代表servlet的配置信息,因为jsp不需要配置,所以这个对象基本没用
​
//9.exception对象,类型是Throwable
//只能在isErrorPage="true"的页面中使用,即定义为错误页面使用,直接在jsp页面中使用会报错,需要设置
//<%@ page contentType="text/html;charset=UTF-8" language="java" isErrorPage="true" %>

五、jsp中的四大范围

//1.page:代表当前页面,用this表示,page相关的数据只在本页面内生效,
// 实际使用的对象是pageContext
String str = "我是用来测试page范围的,我的作用范围只是本页面";
//将str存入page范围内,即存到pageContext对象中
pageContext.setAttribute("str",str);
out.print("page范围内的数据是:" + pageContext.getAttribute("str") + "<br>");
//不同页面中的pageContext对象不是同一个对象
​
//2.request:代表一次请求,request相关的数据只在一次请求内生效,
String req = "一次请求中的数据";
//存入request范围
request.setAttribute("req",req);
out.print("request范围内的数据是:" + request.getAttribute("req"));
//转发到test03.jsp
//request.getRequestDispatcher("test03.jsp").forward(request,response);
​
//3.session:代表一次会话,session相关的数据在一次会话期间有效
​
//4.application:代表整个web应用,存在application中的数据是web应用的全局变量,每一个用户共享
//往application中存入数据
application.setAttribute("app","application");
out.print(application.getAttribute("app"));

六、response的重定向

  • 案例:登录功能

    • 登录成功,跳转到欢迎页面,显示欢迎使用本系统

    • 登录失败,跳转回登录页面,显示用户名或密码错误

  • 重定向的方法

    response.sendRedirect("String path")
    • path:要跳转的路径

      • 可以是内部页面的名称,如:welcome.jsp

        response.sendRedirect("welcome.jsp");
      • 也可以是外部网站的网址:如:

      • response.sendRedirect("http://www.baidu.com");
  • 什么是重定向

    • 一个web资源(LoginServlet)接收到客户端的请求,通知客户端去访问另一个web资源(welcome.jsp)

  • 特点:

    • 重定向发生在客户端

    • 重定向后,浏览器的地址栏url发生改变,改变为重定向后的地址

    • 重定向是二次请求

    • 重定向的url地址可以是本web应用的内部资源,也可以是外部网址

  • 注意:

    • 重定向后,之前的请求信息就访问不到了,因为重定向是发起了新的请求

七、request的转发(请求转发)

  • 转发过程

    //第一步,获取一个转发对象
    //RequestDispatcher rd = request.getRequestDispatcher("welcome.jsp");
    //第二步,进行转发操偶做
    //rd.forward(request,response);
    //以上两步合起来写
    request.getRequestDispatcher("welcome.jsp").forward(request,response);

  • 什么是转发

    • 一个web资源(LoginServlet)接收到客户端的请求后,通知服务器去访问另一个web资源(welcome.jsp)

  • 特点

    • 转发发生在服务器端

    • 转发后浏览器的地址栏url不会改变

    • 转发是一次请求,将请求信息在多个资源间进行跳转

    • 转发只能转发到本web应用的内部资源

    • 转发因为是一次请求在多个资源间进行跳转,所以请求的数据可以共享

09-10 118
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值