JavaWeb--快速入门Servlet(三)

简介: JavaWeb--快速入门Servlet(三)

五、HttpServletRequest类



HttpServletRequest 类有什么作用

每次只要有请求进入 Tomcat 服务器,Tomcat 服务器就会把请求过来的 HTTP 协议信息解析好封装到 Request 对象中。 然后传递到 service 方法(doGet 和 doPost)中给我们使用。我们可以通过 HttpServletRequest 对象,获取到所有请求的信息。


HttpServletRequest 类的常用方法

getRequestURI() 获取请求的资源路径


getRequestURL() 获取请求的统一资源定位符(绝对路径)


注意区分两者


getRemoteHost() 获取客户端的ip 地址


getHeader() 获取请求头


getParameter() 获取请求的参数


getParameterValues() 获取请求的参数(多个值的时候使用)


getMethod() 获取请求的方式GET 或POST


setAttribute(key, value) ; 设置域数据


getAttribute( key); 获取域数据


getRequestDispatcher() 获取请求转发对象


实例


package com.caq.study;
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 RequestAPIServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取请求的资源路径
        System.out.println("URI=>"+req.getRequestURI());
        //获取请求的统一资源定位符(绝对路径)
        System.out.println("URI=>"+req.getRequestURL());
        System.out.println("客户端地址==>"+req.getRemoteHost());
        System.out.println("请求投User-Agent==》"+req.getHeader("User-Agent"));
        System.out.println("请求的方式==》"+req.getMethod());
    }
}


image.png


如何获取请求参数

实例


package com.caq.study;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Arrays;
public class ParameterServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String username = req.getParameter("username");
        String password = req.getParameter("password");
//        String hobby = req.getParameter("hobby");
        String[] hobbies = req.getParameterValues("hobby");
        System.out.println("用户名:"+username);
        System.out.println("密码:"+password);
        System.out.println("兴趣爱好:"+ Arrays.asList(hobbies));
    }
    @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");
//        String hobby = req.getParameter("hobby");
        String[] hobbies = req.getParameterValues("hobby");
        System.out.println("用户名:"+username);
        System.out.println("密码:"+password);
        System.out.println("兴趣爱好:"+ Arrays.asList(hobbies));
    }
}


image.png

请求的转发


image.png


实例


package com.caq.study;
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 Servlet1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String username = req.getParameter("username");
        System.out.println("在Servlet1中查看参数"+username);
        //域数据(盖章并传递给s2)
        req.setAttribute("key1","s1的章");
        //问路:S2怎么走?
        /**
         * 请求转发必须以斜杠打头,斜杠表示地址http:ip:port/工程名,映射到web目录
         */
        RequestDispatcher requestDispatcher = req.getRequestDispatcher("/servlet2");
        //走向servlet2
        requestDispatcher.forward(req,resp);//向前走
    }
}


package com.caq.study;
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 Servlet2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取请求的参数
        String username = req.getParameter("username");
        System.out.println("查看材料"+username);
        Object key1 = req.getAttribute("key1");
        System.out.println("s2是否有章"+key1);
        //处理自己的业务
        System.out.println("s2处理自己的业务");
    }
}


image.png


base标签的作用

base标签可以设置当前页面中所有相对路径工作时,参照哪个路径来进行跳转.


Web 中的相对路径和绝对路径

在 javaWeb 中,路径分为相对路径和绝对路径两种:


相对路径是:


. 表示当前目录


… 表示上一级目录


资源名 表示当前目录/资源名


绝对路径: http://ip:port/工程路径/资源路径


在实际开发中,路径都使用绝对路径,而不简单的使用相对路径。


1、绝对路径


2、base+相对


web 中 / 斜杠的不同意

在web 中/斜杠是一种绝对路径。


/斜杠如果被浏览器解析,得到的地址是:http://ip:port/


/斜杠如果被服务器解析,得到的地址是:http://ip:port/工程路径


六、HttpServletResponse类



HttpServletResponse类和 HttpServletRequest类一样。每次请求进来,Tomcat服务器都会创建一个Response对象传递给Servlet程序去使用。HttpServletRequest 表示请求过来的信息,HttpServletResponse表示所有响应的信息


我们如果需要设置返回给客户端的信息,都可以通过 HttpServletResponse对象来进行设置


两个输出流的说明

字节流 getOutputStream(); 常用于下载(传递二进制数据)


字符流 getWriter(); 常用于回传字符串(常用)


两个流同时只能使用一个。


使用了字节流,就不能再使用字符流,反之亦然,否则就会报错。


如何往客户端回传数据


public class ResponseroServlet extends HttpServlet {
  @Override
  protected void doGet(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException {
//要求:往客户端回传字符串数据。
  Printwriter writer = resp.getwriter();
    writer.write( "response's content! ! !");


通过代码我们也看出了是通过流的方式进行传数据的


请求重定向

请求重定向,是指客户端给服务器发请求,然后服务器告诉客户端说。我给你一些地址。你去新地址访问。叫请求重定向(因为之前的地址可能已经被废弃)。


image.png


请求重定向的第一种方案:


//设置响应状态码302,表示重定向,(已搬迁)
 resp.setStatus(302);
 //设置响应头,说明新的地址在哪里
 resp.setHeader(“Location”, “http:// localhost:8080”);
请求重定向的第二种方案(推荐使用):
resp. sendRedirect( “http: / / localhost:8080” );


相关文章
|
3月前
|
Java 应用服务中间件 Maven
JavaWeb基础5——HTTP,Tomcat&Servlet
JavaWeb技术栈、HTTP、get和post区别、响应状态码、请求响应格数据式、IDEA使用Tomcat、报错解决、Servlet的体系结构、IDEA使用模板创建Servlet
JavaWeb基础5——HTTP,Tomcat&Servlet
|
6月前
|
Java 应用服务中间件
Servlet简介&快速入门
Servlet简介&快速入门
|
6月前
|
SQL druid Java
javaweb案例实训之基于jsp和servlet的用户管理开发[增删改查及登录注销]
javaweb案例实训之基于jsp和servlet的用户管理开发[增删改查及登录注销]
46 0
|
6月前
|
SQL 数据可视化 数据库
基于jsp+servlet的javaweb实现最基本的用户注册登陆注销功能
基于jsp+servlet的javaweb实现最基本的用户注册登陆注销功能
29 0
|
7月前
|
存储 安全 JavaScript
JavaWeb之Servlet(下)
本文主要介绍了JavaWeb开发中关于请求、响应、会话和Servlet3.0注解的相关知识。首先讲解了请求(Request)的常用方法,以及处理请求乱码问题的几种方式。接着讨论了响应(Response)的方法,,以及设置全局初始化参数。然后介绍了会话(Session)的概念,包括其生命周期、如何设置和获取初始化参数,并对比了全局初始化参数和Servlet3.0的`@WebServlet`注解。文中给出了具体的代码示例和测试结果,帮助读者更好地理解和掌握这些概念。
|
7月前
|
Java 应用服务中间件 程序员
JavaWeb之Servlet(上)
本篇博文介绍了JavaWeb中Servlet的基本概念和应用。Servlet是用于交互式浏览和修改数据、生成动态Web内容的Java程序,通常运行在支持Java的应用服务器上。文章讲解了Servlet的工作模式,包括客户端请求、服务器调用Servlet以及响应返回客户端的过程。此外,还提到了Servlet API,特别是doGet和doPost方法用于处理请求和响应。作者通过创建第一个Servlet的步骤,展示了如何实现Servlet接口并配置web.xml文件。最后,文章简述了Servlet的工作原理和生命周期,强调了Servlet的单例特性以及初始化、服务和销毁的过程。
|
7月前
|
存储 前端开发 Java
JavaWeb:servlet+jsp+mybatis商品管理增删改查
商品管理通常包括增加(添加)、删除、修改和查询商品信息
185 1
JavaWeb:servlet+jsp+mybatis商品管理增删改查
|
7月前
|
Java
Servlet快速入门
Servlet快速入门
34 0
|
4月前
|
缓存 安全 Java
Java服务器端技术:Servlet与JSP的集成与扩展
Java服务器端技术:Servlet与JSP的集成与扩展
42 3
|
4月前
|
存储 缓存 前端开发
Servlet与JSP在Java Web应用中的性能调优策略
Servlet与JSP在Java Web应用中的性能调优策略
43 1

相关实验场景

更多