-----------------siwuxie095

Servlet 跳转之请求的重定向

继续完善登录实例,如下:

login.jsp 不变,修改 LoginServlet,新建两个 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>登录页面</title>

</head>

<body>

<!-- 添加表单,url在部署描述符中进行配置,使用post方式来提交 -->

<form action="<%= request.getContextPath() %>/loginServlet" method="get">

userName:<input type="text" name="uname" /><br/>

password:<input type="password" name="upwd" /><br/><br/>

<input type="submit" value="Login" />

<input type="reset" value="Reset" />

</form>

</body>

</html>

success.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>登录成功提示页面</title>

</head>

<body>

登录成功!<br/>

您提交的信息为:<br/>

用户名:<%= request.getParameter("uname") %><br/>

密码:<%= request.getParameter("upwd") %><br/>

<a href="login.jsp">返回登录页面</a>

</body>

</html>

error.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>登录失败提示页面</title>

</head>

<body>

登录失败!<br/>

您提交的信息为:<br/>

用户名:<%= request.getParameter("uname") %><br/>

密码:<%= request.getParameter("upwd") %><br/>

<a href="login.jsp">返回登录页面</a>

</body>

</html>

LoginServlet.java:

package com.siwuxie095.servlet;

import java.io.IOException;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

// LoginServlet 继承自 HttpServlet

public class LoginServlet extends HttpServlet {

/**

* 用于序列化和反序列化的 ID

*/

private static final long serialVersionUID = -7740192486028671728L;

//覆盖父类 HttpServlet 的 doGet() 方法

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

System.out.println("===== doGet =====");

//在 doGet() 方法里调用 doPost() 方法

//这样,GET请求和POST请求可以共用一套处理逻辑

doPost(req, resp);

}

//覆盖父类 HttpServlet 的 doPost() 方法

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

System.out.println("===== doPost =====");

String userName=req.getParameter("uname");

String password=req.getParameter("upwd");

System.out.println("用户名:"+userName);

System.out.println("密码:"+password);

if (userName.equals("siwuxie095")&&password.equals("8888")) {

//使用resp对象的sendRedirect()方法,进行页面的重定向

//使用重定向方式进入提示页面无法获取到之前提交的表单数据

resp.sendRedirect(req.getContextPath()+"/success.jsp");

}else {

resp.sendRedirect(req.getContextPath()+"/error.jsp");

}

}

}

在部署描述符 web.xml 中注册 servlet:

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">

<display-name>MyServlet</display-name>

<welcome-file-list>

<welcome-file>index.html</welcome-file>

<welcome-file>index.htm</welcome-file>

<welcome-file>index.jsp</welcome-file>

<welcome-file>default.html</welcome-file>

<welcome-file>default.htm</welcome-file>

<welcome-file>default.jsp</welcome-file>

</welcome-file-list>

<servlet>

<servlet-name>LoginServlet</servlet-name>

<servlet-class>com.siwuxie095.servlet.LoginServlet</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>LoginServlet</servlet-name>

<!-- url-pattern 即在 form 表单中录入的 action 的值 -->

<url-pattern>/loginServlet</url-pattern>

</servlet-mapping>

</web-app>

部署描述符 web.xml 在 WEB-INF 目录下,如果没有,手动创建即可

选择工程 MyServlet,右键->Java EE Tools->Generate Deployment Descriptor Stub

访问:localhost:8080/MyServlet/login.jsp,分别输入 siwuxie095 和 8888

重定向到:localhost:8080/MyServlet/success.jsp,用户名和密码都为 null

即 使用重定向方式进入提示页面无法获取到之前提交的表单数据

整个过程分析如下:

(1)首先访问 login.jsp

(2)分别输入 siwuxie095 和 8888 后,点击 Login,出现两次 请求 和 响应

其中 loginServlet?uname=siwuxie095&upwd=8888

其中 success.jsp

(3)根据 请求信息 和 响应信息 可知:

首先浏览器向 LoginServlet 发出请求信息

LoginServlet 接收到请求信息后进行处理,向浏览器发送响应信息

该响应信息没有包含任何具体的数据,只是在响应头的 Location 字段

包含需要重定向的地址信息:success.jsp

浏览器接收到响应信息后,自动向 Location 字段指定的地址发送请求信息,

请求信息发送完毕后会收到相应的响应信息

在整个重定向的过程中,会涉及两次 请求 和 响应。在第二次

请求中并没有携带表单信息,所以在 success.jsp 页面,无法

获取到 用户名 和 密码,显示为 null

【made by siwuxie095】

Servlet编程实例 续2的更多相关文章

  1. Servlet编程实例 续4

    ---------------siwuxie095 JSP+Servlet+JDBC 继续完善登录实例,将校验逻辑改为:从数据库中获取用户信息进行校验 数据库准备 在 Navicat for MySQ ...

  2. Servlet编程实例 续3

    ----------------siwuxie095 Servlet 跳转之请求的转发 修改 LoginServlet.java: package com.siwuxie095.servlet; im ...

  3. Servlet编程实例 续1

    -----------------siwuxie095                                 在 LoginServlet 中,右键->Open Type Hierar ...

  4. Servlet编程实例1

    编程目的:使用JSP+servlet,来实现一个登陆页面,登陆成功则提示成功,登陆失败则提示失败. 编程要求:登陆页面由login.jsp负责显示,登陆成功由success.jsp负责显示,登陆失败由 ...

  5. Servlet编程实例

    ---------------siwuxie095 登录实例: 从 login.jsp 提交登录信息到 LoginServlet,在 LoginServlet 中打印登录信息 工程结构目录如下: Lo ...

  6. Servlet编程实例2

    上次实验中利用HttpServletRespon.sendRedict()方法来实现页面的转跳,而这种重定向请求的方法无法传递缓存的内容. 所以为了做出改进,这次使用RequestDispatcher ...

  7. Servlet编程实例-servlet学习之旅(三)

    LoginServlet代码: public class LoginServlet extends HttpServlet{ @Override protected void service(Http ...

  8. Servlet编程

    Servlet编程 1. servlet概念及相关接口简介 java Servlet是运行在web服务器或应用服务器上的程序,他是作为来自web浏览器或其他HTTP客户端的请求和HTTP服务器山的数据 ...

  9. Servlet编程-步步为营

    [环境]eclipse j2ee;Tomcat 7.0; [模型1] package com.zhiqi; import ...; public class TestServlet extends H ...

随机推荐

  1. Data Structure Array: Move all zeroes to end of array

    http://www.geeksforgeeks.org/move-zeroes-end-array/ #include <iostream> #include <vector> ...

  2. 第二篇、HTML

    一.html文档树 二.HTML分类 块级标签和内联标签: 块级标签:<p><h1><table><ol><ul><form>& ...

  3. SrpingCloud 之SrpingCloud config分布式配置中心搭建

    1.搭建git环境   目的:持久化存储配置文件信息 采用码云 创建后 继续创建文件夹  用来区分不同的项目 下面就是git上存放配置文件了.环境的区分 dev  sit pre prd   开发  ...

  4. 自底向上归并排序(Merge Sort)

    一.思路 另一种实现归并排序的方法是,先归并微型数组,再成对归并得到的子数组,直到将整个数组归并在一起. 我们先进行1-by-1归并,然后2-by-2归并,4-by-4归并,如此下去. 在最后一次归并 ...

  5. CSS3制作分步注册表单

    这个DEMO是使用CSS3制作的一个分步注册表单,每个input对应的是每一步,在表单得到焦点时,对应的step也会进行对应的改变.不过这个效果是使用js代码来实现,但整个表单的外观是由CSS3来完成 ...

  6. 《Effective C++》学习笔记(一)

    1.const成员函数不能更改成员变量 #include <bits/stdc++.h> using namespace std; class CtextBlock { public: s ...

  7. Android模拟器adb命令介绍

    在SDK的Tools文件夹下包含着Android模拟器操作的重要命令adb,adb的全称为Android Debug Bridge,就是调试桥的作用 在SDK的Tools文件夹下包含着Android模 ...

  8. PS 滤镜——(扭曲)逆球面化 (凹陷效果)

    %%% Inverse_Spherize %%% 逆球面化 clc; clear all; close all; addpath('E:\PhotoShop Algortihm\Image Proce ...

  9. PS色调— —通道混合

    clc; clear all; close all; addpath('E:\PhotoShop Algortihm\Image Processing\PS Algorithm'); Image=im ...

  10. 【leetcode刷题笔记】Remove Duplicates from Sorted Array II

    Follow up for "Remove Duplicates":What if duplicates are allowed at most twice? For exampl ...