Servlet编程实例 续2

-----------------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 目录下,如果没有,手动创建即可

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

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

重定向到:http://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】

时间: 2024-08-11 01:26:51

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

Servlet编程实例 续4

---------------siwuxie095 JSP+Servlet+JDBC 继续完善登录实例,将校验逻辑改为:从数据库中获取用户信息进行校验 数据库准备 在 Navicat for MySQL 中创建连接:user_conn,创建数据库:user_db, 创建表:user,并内置数据: JDBC 驱动准备 下载 MySQL 的 JDBC 驱动,下载链接: https://dev.mysql.com/downloads/connector/j/ mysql-connector-java-

Servlet编程实例 续3

----------------siwuxie095 Servlet 跳转之请求的转发 修改 LoginServlet.java: package com.siwuxie095.servlet; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import

Servlet学习(三)Servlet编程实例-网站登录(修改版-增加数据库-附源码)

我们为刚才的那个示例Servlet学习(二)Servlet编程实例-网站登录添加上数据库,组成一个较为完整的登录功能. 在开始之前我们得首先了解下一些常用的java术语: PO(persistant object) 持久对象 在o/r 映射的时候出现的概念,如果没有o/r映射,就没有这个概念存在了. 通常对应数据模型(数据库),本身还有部分业务逻辑的处理. 可以看成是与数据库中的表相映射的java对象. 最简单的PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合. PO中应该不包含

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

LoginServlet代码: public class LoginServlet extends HttpServlet{ @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String name = req.getParameter("uName"); String pswd = req.g

JSP(4) ----servlet 编程1

Servlet Servlet是很多框架的技术基础 Servlet是特殊的java类,没有main方法,运行于服务端,创建和销毁都由Servlet容器管理 Servlet容器值tomcat. Servlet与http紧密联系,Servlet可以处理几乎所有http相关的内容 简单的Servlet程序,输出hello 添加Servlet类: package com.jike.servlet; import java.io.IOException; import java.io.PrintWrite

请求转发:MVC设计模式、细节、请求域属性的编程实例、请求重定向和请求转发的区别

MVC设计模式将一次请求的响应过程分成三个功能模块(一般称之为层)来协同完成,这三个模块分别是Model(模型层).View(视图层).Controller(控制层). Model是可作为JavaBean使用的业务对象:View是负责创建显示界面的JSP页面:Controller通常是一个接收用户请求的Servlet程序,它根据请求创建相应的model对象和调用model对象的业务方法,最后再选择一个View去创建网页文档内容并回送给客户端. Controller调用RequestDispatc

计算机科学箴言集 -- &lt;编程珠玑续&gt;

6 计算机科学箴言集 程序员常常要转换时间单位; e.g. 一个程序每秒能处理100条记录, 那处理100w条需要多久? 用除法算, 就知道要花100000秒, 按每小时3600秒算, 差不多3小时; 而一年有多少秒? 如果我直接告诉你 3.155x10^7秒, 你可能很快就忘了; 事实上, 要记住这个很简单, 在误差不超过0.5%的约束下: π秒就是一个纳世纪    --Tom Duff 贝尔实验室    [nano 1×10?9 ] 所以, 如果程序要运行10^7秒, 就要准备等上4个月;

HBase编程实例

摘要:在前文中安装了Hbase,通过Hbase shell可以进行一些操作,但是和实际的编程实例联系起来不方便,因此本文介绍有关Hbase编程的实例. 一.使用Eclipse开发HBase应用程序 1,在Eclipse中新建一个Java Project,命名为HBaseTest,然后右键Properties中选择Java Build Path,选择Add External Jars,将HBase/lib目录下的jar包导入进来. 2,在工程根目录下创建Conf文件夹,将HBase/Conf下的h

c编程实例:809*??=800*??+9*???+1

程序代码: #include<stdio.h>#include<stdio.h>void main(){ int c; int i,j,k; printf("start computing!!!"); for(i=10;i<100;i++){ for(j=100;j<1000;j++){ c=i*809-1-9*j; k=c%800; if(k==0){ k=c/800; if(k>10&&k<100) printf(&q