JavaWeb第三天之Servlet的学习(下)

学习目标

  • Servlet一系列方法

1. Servlet获取前端提交的参数

Servlet重点在于请求和响应
在客户端发起请求,通过Servlet将值传递到浏览器中并在前端进行显示

首先,在webapp下创建login.jsp,发出请求我们需要在前端利用form表单提交数据action要跳转到的Servlet请求,method提交方式
login.jsp

    <form action="login" method="post">
        账号:<input type="text" name="username">
        密码:<input type="text" name="password">
        <input type="submit" value=" 登 录 ">
    </form>

(选择) 在tomcat中默认加载为index.jsp 如果想要更改可以在WEN-INF下的web.xml中更改
web.xml

  <welcome-file-list>
       <welcome-file>login.jsp</welcome-file>
   </welcome-file-list>

创建LoginServlet类,并在中写入代码。

@WebServlet("/login")
public class LoginServlet extends HttpServlet {
   @Override
   protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       doPost(req,resp);
   }

   @Override
   protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       //防止发出请求乱码
       req.setCharacterEncoding("utf-8");
       //获得前端传递的数据
       String username = req.getParameter("username");
       String password = req.getParameter("password");
       //防止响应出现乱码
       resp.setContentType("text/html;charset=utf-8");
       //将数据写到前端
       resp.getWriter().write("名字为:"+username+"  密码为:"+password);
   }
}

在这里插入图片描述
在此条件下运行tomcat
在这里插入图片描述
在这里插入图片描述

2 重定向和转发

重定向和转发都可以进行页面跳转,重定向是重写给服务器发送一个请求一共两个请求,而转发是一个请求,在重定向中请求带的参数会丢失,但是转发不会不会丢失Servlet请求中传递的数据
接下来我们来学习重定向和转发

2.1 重定向

用户通过浏览器发送一个请求,服务器接收到请求之后,会向浏览器发送一个302的状态码,并设置一个重定向路径,浏览器接收到302状态码之后会自动跳转到指定的路径
应用场景 一个页面跳转到另一个页面
login.jsp==》LoginServlet==>main.jsp中

  • 重定向的特征
  • 重定向是浏览器(客户端)的行为
  • 实际上浏览器发送了两次请求(用户点击对应按钮)分别是login.jsp和main.jsp
  • 注意上一次请求的request会丢失,也就是传递的数据会丢失
  • 重定向有个非常明显的特征,浏览器的url改变
  • 重定向的核心代码
responser.SendRedirect("main.jsp");//此代码要写到doGet()或者doPost()中

2.1.2代码组成
login.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <form action="login" method="post">
        账号:<input type="text" name="username">
        密码:<input type="text" name="password">
        <input type="submit" value=" 登 录 ">
    </form>
</body>
</html>

main.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
这是main页面
<%--获得传递的数据Redirect传递的数据会丢失,无法获得--%>
${username}
${password}
</body>
</html>

RedirectServlet类

package com.lx.servletStudy;

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;


@WebServlet("/redirect")
public class RedirectServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       //更改前端请求编码格式
        req.setCharacterEncoding("utf-8");
        //接收前端填写的数据
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        //将数据添加到数据池中
        req.setAttribute("username",username);
        req.setAttribute("password",password);
        //登录后跳转到主页
        //重定向到主页
        //重定向无法传递数据
        resp.sendRedirect("main.jsp");
    }
}

测试结果,重定向会丢失请求传递的数据
在这里插入图片描述
在这里插入图片描述

2.2 转发

用户发送请求到服务器, 服务器接收到请求,使用内部方式(转发)处理请求,最终把响应给客户端
特征

  • 转发是服务器的行为
  • 浏览器在整个过程中只有一次行为
  • 转发可以获得reuqest的数据
  • url不会改变
  • 核心代码也只有一行
request.getRequestDispatcher("main.jsp").forward(request,response);
//这一行代码就表示进行了转发,url没有变,但是响应的结果却是一次请求干了两个活

login.jsp代码

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <form action="forward" method="post">
        账号:<input type="text" name="username">
        密码:<input type="text" name="password">
        <input type="submit" value=" 登 录 ">
    </form>
</body>
</html>

main.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
这是main页面
<%--获得传递的数据forward传递的数据不会丢失,可以获得--%>
${username}
${password}
</body>
</html>

forwardServlet代码

package com.lx.servletStudy;

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;

@WebServlet("/forward")
public class forwardServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置前端传递数据的格式
        req.setCharacterEncoding("utf-8");
        String username = req.getParameter("username");
        String password = req.getParameter("password");

        //数据填写到池子中
        req.setAttribute("username",username);
        req.setAttribute("password",password);
        //转发
        req.getRequestDispatcher("main.jsp").forward(req,resp);
    }
}

代码测试结果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值