request对象

request对象

什么是web资源:网页上显示的所有数据:文本,图片,视频,音频...

web资源的分类
  	静态资源:没有与数据库交互,数据直接写死文件中  可以使用的技术:HTML/CSS/JS
    动态资源:数据来自数据库  可以使用的技术:JSP/Servlet

web服务器:一个运行在高性能计算机上的软件,可以将本机的资源提供给外界访问。

Tomcat发布项目方式	
  方式1:直接将项目复制到webapps目录下
  方式2:虚拟目录:项目可以放在任意位置,需要修改conf/server.xml文件,在第69行添加如下代码:
  		  <Context path="/项目的访问路径" docBase="项目的真实路径" />
	方式3:配置独立的xml文件:在conf/catalina/localhost目录下创建xml文件,文件名任意(就是项目访问路径)
  		  在xml文件中添加配置信息: <Context docBase="项目的真实路径" />
  
什么是Servlet
  运行在服务器端的一个小程序(一个实现Servlet的类)

Servlet的作用
  接收浏览器的请求并响应数据给浏览器

Servlet的开发步骤
  	1. 创建一个类继承HttpServlet
  	2. 重写doGet或doPost方法:处理请求和响应数据
  	3. 使用注解配置访问地址
  	4. 部署项目到服务器并启动
    5. 通过浏览器访问即可

Servlet生命周期相关方法
  	1. 无参数构造方法:浏览器第一次访问创建对象时调用,只会调用12. init:执行初始化操作  只会执行13. service:处理请求和响应  每次请求执行14. destory:服务器重启或关闭调用,用于释放资源  只会执行1

学习目标

  • 能够使用工具查看 HTTP 协议内容
通过浏览器查看:按F12-->选择network
  • 能够理解 HTTP 协议请求内容
请求行:
	组成:请求方式 请求地址  协议和版本
请求头:由各种键值对组成
请求体:就是请求参数,POST请求才有,GET没有
  • 能够使用 Request 对象获取 HTTP 协议请求内容
请求行相关方法
   获取请求方式: String getMethod();
   获取请求地址:String getRequestURI();
   获取协议和版本:String getProtocol();
   获得项目访问路径:String getContextPath();
	 获取客户端IP地址:String getRemoteAddr();
   
请求头相关方法
  	根据请求头名获得值:String getHeader(String headerName)
    获得所有的请求头:Enumeration<String> getHeaderNames();
  	
请求参数相关方法
  	根据请求参数名获得值:String getParameter(String name);
    根据请求参数名获得多个值:String[] getParameterValues(String name);
    获得所有请求参数名:Enumeration<String> getParameterNames();
		获得所有请求参数信息:Map<String,Object> getParameterMap();
  • 能够处理 HTTP 请求参数的乱码问题(1个方)
在获取请求参数之前设置请求参数的编码:request.setCharacterEncoding("utf8");
  • 能够使用Request 域对象(三个方法)
往作用域中存储数据:request.setAttribute(String key,Object value) 
根据键从作用域中获取数据:request.getAttribute(String key)
根据键从作用域删除键值对:request.removeAttribute(String key)
  • 能够使用 Request 对象做请求转发(1个方法)
转发方法:request.getRequestDispatcher("转发地址").forward(request,response);

01_HTTP协议概述-[理解]

1.1 目标

学习HTTP协议:概念、作用、特点、组成

在这里插入图片描述

1.2 小结

概念:
  	英文全称:HyperText Transfer Protocol 
  	中文名字:超文本传输协议
  
作用:
  用于浏览器和服务器之间的数据传输
  规定了浏览器和服务器数据的传输格式
  
组成:
  	请求:浏览器发数据给服务器的过程
    响应:服务器返回数据给浏览器的过程

02_HTTP请求概述-[掌握]

1.1 目标

能够说出HTTP请求的组成内容--[面试题]

1.2 查看HTTP请求

  • 在 HTML 页面上,制作 2 个表单提交页面,用户名和密码,get 提交和 post 提交按钮,查看HTTP 请求
<!DOCTYPE html>
<html lang="zh_CN">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<!--login 是一个 servlet-->
<h2>GET 提交</h2>
<form action="login" method="get">
    用户名:
    <input type="text" name="username"><br/>
    密码:
    <input type="password" name="pwd"><br/>
    <input type="submit" value="登录">
</form>
<hr>
<h2>POST 提交</h2>
<form action="login" method="post">
    用户名:
    <input type="text" name="username"><br/>
    密码:
    <input type="password" name="pwd"><br/>
    <input type="submit" value="登录">
</form>
</body>
</html>
  • 查看浏览器与服务器的通讯

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sCeG1uAm-1600306713436)(img/img01.jpg)]在这里插入图片描述

在这里插入图片描述

1.3 小结

1、什么是HTTP请求:浏览器访问服务器的过程
	
2、HTTP请求的组成:
		请求行
  	请求头
  	请求体

03_请求行概述-[掌握]

1.1 目标

学习请求行的格式和组成

1.2 小结

请求行格式:
  	POST请求:POST /day02/login HTTP/1.1
    GET请求:GET /day02/login?username=jack&pwd=111 HTTP/1.1
请求行组成:请求方式  请求地址  协议和版本

在这里插入图片描述

示例:演示GET请求会使用缓存

04_请求头概述-[掌握]

1.1 目标

掌握常见请求头的作用

1.2 小结

常见请求头作用
Referer服务器端获取浏览器上一次访问的地址
If-Modified-Since服务器端获取浏览器缓存页面的时间
User-Agent服务器获取客户端操作系统的类型和浏览器类型
Connection获得HTTP协议连接状态
1.1 保持连接 keep-alive
1.0 断开连接 close
Host获取服务器的地址和端口

05_请求体概述-[掌握]

1.1 目标

能够说出什么是请求体

1.2 什么是请求体

用户输入的内容
只要用户输入的并提交给服务器的数据都可以统称为请求参数

1.3 小结

问题:POST和GET请求都有请求体吗?
POST才有,Get没有请求体

06_HttpServletRequest对象概述-[掌握]

1. HttpServletRequest对象是谁创建的?web服务器:Tomcat
	
2. HttpServletRequest对象的作用?
		用来封装浏览器发送给服务器的所有数据:请求行,请求头,请求体 
    需要调用request对象的方法获得请求数据

07_获取请求行相关方法-[掌握]

1.1 目标

使用请求对象的方法获取请求行信息

1.2 示例演示

  • 示例:创建一个 RequestLineServlet:用于获取请求行中相关信息的方法,并且输出到网页上。
package com.pkx._01request_line;

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 java.io.IOException;
import java.io.PrintWriter;

/**
 * 需求:创建一个 RequestLineServlet:用于获取请求行中相关信息的方法,并且输出到网页上。
 */
@WebServlet(urlPatterns = "/line")
public class RequestLineServlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 设置内容类型和编码
        response.setContentType("text/html;charset=utf-8");
        // 获得字符打印流
        PrintWriter out = response.getWriter();

        // 请求方式 192.168.32.166
        out.println("请求方式:" + request.getMethod() + "<br/>");
        
        // 统一资源标识符: /day02/line   isbn 唯一 
        out.println("统一资源标识符:" + request.getRequestURI() + "<br/>" );
        // 统一资源定位符: http://localhost:8080/day02/line
        out.println("统一资源定位符:" + request.getRequestURL()+ "<br/>");
        
        // 协议和版本
        out.println("协议和版本:" + request.getProtocol() + "<br/>" );
        // 上下文路径:项目的访问路径
        out.println("项目的访问路径:" + request.getContextPath() + "<br/>");
        // 客户端IP地址
        out.println("客户端IP地址:" + request.getRemoteAddr()+ "<br/>");
    }
}
  • 网页显示如下

在这里插入图片描述

1.3 小结

HttpServletRequest对象的方法功能说明
String getMethod()获取请求方式
String getRequestURI()获得统一资源标识符
StringBuffer getRequestURL()获得统一资源定位符:网址
String getProtocol()获得协议和版本
String getContextPath()获得项目访问路径
String getRemoteAddr()获得客户端IP地址

08_获取请求头相关方法-[掌握]

1.1 目标

使用请求对象的方法获取请求头信息

1.2 示例

  • 需求:创建一个RequestHeaderServlet:得到所有的请求头信息,并输出所有的请求值信息。
package com.pkx._02request_header;

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 java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;


/**
 * 创建一个RequestHeaderServlet:得到所有的请求头信息,并输出所有的请求值信息。
 */
@WebServlet(urlPatterns = "/header")
public class RequestHeaderServlet extends HttpServlet {

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
         // 设置内容类型和编码
         response.setContentType("text/html;charset=utf-8");
         // 获得字符打印流
         PrintWriter out = response.getWriter();

        // 根据请求头名字获得值
        String host = request.getHeader("host");
        out.println("host = " + host + "<hr>");

        // 获得所有请求头名字
        // Enumeration 是迭代器的前身  Iterator
        Enumeration<String> it = request.getHeaderNames();
        // 判断是否有下一个元素
        while (it.hasMoreElements()){
            // 获得下一个元素
            String headerName = it.nextElement();
            // 根据请求头名获取值
            String headerValue = request.getHeader(headerName);
            out.println(headerName+":"+headerValue + "<br>");
        }
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}
  • 网页显示如下图:

在这里插入图片描述

设置Servlet模板

在这里插入图片描述

1.3 小结

HttpServletRequest对象的方法功能描述
String getHeader(String headName)根据请求头名字获得值
Enumeration getHeaderNames()获得所有请求头的名字
返回的一个迭代器
hasMoreElement:判断是否有下一个元素
nextElement:获得下一个元素

09_获取请求参数相关方法-[掌握]

1.1 目标

使用请求对象的方法获取请求参数信息

1.2 示例演示

  • 需求:用户注册得到表单提交的参数

  • 准备表单数据

<h2>用户注册</h2>
<form action="register" method="post">
    用户名: <input type="text" name="name"><br/>
    性别: <input type="radio" name="gender" value="" checked="checked"/><input type="radio" name="gender" value=""/><br/>
    城市:
    <select name="city">
        <option value="广州">广州</option>
        <option value="深圳">深圳</option>
        <option value="珠海">珠海</option>
    </select>
    <br/>
    爱好:
        <input type="checkbox" name="hobby" value="上网"/>上网
        <input type="checkbox" name="hobby" value="上学"/>上学
        <input type="checkbox" name="hobby" value="上车"/>上车
        <input type="checkbox" name="hobby" value="上吊"/>上吊
    <br/>
    <input type="submit" value="注册"/>
</form>
  • 创建RegisterServlet:获得所有表单参数并输出
package com.pkx._03request_params;

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 java.io.IOException;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.Map;

/**
 需求:用户注册得到表单提交的参数
 */
@WebServlet(urlPatterns = "/register")
public class RegisterServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
         request.setCharacterEncoding("utf-8");
         // 设置内容类型和编码
         response.setContentType("text/html;charset=utf-8");
         // 获得字符打印流
         PrintWriter out = response.getWriter();

        // 根据参数名获得参数值
        String username = request.getParameter("username");
        out.println("username = " + username + "<br>");

        // 根据参数名获得多个参数值
        String[] hobbies = request.getParameterValues("hobby");
        out.println("hobbies = " + Arrays.toString(hobbies) + "<hr>");

        // 获得所有请求参数的名字
        Enumeration<String> it = request.getParameterNames();
        // 遍历所有名字
        while (it.hasMoreElements()) {
            // 获得参数名字
            String name = it.nextElement();
            // 根据参数名获得值
            String[] values = request.getParameterValues(name);
            out.println(name + " = " + Arrays.toString(values) + "<br>");
        }

        out.println("<hr>");
        // 获得所有请求参数信息:封装到map集合中
        // key:参数名  value:参数的值
        Map<String, String[]> map = request.getParameterMap();
        for (Map.Entry<String, String[]> entry : map.entrySet()) {
            out.println(entry.getKey() + " = " + Arrays.toString(entry.getValue()) + "<br>");
        }
    }
}

1.3 小结

HttpServletRequest对象的方法描述
String getParameter(String name)根据参数名获得参数值
String[] getParameterValues(String name)根据参数名获得多个参数值
返回是数组
Enumeration getParameterNames()获得所有请求参数的名字
返回迭代器对象
Map<String,String[]> getParameterMap()获得所有请求参数信息
返回map集合
key:参数名 value:参数值

10_BeanUtils工具使用-封装参数-[掌握]

1.1 目标

利用BeanUtils工具实现数据的封装:将Map集合数据封装到JavaBean对象中

1.2 示例演示

  • 将BeanUtils相关jar包导入项目,如下图位置

在这里插入图片描述

  • User类代码
/**
    JavaBean/entity
 */
public class User {
    // 成员变量
    private String username;
    private String gender;
    private String[] hobby;
    private String city;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String[] getHobby() {
        return hobby;
    }

    public void setHobby(String[] hobby) {
        this.hobby = hobby;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    @Override
    public String toString() {
        return "User{" +
                "username='" + username + '\'' +
                ", gender='" + gender + '\'' +
                ", hobby=" + Arrays.toString(hobby) +
                ", city='" + city + '\'' +
                '}';
    }
}
  • 利用BeanUtils将表单参数封装到User对象中
package com.pkx._03request_params;

import org.apache.commons.beanutils.BeanUtils;

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 java.io.IOException;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.Map;

/**
 需求:使用BeanUtils封装请求参数到JavaBean对象中
 */
@WebServlet(urlPatterns = "/register")
public class RegisterServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try{
            request.setCharacterEncoding("utf-8");
            // 设置内容类型和编码
            response.setContentType("text/html;charset=utf-8");

            // 获得请求参数信息
            Map<String, String[]> map = request.getParameterMap();

            // 创建User对象
            User user = new User();
            System.out.println("封装前:" + user);
            // 使用BeanUtils工具类的方法封装请求参数
            // populate:将map集合的数据封装到指定的对象中
            // 参数1:Object bean 自定义的JavaBean对象
            // 参数2:Map<String, ? extends Object> properties map集合
            // map集合的key和对象的成员变量名要一致才会封装
            BeanUtils.populate(user,map);

            System.out.println("封装后:" + user);
        } catch(Exception e){
            e.printStackTrace();
        }

        // 三层架构
        // 表现层 --> 业务层 --> 数据访问层 --> 操作数据库
        // JavaBean对象 实体类 Student
        // map ==> User ==>
        // User user = new User();
        // user.setUsername(username);
        // user.setGender(gender);
        // 只要满足三个条件的类就是一个JavaBean
        /*
           1. 类必须是public修饰的
           2. 类必须有public的无参数构造方法
           3. 成员变量必须提供对应的setter&getter方法
         */
    }
}

1.3 小结

BeanUtils常用方法作用
void populate(Object bean, Map<String, Object> properties)将map集合的数据封装到指定的bean对象
简单记忆:后付钱(后面的参数赋值给前面的对象)

11_参数的乱码问题-[掌握]

1.1 目标

能够说出参数乱码的原因并解决乱码问题

1.2 小结

乱码原因:Tomcat默认使用欧洲码表(ISO-8859-1:不支持汉字)解码参数
解决方法:
  	在获取请求参数之前通过请求对象的方法设置解码使用的码表,代码:request.setCharacterEncoding("utf8");

Tomcat8.0开始,GET方式请求不需要考虑乱码问题了,如果使用Tomcat8.0之前的版本,则也需要手动处理乱码问题,详情参考:https://blog.csdn.net/lxf512666/article/details/52939573/

12_转发和重定向概述-[掌握]

1.1 目标

能够说出转发和重定向的作用
掌握实现转发和重定向的方法

1.2 示例代码

  • 需求:使用转发和重定向实现页面跳转
package com.pkx._04forward_redirect;

import javax.servlet.RequestDispatcher;
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 java.io.IOException;

/**
  需求:当浏览器访问OneServlet时转发或重定向到TwoServlet
 */
@WebServlet(urlPatterns = "/one")
public class OneServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        // 实际开发会先处理业务逻辑

        // 转发到TwoServlet
        // 获得转发器对象
       /* RequestDispatcher requestDispatcher = request.getRequestDispatcher("two");
        // 调用转发器的方法执行转发操作:页面跳转
        requestDispatcher.forward(request, response);*/

        // 简化代码
        // request.getRequestDispatcher("two").forward(request, response);

        // 重定向到TwoServlet
        response.sendRedirect("two");

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}

1.3 小结

1. 转发和重定向的作用:实现页面的跳转
	
2. 实现转发和重定向的方法
	 转发的方法:request.getRequestDispatcher("要转发的页面地址").forward(request,response);
	 重定向方法:response.sendRedirect("重定向方法")

13_转发和重定向的区别-[理解]

1.1 目标

知道转发和重定向的区别(面试题)

1.2 转发和重定向的区别对比表

区别转发重定向
地址栏不会变化会变成重定向的页面地址
跳转位置服务器内部执行的跳转浏览器端执行的跳转
请求次数1次2次
请求域数据不会丢失会丢失
  • 面试题:转发或重定向后续代码还会执行吗?
还会执行,但没有意义了,一般不会在后面编写代码了
  • 面试题:什么时候使用转发,什么时候使用重定向?
如果需要共享请求域的数据,则只能使用转发,否则可以随便选择。

14_Servlet作用域概述-[掌握]

1.1 目标

知道作用域是什么以及作用是什么

1.2 讲解

1. 什么是作用域:服务器端的一小块内存区域,底层结构就是一个map集合,用于Servlet之间共享数据
2. Servlet的三个作用域:请求域、会话域、上下文域
  • 作用域相关方法
请求域相关方法作用
Object getAttribute(“键”)根据键从请求域中获得值
void setAttribute(“键”,Object数据)往请求域中存储键值对数据
void removeAttribute(“键”)根据键从请求域中删除键值对数据

15_请求域概述和演示-[掌握]

1.1 目标

使用请求域实现Servlet之间共享数据

1.2 示例演示

  • 需求:OneServlet 创建一个键和值,转发到另一个 TwoServlet,从 TwoServlet 中取出键和值,并且输出。
  • 示例代码
package com.pkx._05request_scope;

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 java.io.IOException;

/**
  需求:OneServlet 创建一个键和值,转发到另一个 TwoServlet,从 TwoServlet 中取出键和值,并且输出。
 */
@WebServlet(urlPatterns = "/first")
public class FirstServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 往请求域中存储键值对数据
        request.setAttribute("username", "lily");
        // 转发到second
        request.getRequestDispatcher("second").forward(request, response);

        // 重定向second
        // response.sendRedirect("second");
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}


package com.pkx._05request_scope;

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 java.io.IOException;
import java.io.PrintWriter;

/**
 * 目标:从请求域中获取数据并显示
 */
@WebServlet(urlPatterns = "/second")
public class SecondServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
         // 设置内容类型和编码
         response.setContentType("text/html;charset=utf-8");
         // 获得字符打印流
         PrintWriter out = response.getWriter();
         // 从请求域中获取数据
        Object username = request.getAttribute("username");
        out.println("用户名:" + username);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}

在这里插入图片描述

1.3 小结

请求域的作用范围:在同一次请求中有效 

16_案例:实现登录功能-功能分析和环境搭建-[掌握]

1.1 案例需求

  • 实现用户登录功能

1.2 案例效果

  1. 用户名和密码正确,将用户信息保存在请求域中,转发到另一个 Servlet,显示用户登录成功

  2. 用户名和密码错误,重定向到另一个 html 页面,显示登录失败。

  3. 使用表示层,业务层,数据访问层的三层结构实现

1.3 案例流程图


在这里插入图片描述

1.4 准备登录界面

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>用户登录</title>
</head>
<body>
<h2>用户登录</h2>
<form action="login" 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 colspan="2"><input type="submit" value="登录"/></td>
        </tr>
    </table>
</form>
</body>
</html>

17_案例:实现登录功能-控制器-[掌握]

1.1 步骤分析

 1. 接收请求参数:用户名和密码
 2. 判断用户名和密码是否正确
 3. 用户名和密码正确则跳转到欢迎页面(Servlet):获取用户信息显示
 4. 用户名和密码不正确则跳转到失败页面(html)

1.2 示例代码

package com.pkx._06login_demo;

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 java.io.IOException;

/**
 * 需求:实现登录逻辑处理
 *
 * 实现步骤
    1. 接收请求参数:用户名和密码
    2. 判断用户名和密码是否正确
    3. 用户名和密码正确则跳转到欢迎页面(Servlet):获取用户信息显示
    4. 用户名和密码不正确则跳转到失败页面(html)
 */
@WebServlet(urlPatterns = "/login")
public class LoginServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 0. 设置请求参数的编码
        request.setCharacterEncoding("utf-8");
        // 1. 接收请求参数:用户名和密码
        String username = request.getParameter("username");
        String password = request.getParameter("pwd");
        // 2. 判断用户名和密码是否正确:admin  admin
        if ("admin".equals(username) && "admin".equals(password)){
            // 3. 用户名和密码正确则跳转到欢迎页面(Servlet):获取用户信息显示
            // 3.1 往请求域中存储数据:用户数据(用户对象)
            request.setAttribute("username", username);
            // 3.2 转发到欢迎页面
            request.getRequestDispatcher("welcome").forward(request, response);
        } else {
            // 4. 用户名和密码不正确则跳转到失败页面(html)
            response.sendRedirect("error.html");
        }
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}

1.3 成功页面:SuccessServlet

package com.pkx._06login_demo;

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 java.io.IOException;
import java.io.PrintWriter;

// 需求:显示登录用户的名字
@WebServlet(urlPatterns = "/welcome")
public class WelcomeServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
         // 设置内容类型和编码
         response.setContentType("text/html;charset=utf-8");
         // 获得字符打印流
         PrintWriter out = response.getWriter();

         // 从请求域中获得用户名
        Object username = request.getAttribute("username");
        out.println("欢迎你回来:" + username);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}

1.4 失败页面:failure.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>登录失败</h1>
<a href="login.html">请重试</a>
</body>
</html>

18_关于根目录使用说明-[理解]

1.1 目标

能够在转发和重定向时正确使用根目录

1.2 根目录 /

在这里插入图片描述

package com.pkx._04forward_redirect;

import javax.servlet.RequestDispatcher;
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 java.io.IOException;

/**
  需求:当浏览器访问OneServlet时转发或重定向到TwoServlet


  /:代表根目录
  /:如果使用在客户端(浏览器)则代表浏览器端的根目录
  /:如果使用在服务器端则代表服务器端的根目录

  浏览器端的根目录:http://localhost:8080/
  服务器端的根目录:http://localhost:8080/项目访问地址/


    http://localhost:8080/day02/one
    http://localhost:8080/day02/two

 /:代表服务器端的根目录:http://localhost:8080/项目访问地址/
 */
@WebServlet(urlPatterns = "/one")
public class OneServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        // 实际开发会先处理业务逻辑

        // 转发到TwoServlet
        // 获得转发器对象
       /* RequestDispatcher requestDispatcher = request.getRequestDispatcher("two");
        // 调用转发器的方法执行转发操作:页面跳转
        requestDispatcher.forward(request, response);*/

        // 简化代码
        // 转发地址以/开头:/ 代表的是服务器端的根目录,因为转发是在服务器端执行的
        // 转发地址没有以/开头,则代表使用相对路径,相对当前Servlet的访问地址,和当前Servlet访问路径同级

        // c:/aa/bb/xx.txt    xx.txt
        // request.getRequestDispatcher("two").forward(request, response);

        // 重定向到TwoServlet
        // 重定向地址以/开头:/ 代表的是浏览器端的根目录,因为重定向是在浏览器端执行的
        // /:http://localhost:8080/
        response.sendRedirect("two");
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}

1.3 小结

服务器端根目录:http://localhost:8080/项目访问地址/
浏览器端根目录:http://localhost:8080/

19_在idea中切换部署项目-[掌握]

1.1 目标

通过idea切换项目的部署
通过idea同时部署多个项目
通过idea导入其他web项目并部署访问

1.2 小结

操作步骤参考word的第7节
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值