Java研学-Servlet 进阶

一 请求对象

1 HttpServletRequest

  HttpServletRequest 是一个接口,该接口的实现类对象称为请求对象,请求对象封装了所有的请求信息(请求行,请求头,请求体(请求参数))。
  HttpServletRequest 接口包含了大量的方法。由 Tomcat 去实现这个对象,并且在 servlet 启动的时候调用service() 将请求对象传递进来了,在 service 方法中可直接使用。

2 请求常用方法

① request 与请求行相关方法

request 与请求行相关方法说明
String getMethod()获得请求方式 GET 或 POST
String getRequestURI()Uniform Resource Identifier统一资源标识符,代表一个资源名字
StringBuffergetRequestURL()Uniform Resource Locator 统一资源定位符,代表一个可以访问地址
String getProtocol()获得协议和版本
String getContextPath()获得上下文路径(项目名path)

② request 与请求头相关方法

request 与请求头相关方法说明
String getHeader(String headName)得到指定的请求头的值参数:键的名字 返回:相应请求头的值

③ request与请求参数相关方法

request与请求参数相关方法说明
String getParameter(String name)通过参数名得到一项参数值
String[] getParameterValues(String name)根据参数名得到一组同名的值复选框,下拉列表多选
Enumeration getParameterNames()获得所有的参数名
Map getParameterMap()得到表单所有的参数键和值,封装成Map对象

④ Enumeration接口中方法

Enumeration接口中方法说明
boolean hasMoreElements()如果还有其它元素,返回true
E nextElement()返回下一个元素

3 获取请求行与头

@WebServlet("/play")
public class Play extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 获取请求行System.out.println(req.getMethod());     //方法System.out.println(req.getRequestURI()); //统一资源标识符System.out.println(req.getRequestURL()); //统一资源定位符System.out.println(req.getProtocol());   //协议和版本System.out.println(req.getContextPath());//当前项目地址// 获取请求头值System.out.println(req.getHeader("user-agent"));}
}

4 获取请求参数

① 创建页面

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>TJ</title>
</head>
<body>
<h3>用户注册</h3>
<form action="/play" method="post">name:<input type="text" name="name"><br/>sex:<input type="radio" name="sex" value="man" checked="checked"/>man<input type="radio" name="sex" value="woman"/>woman <br/>city:<select name="city"><option value="牙克石">牙克石</option><option value="大雁">大雁</option><option value="根河">根河</option></select><br/>hobby:<input type="checkbox" name="hobby" value="run"/>run<input type="checkbox" name="hobby" value="swim"/>swim<input type="checkbox" name="hobby" value="work"/>work<br/><input type="submit" value="submit"/>
</form>
</body>
</html>

② 获取页面中的数据

@WebServlet("/play")
public class Play extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 设置请求参数编码 放在获取请求参数之前req.setCharacterEncoding("utf-8");// 根据参数名获得参数值System.out.println("name:" + req.getParameter("name"));// 得到一个字符串数组String[] hobbies = req.getParameterValues("hobby");// 得到多个参数System.out.println("hobby:" + Arrays.toString(hobbies));// 得到所有参数的名字Enumeration<String> parameterNames = req.getParameterNames();while (parameterNames.hasMoreElements()) {// 得到其中一个名字String name = parameterNames.nextElement();System.out.println("param:" + name + ",value:" +req.getParameter(name));}// 得到所有的键和值Map<String, String[]> map = req.getParameterMap();map.forEach((k,v) -> System.out.println("key:" + k + ",value:" +Arrays.toString(v)));}
}

二 响应对象

1 HttpServletResponse

  HttpServletResponse 是一个接口,该接口的实现类对象称为响应对象,用于响应数据(响应行,响应头,响应体)给浏览器。HttpServletResponse 接口包含了大量的方法。由 Tomcat 去实现这个对象,并且在 servlet 启动的时候调用 service() 将请求对象和响应对象传递进来了。于 service 方法中可直接使用。

2 响应常用方法

响应体相关的方法功能描述
OutputStream getOutputStream()服务器端返回的是二进制数据(图片)使用此方法
PrintWriter getWriter()服务器端返回的是字符的文本数据,使用此方法

3 进行响应

@WebServlet("/play")
public class Play extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//设置响应编码resp.setContentType("text/html;charset=utf-8");//响应字符信息到客户端PrintWriter writer = resp.getWriter();//writer.write("请求完成,响应数据返回!.......");//可以将html标签作为字符串响应到页面String s = "<p><a href=\"http://www.baidu.com\" style=\"color: red;background-color: aqua\">百度一下</a></p>";writer.write(s);}
}
解决中文乱码的方法说明
response.setCharacterEncoding(“字符集”)用于设置响应体的字符集,设置打印流使用的码表
void setContentType(String type)1. 告诉浏览器返回内容类型,2. 设置打印流编码,必须在获取流之前设置,否则无效

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/315676.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CF626F. Bear and Fair Set

CF626F. Bear and Fair Set Solution 单走一个网络流。 先对余数0..40..40..4分别建一个点&#xff0c;从S−>0..4S->0..4S−>0..4分别连容量n/5n/5n/5的边。 对于每一个限制&#xff0c;相当于把[0,b][0,b][0,b]分成了若干个小区间&#xff0c;并且可以求得每个小…

ASP.NET Core SameSite 设置引起 Cookie 在 QQ 浏览器中不起作用

最近在发布了基于 ASP.NET Core 实现的新版登录页面之后&#xff0c;陆陆续续地接到用户反馈登录时 Antiforgery Token 总是验证失败。日志中记录的对应错误是今天在 QQ 浏览器中将内核模式设置为“总是使用 IE 内核”重现了问题&#xff0c;通过浏览器的开发者工具查看 cookie…

CF372D. Choosing Subtree is Fun

CF372D. Choosing Subtree is Fun Solution 想了一晚都不会&#xff0c;一觉醒来就悟了QwQQwQQwQ 之前一直想着如何用类似树形DPDPDP的方法求出每一个点的贡献再合并&#xff0c;然后突然发现直接枚举区间就行了。 考虑区间确定时&#xff0c;其实就是求区间内节点在原树上的…

ASP.NET Core - 基于IHttpContextAccessor实现系统级别身份标识

问题引入&#xff1a;我们知道当请求通过认证模块时&#xff0c;会给当前的HttpContext赋予当前用户身份标识&#xff0c;我们在需要授权的控制器中打上[Authorize]授权标签&#xff0c;就可以在ControllerBase的User属性获取到基于声明的权限标识(ClaimsPrincipal)。遗憾的是这…

怎样学习和阅读技术书籍?

技术的更新换代非常的迅速&#xff0c;作为一个技术人&#xff0c;需要持续不断地学习才能不被淘汰。但是学习没有速成的方法&#xff0c;只可能有一些技巧让我们事半功倍&#xff0c;本文是我对学习和读书的一点思考。学习是一件「逆人性」的事&#xff0c;如果让你选择是学习…

CF653F. Paper task

CF653F. Paper task 简要题面 给定括号序列SSS&#xff0c;求其中本质不同合法括号序列个数。(∣S∣≤5∗105|S|\leq 5*10^5∣S∣≤5∗105) Solution 感觉用了一个很麻烦的方法。 我们可以考虑枚举本质不同串的右端点&#xff0c;每次动态地在SAMSAMSAM里面加入末尾元素&am…

52ABP和ABP的关系

52ABP和ABP的关系本文作者&#xff1a;52ABP开发团队 文章会随着版本进行更新&#xff0c;关注我们获取最新版本 本文出处&#xff1a;https://www.52abp.com/wiki/common/latest 源代码&#xff1a; https://www.github.com/52abp 52ABP和ABP的关系ASP.NET Boilerplate是一个开…

CF1167F. Scalar Queries

CF1167F. Scalar Queries Solution 拆贡献&#xff0c;自身的贡献为bi∗(i−1)∗(n−i)b_i*(i-1)*(n-i)bi​∗(i−1)∗(n−i)&#xff0c;每一个左边比他小的数bjb_jbj​会产生bi∗j∗(n−i)b_i*j*(n-i)bi​∗j∗(n−i)的贡献&#xff0c;需要维护∑j\sum_{j}∑j​&#xff0…

【译】C#9的候选功能

通往C# 9 的漫长道路已经开始了&#xff0c;这是世界上第一篇关于C# 9候选功能的文章。阅读完本文后&#xff0c;你将希望为将来遇到新的C#挑战做好充分准备。 这篇文章基于&#xff1a;C#语言版本计划 9.0 候选功能基于记录和模式匹配的表达式我一直在长时间等待这个功能。记录…

CF641D. Little Artem and Random Variable

CF641D. Little Artem and Random Variable Solution 设给定的两个序列为mx1..n,mn1..nmx_{1..n},mn_{1..n}mx1..n​,mn1..n​。 令第一个骰子投到1..n1..n1..n的概率为p1..np_{1..n}p1..n​ 令第二个骰子投到1..n1..n1..n的概率为q1..nq_{1..n}q1..n​ 显然有 mxi(∑j≤ipj)…

AKS开讲啦! | DevOps with AKS

上周小Phippy搬到了Kube船长船上的Pods里&#xff0c;感觉好极了&#xff0c;那今天我们继续看看Phippy的兴趣爱好哦。探索Kube船上的世界上篇&#xff08;点击回顾&#xff09;小Phippy 搬到了船上的Pods里&#xff0c;感受到了回家般的舒适感&#xff0c;小Phippy希望能发挥一…

CF1157G. Inverse of Rows and Columns

CF1157G. Inverse of Rows and Columns Solution 首先枚举第一行是否变换&#xff0c;再枚举第一行的010101状态&#xff0c;即可确定列变换。 然后对于之后的行变换&#xff0c;从前往后贪心地让111出现得尽可能晚即可。 Code #include <vector> #include <list&…

把文件隐藏在图片中

一、前言有的时候我们需要把文件给隐藏起来&#xff0c;但是Windows自带的隐藏方式还是很容易被发现的。这时候我们可以选择把文件放在网盘&#xff0c;但这毕竟需要网络。不过&#xff0c;我们可以通过Windows自带的功能&#xff0c;把文件隐藏在图片中。是不是有一种大隐隐于…

CF1156F. Card Bag

CF1156F. Card Bag Solution 概率DPDPDP。 记cnticnt_icnti​表示有多少个ajia_jiaj​i&#xff0c;再把aia_iai​离散化。 令fi,jf_{i,j}fi,j​表示当前取过iii个数&#xff0c;当前取到了aja_jaj​的概率。 fi,jfi−1,k∗cntain−i1f_{i,j}f_{i-1,k}*\frac{cnt_{a_i}}{n-i1…

.NetCore下使用Polly结合IHttpClientFactory实现聚合服务

在使用微服务的过程中经常会遇到这样的情况&#xff0c;就目前我遇到的问题做下分析情况一&#xff1a;这里服务对于前后端分离情况来说&#xff0c;多使用查询服务&#xff0c;前端直接获取不同服务的数据展示&#xff0c;如果出现其中的服务失败&#xff0c;对业务数据无影响…

CF1342E. Placing Rooks

CF1342E. Placing Rooks Solution 有一个显然的性质&#xff1a; 要么每行都有至少一个&#xff0c;要么每列至少有一个。 只看每行有至少一个的情况&#xff1a; 显然必有n−kn-kn−k列有棋子。 考虑容斥&#xff0c;枚举空列的数量iii。 Ans∑(−1)i∗(n−ki)∗(n−k−i)n…

你需要了解的有关.NET日期时间的必要信息

引言DateTime数据类型是一个复杂的问题&#xff0c;复杂到足以让你在编写【将日期从Web服务器返回到浏览器】简单代码时感到困惑。ASP.NET MVC 5和 Web API 2/ASP.NETCore 以不同方式序列化日期&#xff0c;这可能会给在一个Web应用程序中同时使用这两个序列化的开发人员带来更…

CF750F. New Year and Finding Roots

CF750F. New Year and Finding Roots Solution 设当前节点为xxx&#xff0c; 若当前节点为叶子节点&#xff0c;则向它的邻居跑。 若当前节点为根&#xff0c;则找到答案。 否则&#xff0c;每次从xxx向两个方向找&#xff0c;每次只走一个没有走过的邻居&#xff0c;显然可以…

只需3步,即可将你的Chromium Edge 浏览器设置成中文

最近&#xff0c;Chromium Edge 浏览器推出了添加语言包的功能&#xff0c;于是我们可以轻松将其界面设置成中文的。第1步: 升级浏览器到最新版在Chromium Edge 浏览器的地址栏中输入:edge://settings/help稍等片刻&#xff0c;浏览器会自行升级到最新版。第2步: 将Language se…

CF730F. Ber Patio

CF730F. Ber Patio Solution 由于∑ai\sum{a_i}∑ai​只有10510^5105&#xff0c;即除掉原有的bbb&#xff0c;代金券最多为10410^4104&#xff0c;因此我们令f[i][j]f[i][j]f[i][j]表示到了第iii天&#xff0c;靠现金获得的代金券共为jjj的最小现金和。 转移时枚举第i1i1i1…