ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

69期-Java SE-045_JSP-2

2019-07-13 23:56:46  阅读:195  来源: 互联网

标签:Java String 请求 会话 session JSP 69 045 客户端


 

### JSP

Servlet+JSP

Servlet 主要负责完成与客户端的数据交互,提供业务数据。

JSP 负责视图层的展示工作。

Servlet 接收到客户端请求,根据具体的需求完成相关业务,同时将业务数据传给 JSP,JSP 对业务数据进行解析。

JSP HTML 页面中可以嵌入 Java 代码。

1、JSP 脚本

```java
<%
Java代码
%>
```

2、JSP 声明

```java
<%!
声明一个全局方法
%>
```

3、JSP 表达式

```java
<%=Java变量%>
```



### JSP 内置对象

request、response、pageContext、session、application、config、out、page、exception

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



request:

- String getParameter(String key)
- void setAttribute(String key,Object value)
- Object getAttribute(String key)
- void setCharacterEncoding(String charset)
- String[] getParameterValues(String key)
- RequestDispatcher getRequestDispatcher(String path)



response:

- sendRedirect(String path) //重定向

转发表示将同一个请求在服务端进行转移,相当于你给客服打电话,客服将你的电话转接给售后。

重定向表示让客户端发送一个新的请求来访问跳转之后的页面,相当于你给客户打电话,客服给你一个新的电话号码,让你给新号码打电话。

转发的特点是地址栏的 URL 不变,因为是同一次请求,服务器跳转,在服务端完成资源的跳转。

重定向的特点是地址栏的 URL 会发生改变,因为是两次不同的请求,客户端跳转,相当于从客户端发起一次新的请求。

重定向的弊端在于 request 中保存的数据无法读取,因为重定向是两次不同的请求,意味着 request 是两个不同的对象。



### 会话

为什么要有会话?

服务端可以接收若干个客户端请求,但是服务端无法识别每一次 HTTP 请求是从哪个客户端发送来的,它只会接收到一个请求信号。

所以需要一种技术来区分不同的客户端,这个技术就是会话。

会话:就是客户端和服务端之间发生的一系列连续的请求和响应的过程,打开浏览器进行操作到关闭浏览器的过程。

举例:会话就相当于打电话的过程,拿起电话拨通号码进行对话,直到挂掉电话的整个操作过程,就是一次会话。

会话状态指服务端和客户端在会话过程中产生的状态信息,借助于会话状态,服务端能够把属于同一次会话的一系列请求和响应过程关联起来。

实现会话机制有两种解决方案

- session
- cookie



服务端同时接收大量的客户端请求,如何来区分哪些请求来自于同一个会话?能识别出来自同一个客户端的访问请求,这就需要客户端对其发出的每个请求进行标识,属于同一个会话中的请求都有相同的标识号,这就是 sessionID。

session 常用方法:

- String getId()    //获取sessionID
- void setMaxInactiveInterval(int interval)     //设置 session 失效时间,单位是秒
- int getMacInactiveInterval()         //获取 session 时间

- void setAttribute(String key,Object value)      //在 session 中以键值对的形式存储数据
- Object getAttribute(String key)                  //通过 key 值获取 session 中保存的数据
- void removeAttribute(String key)           //通过 key 值移除 session 中保存的数据



实际开发中,普通的业务数据传递一般选择 request,需要结合转发完成资源的跳转。登录成功之后的用户信息,一般选择 session,无论是转发还是重定向,没有区别,都可以从 session 中取出数据。

index.jsp

<%@ page import="java.util.Map" %>
<%@ page import="java.util.Set" %>
<%@ page import="java.util.Arrays" %>
<%@ page import="java.util.Enumeration" %><%--
  Created by IntelliJ IDEA.
  User: southwind
  Date: 2019-07-07
  Time: 20:10
  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>
    <%
      String username = request.getParameter("username");
      String password = request.getParameter("password");
      if(username.equals("zhangsan")&&password.equals("123")){
          request.setAttribute("name",username);
//          response.sendRedirect("welcome.jsp");
        request.getRequestDispatcher("welcome.jsp").forward(request,response);
      }else{
          request.setAttribute("error","用户名或密码错误");
//          response.sendRedirect("login.jsp");
        request.getRequestDispatcher("login.jsp").forward(request,response);
      }
    %>
    <h1>index</h1>
  </body>
</html>

 

login.jsp

<%--
  Created by IntelliJ IDEA.
  User: southwind
  Date: 2019-07-07
  Time: 20:48
  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>
    <%
        String error = (String) request.getAttribute("error");
        if(error!=null){
            out.write(error);
        }
    %>


    <form action="index.jsp">
        <table>
            <tr>
                <td>用户名:</td>
                <td>
                    <input type="text" name="username"/>
                </td>
                <td>密码:</td>
                <td>
                    <input type="password" name="password"/>
                </td>
                <td>
                    <input type="submit" value="登录"/>
                </td>
            </tr>
        </table>
    </form>
</body>
</html>

 

session.jsp

<%--
  Created by IntelliJ IDEA.
  User: southwind
  Date: 2019-07-07
  Time: 21:39
  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>
    <%
        session.setAttribute("name","session");
        request.setAttribute("name","request");
        response.sendRedirect("test.jsp");
    %>
</body>
</html>

 

test.jsp

<%--
  Created by IntelliJ IDEA.
  User: southwind
  Date: 2019-07-07
  Time: 20:32
  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>test</h1>
    <%
        String requestName = (String) request.getAttribute("name");
        String sessionName = (String) session.getAttribute("name");
    %>
    requestName<%=requestName%><br/>
    sessionName<%=sessionName%>
</body>
</html>

 

welcome.jsp

<%--
  Created by IntelliJ IDEA.
  User: southwind
  Date: 2019-07-07
  Time: 20:48
  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>
    <%
        String name = (String) request.getAttribute("name");
    %>
    欢迎回来~!<%=name%>
</body>
</html>

web.xml

<?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">
</web-app>

 

标签:Java,String,请求,会话,session,JSP,69,045,客户端
来源: https://www.cnblogs.com/HiJackykun/p/11182688.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有