实验四、客户请求的处理与服务器响应的生成

一、实验目的

1. 掌握Servlet与JSP中,用户请求的获取、解析方法;

2. 掌握会话及跟踪方法(Session)、Cookies的使用;

3. 掌握访问数据库的方法。

二、实验内容与要求

1、模拟Web网站缓存用户的各类偏好设置情况,在Web页面登陆访问服务器后,服务器将用户在登录界面提交的表单数据进行缓存,进而将缓存数据返回给浏览器,供下一步操作处理。

2、使用Cookie和Session两种方式实现。

3、基本概念和原理:

(a)cookie:Cookie中文译文是饼干的意思,cookie是保存会话数据的一种技术,其容量有限;有生命周期,根据需求设置cookie有效期如果不进行设置的话,数据保存至浏览器关闭。它保存在浏览器的缓存中,数据是明文显示的通常只保存非敏感信息,未加密的数据会充分暴露给外界。Cookie通常是保存用户偏好设置、用户名、日期时间等数据。Cookie具体工作原理:

(1)浏览器向服务器发送请求

(2)服务器接收请求,生成一个cookie对象保存"标识"数据

(3)然后把cookie对象放在响应头,一并发回浏览器

(4)浏览器取出cookie对象的数据保存在浏览器的缓存中

(5)再次访问时请求头携带cookie数据发送到服务器

(6)服务器根据cookie的数据作出相应处理

cookie的应用场景通常是使用在“记住登陆状态”,即一次访问成功,在一定时间内可自动登陆,实现细节:比如登陆京东网站,首次登陆需要账号密码,登陆成功后手误关闭了浏览器,再次登陆京东时发现登陆状态还在,无需重输账号密码。即从login页面再次跳转到index页面时,servlet取出cookie的数据做匹配,配对成功则将【请求转发】给index页面,跳转成功。

(b)session:Session存在于服务端对客户端不可见,而cookie存在客户端,sessionId要依赖cookie进行转发。当第一次打开浏览器时,浏览器马上分配了一个sessionId给客户端,客户端发送请求给服务端时就,服务端记录此sessionId在本地,当客户端再次请求服务端时,它就是根据先前有效的sessionId做出相应的操作。每次客户端发来请求时,服务端根据cookie携带的sessionId来区分是哪个用户的会话。

三、实验步骤(含参考的核心代码与配置文件)

1、基于Cookie实现对用户表单信息的缓存,并将缓存结果返回用户浏览器, 业务逻辑说明:

(1)接收来自客户端的信息

(2)保存在cookie对象中

(3)添加到cookie到resopnse中

(4)页面转发到index页面的同时将cookie一并返回给浏览器

实现步骤:

登陆页面的设计:login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"  

    pageEncoding="UTF-8"%>  

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  

<html>  

<head>  

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  

<title>Insert title here</title>  

</head>  

<body>  

    <form action="ServletCookies" method="post">  

        <input type="text" name="username" /> <input type="password"  

            name="password" /> <input type="submit" value="提交" />  

    </form>  

</body>  

</html>  

处理登陆表单信息的servlet:ServletCookie.java

import java.io.IOException;  

import javax.servlet.ServletException;  

import javax.servlet.annotation.WebServlet;  

import javax.servlet.http.Cookie;  

import javax.servlet.http.HttpServlet;  

import javax.servlet.http.HttpServletRequest;  

import javax.servlet.http.HttpServletResponse;  

  

/**  

 * Servlet implementation class ServletCookies  

 */  

@WebServlet("/ServletCookies")  

public class ServletCookie extends HttpServlet {  

    private static final long serialVersionUID = 1L;  

      /**  

     * Default constructor.   

     */  

    public ServletCookie() {  

        // TODO Auto-generated constructor stub  

    }  

    /**  

     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)  

     */  

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  

        // TODO Auto-generated method stub  

        response.getWriter().append("Served at: ").append(request.getContextPath());  

    }  

      /**  

     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)  

     */  

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  

        // TODO Auto-generated method stub  

        doGet(request, response);  

        //获取表单提交的username&password  

        String username = request.getParameter("username");  

        String password = request.getParameter("password");  

          

        //定义一个名为username,值为password的cookie  

        Cookie cookie = new Cookie(username, password);  

        //指定客户端返回的cookie路径  

        cookie.setPath("");  

        cookie.setComment("This is an Cookie");  

        response.addCookie(cookie);  

        request.getRequestDispatcher("index.jsp").forward(request, response);  

    }  

  }  

转向页面:index.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"  

    pageEncoding="ISO-8859-1"%>  

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  

<html>  

<head>  

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">  

<title>Insert title here</title>  

</head>  

<body>  

Hello,this is an index page.  

</body>  

</html>  

部署运行验证:

(1)启动Tomcat打开login.jsp:表单未提交前Request Header请求头为空;

(2)输入用户名,密码点击【提交】servlet 接收到请求头信息,将用户名密码存储在cookie中,servlet 将index页面和cookie一并返回给浏览器

(3)查看浏览器已经接收到的来自服务器的Cooike

实验结果:

 

 

2、基于Session实现对用户表单信息的缓存,并将缓存结果返回用户浏览器, 业务逻辑:

(1)获取表单提交的数据

(2)保存在User实体类中,获取当前登陆时间

(3)session储存User对象、登陆时间

(4)请求转发给index.jsp

实现步骤:

登陆表单页面:login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"  

    pageEncoding="UTF-8"%>  

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  

<html>  

<head>  

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  

<title>Insert title here</title>  

</head>  

<body>  

    <form action="ServletSession" method="post">  

        <input type="text" name="username">   

        <input type="password" name="password" >   

        <input type="submit" value="提交" >  

    </form>  

</body>  

</html>  

存储登陆表单的JavaBean:User.java

/**

 * 映射Form表单的username、password

 * @author Administrator

 *

 */  

public class User {  

    private String username ="";  

    private String password ="";  

      

    public User(String username,String password){  

        this.username = username;  

        this.password = password;  

    }  

    public void setUsername(String username){  

        this.username = username;  

    }  

    public String getUsername(){  

        return username;  

    }  

      

    public void setPassword(String password){  

        this.password = password;  

    }  

      

    public String getPassword(){  

        return password;  

    }  

      

}  

处理登陆表单信息的servlet:ServletSession.java

import java.io.IOException;  

import java.text.DateFormat;  

import java.text.SimpleDateFormat;  

import java.util.Date;  

  

import javax.servlet.ServletException;  

import javax.servlet.annotation.WebServlet;  

import javax.servlet.http.HttpServlet;  

import javax.servlet.http.HttpServletRequest;  

import javax.servlet.http.HttpServletResponse;  

import javax.servlet.http.HttpSession;  

  

  

/**

 * Servlet implementation class ServletCookies

 */  

@WebServlet("/ServletSession")  

public class ServletSession extends HttpServlet {  

    private static final long serialVersionUID = 1L;  

  

    /**

     * Default constructor.  

     */  

    public ServletSession() {  

        // TODO Auto-generated constructor stub  

    }  

  

    /**

     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)

     */  

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  

        // TODO Auto-generated method stub  

        response.getWriter().append("Served at: ").append(request.getContextPath());  

    }  

  

    /**

     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)

     */  

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  

  

        String username = request.getParameter("username");  

        String password = request.getParameter("password");  

        User user = new User(username, password);  

          

        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  

        String dateTime = dateFormat.format(new Date());  

        //new 一个session来保存user、dateTime对象  

        HttpSession session = request.getSession();  

        session.setAttribute("user", user);  

        session.setAttribute("loginTime", dateTime);  

        session.setAttribute("sessionId", session.getId());  

        //请求转发  

        request.getRequestDispatcher("index.jsp").forward(request, response);  

     }  

}  

转向页面:index.jsp

<%@page import="java.text.DateFormat"%>  

<%@ page language="java" contentType="text/html; charset=UTF-8"  

    pageEncoding="UTF-8"%>  

    <jsp:directive.page import="com.User"/>  

    <%User user = (User)session.getAttribute("user");  

        String dateTime = (String)session.getAttribute("loginTime");  

        String sessionId = (String)session.getAttribute("sessionId");  

     %>  

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  

<html>  

<head>  

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  

<title>Insert title here</title>  

</head>  

<body>  

Hello,this is an index page.<p>  

用户名:<%=user.getUsername()%><p>  

密码:<%=user.getPassword()%><p>  

登陆时间:<%=dateTime %><p>  

SessionId:<%=sessionId %><p>  

</body>  

</html>  

部署运行验证:

(1)启动Tomcat打开login.jsp:

(2)表单未提交前:可查看sessionID

(3)表单提交后成功跳转到index页面后,可查看服务器端收到的客户端信息

实验结果:

 

 

   

四、知识扩展

在用户管理系统中,实现:

(1)用户验证的数据来自数据库;

(2)将实现验证码功能;

(3)将已有的用户导出到Excel表中。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 当你发送GET请求到后端服务器时,服务器解析请求并返回响应响应通常由HTTP状态码,响应头和响应体组成。 HTTP状态码是一个3位数字,用于表示请求处理结果。常见的状态码包括: - 200 OK - 请求成功 - 404 Not Found - 请求的资源不存在 - 500 Internal Server Error - 服务器内部错误 响应头包含一些元数据,如Content-Type(响应体的MIME类型)、Content-Length(响应体的长度)、Cache-Control(缓存控制)等。 响应体是服务器返回的实际数据,可以是HTML、JSON、XML等格式的文本,也可以是二进制文件。 当你收到响应后,可以解析响应头和响应体,以获取所需的数据。 ### 回答2: 当客户端发起一个GET请求时,以下是后端服务器响应过程: 1. 客户端发起GET请求,包含请求的URL、参数、头部信息等。 2. 后端服务器接收到GET请求。 3. 服务器根据请求的URL和参数,判断需要处理这个请求处理程序或者对应的资源文件。 4. 服务器根据请求的URL和参数,从数据库或者其他数据源获取所需数据。 5. 如果需要,服务器获取的数据进行处理、加工或者计算。 6. 服务器生成响应的内容,包括响应头部信息和响应主体内容。 7. 服务器生成响应发送给客户端。 8. 客户端接收到服务器响应。 9. 客户端根据响应的内容对接收到的数据进行解析处理,如果是HTML页面的话,就渲染显示;如果是其他数据格式的话,就进行相应的操作。 10. 客户端根据需要对响应进行处理,比如缓存响应内容、提取数据、调用相关操作等。 11. 客户端完成对响应处理后,根据需要可能会发起其他请求或者进行其他操作。 总之,GET请求客户端向后端服务器请求数据,后端服务器根据请求参数和URL从数据库或其他数据源获取所需数据,再将响应发送给客户端,客户端接收响应后进行解析处理。 ### 回答3: 当前端发起一个GET请求时,首先会向后端服务器发送一个HTTP请求。在请求的URL可以包含查询参数,以便将需要的信息发送给后端服务器。后端服务器接收到这个请求后,会解析URL的参数,并根据参数的信息来执行相应的处理逻辑。 后端服务器可以根据请求的URL来确定需要执行的代码逻辑,例如从数据库获取数据、进行计算、生成HTML页面等等。服务器执行完相应的处理逻辑后,会生成响应数据,然后将响应数据发送回前端。 在返回响应数据之前,服务器需要设置一些HTTP头部,例如Content-Type代表响应数据的类型(如application/json表示JSON数据、text/html表示HTML数据等),Content-Length表示响应数据的长度等。 当前端接收到服务器发回的响应数据后,会根据Content-Type来确定如何解析处理这些数据。如果是JSON数据,前端可以使用JSON.parse()来将数据转换为JavaScript对象。如果是HTML数据,前端可以直接将数据插入到DOM,以显示页面内容。 除了响应数据外,服务器还可以设置响应的状态码,以指示请求处理结果。常见的状态码如200表示请求成功,400表示请求有语法错误,404表示请求的资源不存在等。 综上所述,当前端发起一个GET请求时,后端服务器解析请求URL的参数,执行相应的处理逻辑,生成响应数据并设置响应的状态码和头部信息,最后将响应数据发送给前端,前端根据响应的Content-Type来解析处理数据。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值