Servlet 学习笔记3

news/2024/11/17 23:56:17/

一、HttpServletRequest类

a)HttpServletRequest类的作用

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

b)HttpServletRequest类的常用方法

getRequestURI();    获取请求的资源路径
getRequestURL();    获取请求的统一资源定位符(绝对路径)
getRemoteHost();    获取客户端的ip地址
getHeader();        获取请求头
getParameter();     获取请求的参数
getParameterValues(); 获取请求的参数(多个值的时候使用)
getMethod();        获取请求的方式
setAttribute();     设置域数据
getAttribute();     获取域数据
getRequestDispatcher(); 获取请求转发对象
public class RequestAPIServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        getRequestURI();    获取请求的资源路径System.out.println("URI => " + req.getRequestURI());
//        getRequestURL();    获取请求的统一资源定位符(绝对路径)System.out.println("URL => " + req.getRequestURL());
//        getRemoteHost();    获取客户端的ip地址System.out.println("客户端ip地址:" + req.getRemoteHost());/*在IDEA中,使用localhost访问时,得到的客户端ip地址为 127.0.0.1* 如果使用真实的ip地址如 http://192.168.184.1:8088/web04_servlet/request* 得到的客户端ip地址为真实ip地址*/
//        getHeader();        获取请求头System.out.println("请求头User-Agent:"+req.getHeader("User-Agent"));/*Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36*/
//        getMethod();        获取请求的方式System.out.println("请求的方式:" + req.getMethod());}

运行结果:

URI => /web04_servlet/request
URL => http://192.168.184.1:8088/web04_servlet/request
客户端ip地址:192.168.184.1
请求头User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36

获取请求参数:

public class ParameterServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//获取请求参数String username = req.getParameter("username");String password = req.getParameter("password");String[] hobby = req.getParameterValues("hobby");System.out.println("用户名:" + username);System.out.println("密码:" + password);System.out.println("兴趣爱好:" + Arrays.asList(hobby));}
}

运行结果:

用户名:12345
密码:wee
兴趣爱好:[cpp, java, js]

【post请求中文乱码问题】:

在doPost()方法中修改编码集, 注意要在获取请求参数之前调用才有效!

req.setCharacterEncoding("UTF-8");

c)请求转发

请求转发是指服务器收到请求后,从一个资源跳转到另一个资源的操作叫请求转发。

public class Servlet1 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//一个业务需要先在servlet1中执行 再去servlet2//查看参数String username = req.getParameter("username");System.out.println("在servlet1中查看参数:" + username);//使用域数据 给材料盖一个章 并传递到servlet2去查看req.setAttribute("key","Servlet1 over");//问路 servlet2的路/*请求转发 必须要以斜杠打头, 斜杠表示地址为http://ip:port/工程名, 映射到idea代码的web目录*/RequestDispatcher requestDispatcher = req.getRequestDispatcher("/servlet2");//走向 servlet2requestDispatcher.forward(req, resp);}
}
public class Servlet2 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//查看参数String username = req.getParameter("username");System.out.println("在servlet2中查看参数:" + username);//查看servlet1是否盖章over  key一定要相同!Object key = req.getAttribute("key");System.out.println("servlet1是否结束:" + key);//处理自己的业务System.out.println("servlet2 处理了自己的业务");}
}

【请求转发的特点】

1、浏览器地址栏没有变化

2、他们是一次请求

3、他们共享Request域中的数据

4、请求转发可以进入到WEB-INF目录下

5、不可以访问工程以外的资源,只能在自己的工程中跳转

d)base标签的作用

base标签可以设置当前页面中所有相对路径工作时,参照哪个路径来进行跳转。否则会默认以当前浏览器地址栏中的地址为参考。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><!--base标签设置页面相对路径工作时参照的地址 href为参照的地址值 最后的斜杠不能省略--><base href="http://localhost:8088/web04_servlet/a/b/">
</head>
<body>这是a下的b下的c.html页面<br/><a href="../../index.html">跳回首页</a><br/></body>
</html>

h)web中 / 斜杠的不同意义

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

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

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

       如:<url-pattern>/forwardc</url-pattern>

            servletContext.getRealPath("/");

            request.getRequestDispatcher("/");

特殊情况:response.sendRediect("/") 请求重定向,把斜杠发送给浏览器解析,得到 http://ip:port/


http://www.ppmy.cn/news/402932.html

相关文章

那些年吃过的点心

豆沙粑粑和椒盐饼东西算是小时候比较著名和难忘的点心了&#xff0c;比较出名的绿豆糕反而没有什么好感。 豆沙粑粑就是死面皮包豆沙打扁了&#xff0c;类似于昆明的官渡粑粑&#xff0c;不过馅是豆沙而已&#xff0c;微甜&#xff1b; 豆沙粑粑.jpg 椒盐饼就像一个压扁了花卷&…

pkg_resources.DistributionNotFound: The ‘tzlocal>=1.2‘ distribution was not found and is required by

PyInstaller打包APscheduler出现&#xff1a;pkg_resources.DistributionNotFound: The xxx>yyy distribution was not found and is required by the application 1.软件环境⚙️2.问题描述&#x1f50d;3.解决方法&#x1f421;3.1.添加APScheduler依赖项的元数据 4.结果预…

java和嵌入式,哪个好?

一、薪资方面 必须承认&#xff01;嵌入式是无法和Java比的&#xff0c;至少目前来看如此&#xff0c;我有位嵌入式的朋友&#xff0c;干了2年了&#xff0c;薪资才到14K&#xff0c;但是你看看Java&#xff0c;两年工作经验&#xff0c;18k的满街跑&#xff01; 这其实是因为&…

Tensorflow 2.3 model.evaluate报错InvalidArgumentError: Incompatible shapes: [1,64] vs. [1,128]

Tensorflow 2.3使用model.evaluate进行模型评估时报错tensorflow.python.framework.errors_impl.InvalidArgumentError: Incompatible shapes: [1,64] vs. [1,128] 1.软件环境⚙️2.问题描述&#x1f50d;3.解决方法&#x1f421;4.结果预览&#x1f914; ⚡插播一条老家自产的…

完美国际真数苹果_端阳果园|云南昭通冰糖心丑苹果

有一种丑苹果在云南昭通受到很多人的青睐&#xff0c;为啥丑还有那么多人喜欢呢&#xff1f;这就要从云南昭通丑苹果的生长环境以及生产过程有很大关系。 昭通丑苹果的生长环境 昭通&#xff0c;地处长江上游生态屏障之地&#xff0c;气候、降水、光照都极为适合苹果生长&#…

来自雪域高原的馈赠——海拔2000米的大凉山高原生态糖心苹果

来自雪域高原的馈赠——海拔2000米的大凉山高原生态糖心苹果 1.水果之王——苹果的健康功效2.大凉山高原生态糖心苹果3.品种与成熟月份4.规格与购买方式 图1. 大凉山高原生态糖心苹果 1.水果之王——苹果的健康功效 一天一个苹果是人们熟知的健康口号。的确&#xff0c;苹果含…

【Android】Room数据库怎么获取最后一个数据

需求 从Room数据库中获取到数据库表的最后一行数据 实现 方法一 通过查询某个表格的所有数据并按照逆序排序&#xff0c;然后获取第一个数据来获取最后一个数据。 1.在 DAO 接口中定义一个查询方法&#xff0c;用于查询某个表格的所有数据并按照逆序排序&#xff08;例如按…

String[] split = stantValue.split(“\\(“);

String[] split stantValue.split("\\("); AI:please wait... 这行代码将一个字符串 stantValue 按照左括号 ( 进行分割&#xff0c;并将分割后的子字符串存储在字符串数组 split 中。 在 Java 中&#xff0c;字符串的 split 方法可以根据指定的分隔符对字符串进行…