javaWeb之servlet:Request应用

Request需要掌握

Request对象

package com.kuang.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;


public class RequestDemo01 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //查看request对象的方式
        System.out.println(request.getContextPath()); //获得web项目路径
        System.out.println(request.getRequestURI()); //请求的URL路径
        //Remote 远程
        System.out.println(request.getRemoteUser()); //获得远程的用户名
        System.out.println(request.getRequestedSessionId()); //获得SessionId;
        System.out.println(request.getServletPath()); //请求servlet的url
        System.out.println(request.getLocalAddr()); //获得本地地址  防火墙
        System.out.println(request.getLocalName()); //获得本地名字
        System.out.println(request.getLocalPort()); //获得访问的端口号

    }

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

Request对象接收前端用户提交的参数

1.写前端注册页面

  • 表单的提交方式 get/post
  • 表单提交的位置 action:服务项目的路径/servlet对应的请求url
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>注册</title>
</head>
<body>


<%--
JSP的注释
--%>


<%--
Form表单
    action:代表要提交的路径,表单要提交到哪里 ,可以提交到一个Servlet
        //提交到Servlet需要,获取到Web项目的路径下的Servlet
    method: 提交表单的方式
--%>
<h1>注册</h1>

<form action="${pageContext.request.contextPath}/r2" method="post">

    <p>用户名:<input type="text" name="username"></p>
    <p>密码:<input type="password" name="password"></p>

    <p>
        <input type="submit">
        <input type="reset">
    </p>

</form>



</body>
</html>

2.写处理前端提交信息的Servlet

  • 接收前端传递的控件信息, request.getParameter(“控件的name‘);
package com.kuang.servlet;


import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

//处理前端提交过来的数据
public class RequestDemo02 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 {

        //通过HttpServletRequest获取前端用户提交的信息
        //req.getParameterValues(); 获得前端传递的控件信息,通过控件的name;但是可以接受多个参数的控件,比如(多选框....)
        //req.getParameter(); 获得前端传递的控件信息,通过控件的name;

        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");

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

        //连接数据库,比较数据库中的信息是否匹配

        if (username.equals("admin")&&password.equals("1234567")){
            System.out.println("登录成功!"); //跳转到成功页面
        }else {
            System.out.println("登录失败!"); //提示重新注册
        }

        System.out.println(username);
        System.out.println(password);


    }
}

3.配置web.xml

  • 配置对应的XML文件

    <servlet>
        <servlet-name>RequsetDemo02</servlet-name>
        <servlet-class>com.kuang.servlet.RequestDemo02</servlet-class>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>RequsetDemo02</servlet-name>
        <url-pattern>/r2</url-pattern>
    </servlet-mapping>

4.提交测试

  • 检查英文提交情况,服务器是否接收成功!
  • 提交中文,看看乱码情况
  • 设置编码统一,解决乱码问题;

Request实现请求转发

  1. 重定向:服务器告诉客户端你应该请求另外一个地址; (地址栏会变)

    使用:resp.sendRedirect(“url”);

  2. 转发:服务器把这个请求转向另外一个Servlet去处理; (地址栏不会变)
    使用:RequestDispatcher ,需要使用RequestDispatcher来进行处理,我们需要获得这个类
    //参数就是他要转发到的页面

RequestDispatcher requestDispatcher = req.getRequestDispatcher("/success.jsp");
requestDispatcher.forward(req,resp);

在这里插入图片描述
servlet编写:

package com.kuang.servlet;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class FormServlet1 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");

        System.out.println("接收到的用户名:"+username+"\n密码:"+password+"\n爱好:");

        String[] hobbies = req.getParameterValues("hobby");

        for (String hobby : hobbies) {
            System.out.println(hobby);
        }

        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        req.getRequestDispatcher("/success.jsp").forward(req,resp);


    }
}

register.jsp编写:


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>注册</title>
</head>
<body>

<h1>注册</h1>

<form action="${pageContext.request.contextPath}/register" method="post">

    <p>
        <%-- 控件必须有name属性,因为Servlet要通过name才能接收到用户输入的信息 --%>
        用户名:<input type="text" name="username">
    </p>

    <p>
        密码:<input type="password" name="password">
    </p>

    <p>
        爱好 :
        <input type="checkbox" name="hobby" value="girl">女孩
        <input type="checkbox" name="hobby" value="code">代码
        <input type="checkbox" name="hobby" value="movie">电影
        <input type="checkbox" name="hobby" value="music">音乐
    </p>

    <p>
        <input type="submit" value="提交">
        <input type="reset" value="重置">
    </p>

</form>

</body>
</html>

success编写:


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

<h1>注册成功!</h1>


</body>
</html>

注意:
**转发和重定向的区别 (面试常见题:笔试)

重定向:服务器告诉客户端,你去请求另外一个地址;客户端行为

  • 地址栏会变

  • 不能携带参数

转发:服务器自己转发到服务器上的另一个请求; 服务器行为

  • 地址栏不会变
  • 可以携带参数**
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章