浩浩学编程JavaWeb-02JSP

jsp

1.jsp定义

JSP 本质上就是⼀个 Servlet,JSP 主要负责与⽤户交互,将最终的界⾯呈现给⽤户, HTML+JS+CSS+Java 的混合⽂件。 当服务器接收到⼀个后缀是 jsp 的请求时,将该请求交给 JSP 引擎去处理,每⼀个 JSP ⻚⾯第⼀次被访 问的时候,JSP 引擎会将它翻译成⼀个 Servlet ⽂件,再由 Web 容器调⽤ Servlet 完成响应。 单纯从开发的⻆度看,JSP 就是在 HTML 中嵌⼊ Java 程序。 具体的嵌⼊⽅式有 3 种:

  1. JSP 脚本,执⾏ Java 逻辑代码
<%=Java变量 %>
  1. JSP 声明:定义 Java ⽅法

    <%!
     声明 Java ⽅法
    %>
    
  2. JSP 表达式:把 Java 对象直接输出到 HTML ⻚⾯中

<%=Java变量 %>
<%--
  Created by IntelliJ IDEA.
  User: haoqi
  Date: 2020/10/5
  Time: 8:28
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  <h1>hello Index</h1>

<%--  在jsp中嵌入Java代码--%>

  <%! public String test(){return "hello java server page";}%>
  <% String str = test();%>
  <%= str%>

  </body>
</html>

jsp01

<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %><%--
  Created by IntelliJ IDEA.
  User: haoqi
  Date: 2020/10/5
  Time: 21:42
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>jsp输出一个表格</title>
</head>
<body>

<%
    List<String> names = new ArrayList<>();
    names.add("haoqi");
    names.add("safei");
    names.add("xuchao");
    names.add("wuzhen");

    List<Integer> ages = new ArrayList<>();
    ages.add(19);
    ages.add(18);
    ages.add(10);
    ages.add(22);
%>

<table border="1">
    <tr>
        <th>姓名</th>
        <th>年龄</th>
    </tr>
    <!--方法一:直接挨个输出
      <tr>
        <td><%=names.get(0)%></td>
        <td><%=ages.get(0)%></td>
      </tr>
      -->
    <!--用Java里面的for循环结构-->
    <%for (int i=0;i<names.size();i++){%>

    <tr>
        <td><%=names.get(i)%></td>
        <td><%=ages.get(i)%></td>
    </tr>

    <%}%>
</table>

</body>
</html>

jsp02

2.jsp 9个内置对象

  1. request : HttpServletRequest 一次请求
  2. response : HttpServletResponse 一次响应
  3. pageContext :页面上下文,获取页面信息,
  4. session : 一次会话,保存用户信息 HttpSession
  5. application :当前web应用,全局对象,保存所有用户共享信息,ServletContext
  6. config :当前 jsp 对应Servlet 的ServletConfig 对象 ,获取当前Servlet 的信息/
  7. out : 向浏览器输出数据jspWriter
  8. page : 当前 jsp 对应Servlet 对象,servlet
  9. exception : jsp 页面发生异常

常用的 request,response,session,application,pageContext

request 常方法

  1. String getParameter(String key) 获取客户端传来的参数
  2. void setAttribute(String key,Object value) 通过键值对的形式保存数据。
  3. Object getAttribute(String key) 通过 key 取出 value。
  4. RequestDispatcher getRequestDispatcher(String path) 返回⼀个 RequestDispatcher 对象,该对 象的 forward ⽅法⽤于请求转发。
  5. 、String[] getParameterValues() 获取客户端传来的多个同名参数。
  6. 、void setCharacterEncoding(String charset) 指定每个请求的编码。

3.jsp中的转发

jsp01.jsp

<%@ page import="com.sun.corba.se.impl.encoding.IDLJavaSerializationInputStream" %><%--
  Created by IntelliJ IDEA.
  User: haoqi
  Date: 2020/10/6
  Time: 8:09
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=GBK" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%  String idStr=request.getParameter("id");//地址栏后面加 ?id=123
    Integer id=Integer.parseInt(idStr);
    id++;
    //将数据存入到request中
    request.setAttribute("number",id);
    //将请求转发给test2.jsp
    request.getRequestDispatcher("jsp02.jsp").forward(request,response);
%>
<h1>jsp01.jsp</h1>
<%=id%>

</body>
</html>

jsp02.jsp

<%--
  Created by IntelliJ IDEA.
  User: haoqi
  Date: 2020/10/6
  Time: 8:14
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

<%
    Integer number=(Integer) request.getAttribute("number");
%>
<h1>jsp02.jsp</h1>
<%=number%>
</body>
</html>

jsp03

注意 :地址栏仍然为 jsp01.jsp 但在jsp01.jsp的内部已经实现跳转到了 jsp02.jsp

4.jsp重定向

jsp03.jsp

<body>

<%
    request.setAttribute("name","Tom");
    request.getRequestDispatcher("jsp04.jsp").forward(request,response);
//    response.sendRedirect("jsp04.jsp");//用这种方法并不能传递数据
%>

</body>

jsp04.jsp

<body>

<h1>jsp04.jsp</h1>
<%
    String name=(String)request.getAttribute("name");
    out.write(name);
%>
<!--能够正常跳转,但并不能正常显示out.write()会报空指针异常 -->

</body>

jsp04

5.HTTP 请求状态码

  • 200:正常
  • 404:资源找不到
  • 400:请求类型不匹配
  • 500:Java 程序抛出异常

转发 getRequestDispatcher 和 重定向 sendRedirect 的区别

  1. 转发:将同一个请求转发给下一个页面
  2. 重定向:由客户端发送⼀次新的请求来访问跳转后的⽬标资源,地址栏改变,也叫客户端跳转。
  3. 如果两个⻚⾯之间需要通过 request 来传值,则必须使⽤转发,不能使⽤重定向

在这里插入图片描述

**案例:**实现⽤户登录,如果⽤户名和密码正确,则跳转到⾸⻚(转发)并且展示⽤户名,否则重新回到登陆⻚⾯(重定向)。

login01.jsp

<%--
  Created by IntelliJ IDEA.
  User: haoqi
  Date: 2020/10/6
  Time: 9:29
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登录界面</title>
</head>


<form action="/login02.jsp" method="post">
    <table>
        <tr>
            <td>用户: </td>
            <td><input type="text" name="username"/></td>
        </tr>
        <tr>
            <td>密码:</td>
            <td><input type="password" name="password"></td>
        </tr>
        <tr>
            <td><input type="submit" value="登录"></td>
            <td><input type="reset" value="重置"></td>
        </tr>
    </table>
</form>

</html>

login02.jsp

<%--
  Created by IntelliJ IDEA.
  User: haoqi
  Date: 2020/10/6
  Time: 9:29
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>接入</title>
</head>
<body>

<%
    String username=request.getParameter("username");
    String password=request.getParameter("password");
    //假设用户名为 admin 密码为123456
    if(username.equals("admin")&& password.equals("123456")){
        //登录成功
        request.setAttribute("name",username);
        request.getRequestDispatcher("login03.jsp").forward(request,response);
    }else
        //登录失败//用转发和重定向都可以
        response.sendRedirect("login01.jsp");
%>

</body>
</html>

login03.jsp

<%--
  Created by IntelliJ IDEA.
  User: haoqi
  Date: 2020/10/6
  Time: 9:38
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>welcome</title>
</head>
<body>
<%
    String name = (String) request.getAttribute("name");
%>
欢迎回来!<%=name%>
</body>
</html>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d9uyQMh5-1602158795875)(C:\Users\haoqi\AppData\Roaming\Typora\typora-user-images\image-20201006100723614.png)]

登录成功

jsp05

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值