Request功能
1.获取请求消息数据
- 获取请求行数据
- 获取请求头数据
- 获取请求体数据
请求空行没必要获取
1.获取请求行数据
GET /虚拟目录 /servlet路径 ?请求参数 HTTP/1.1
GET/day14/demo1?username=zhangsan
方法:
1.获取请求方式:GET
String getMethod()
2.获取虚拟目录:/day14。常用
String getContextPath()
3.获取servlet路径:/demo1
String getServletPath()
4.获取get方式的请求参数:username=zhangsan
String getQueryString()
5.获取请求的uri:/day14/demo1。常用
String getRequestURI():返回/day14/demo1
String getRequestURL():返回http://localhoust/day14/demo1
6.获取协议和版本:HTTP/1.1
String getProtocol()从ServletRequest继承而来
7.获取客户机的IP地址
String getRemoteAddr()从ServletRequest继承而来

可以帮你继承HttpServlet复写两个方法
package cn.itcast.web.request;
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;
/**
* @author 旗木五五开
* @create 2020-02-22 12:55
* 演示
*/
@WebServlet("/requestServlet")
public class RequestServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
//http://localhost:8080/ji/requestServlet?name=zhang&age=12
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1.获取请求方式:GET
// 可以来判断请求方,根据请求方式不同,做出不同的代码逻辑处理
// HttpServlet内部已经写好了
String method = request.getMethod();
System.out.println(method);
// 2.获取虚拟目录:/day14
String contextPath = request.getContextPath();
System.out.println(contextPath);
// 3.获取servlet请求路径:/requestServlet
String servletPath = request.getServletPath();
System.out.println(servletPath);
// 4.获取get方式的请求参数:name=zhang&age=12
// 有更高级的
String queryString = request.getQueryString();
System.out.println(queryString);
// 5.获取请求的uri:
String requestURI = request.getRequestURI();
StringBuffer requestURL = request.getRequestURL();
// /ji/requestServlet
System.out.println(requestURI);
// http://localhost:8080/ji/requestServlet
System.out.println(requestURL);
// 6.获取协议和版本:HTTP/1.1
String protocol = request.getProtocol();
System.out.println(protocol);
// 7.获取客户机的IP地址:0:0:0:0:0:0:0:1
String remoteAddr = request.getRemoteAddr();
System.out.println(remoteAddr);
}
}
2.获取请求头数据常用
方法
String getHeader(String name):通过请求头的名称获取请求头的值。常用
Enumeration<String> getHeaderNames():获取所有请求头的名称
package cn.itcast.web.request;
import jdk.nashorn.internal.objects.annotations.Where;
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;
import java.util.Enumeration;
/**
* @author 旗木五五开
* @create 2020-02-22 14:04
* 获取所有请求头数据
*/
@WebServlet("/requestDemo2")
public class RequestDemo2 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 获取所有请求头名称
Enumeration<String> headerNames = request.getHeaderNames();
// 遍历
while (headerNames.hasMoreElements()) {
// 获取请求头名称
String name = headerNames.nextElement();
// 获取请求头对应的值
String value = request.getHeader(name);
System.out.println(name+":"+value);
}
}
}
package cn.itcast.web.request;
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;
/**
* @author 旗木五五开
* @create 2020-02-22 17:05
* user-agent访问的浏览器版本信息
*/
@WebServlet("/RequestDemo3")
public class RequestDemo3 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 演示获取请求头数据user-agent
// 不区分大小写
String agent = request.getHeader("user-agent");
// 判断浏览器版本,不同版本不同操作解决浏览器兼容问题
// contains判断是否存在包含关系
if(agent.contains("Chrome")){
// 谷歌
System.out.println("谷歌");
}else if(agent.contains("Firefox")){
// 火狐
System.out.println("火狐");
}
}
}
referer请求从哪里来
没有从别的超链接,点链接来访问 直接从浏览器地址栏输入 无法获取 因为我没有从哪里来,直接访问的referer 获取的是null不能直接访问,用超链接来实现 返回:http://localhost:8080/ji/login.html
package cn.itcast.web.request;
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;
/**
* @author 旗木五五开
* @create 2020-02-23 12:35
* referer请求从哪里来
*/
@WebServlet("/requestDemo4")
public class RequestDemo4 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 演示获取请求头数据:referer请求从哪里来
String referer = request.getHeader("referer");
System.out.println(referer);
/*
没有从别的超链接,点链接来访问
直接从浏览器地址栏输入
无法获取
因为我没有从哪里来,直接访问的referer
获取的是null
不能直接访问,用超链接来实现
返回:http://localhost:8080/ji/login.html
*/
//防盗链
if (referer != null){
if (referer.contains("ji")){
// 正常访问
System.out.println("播放");
}else{
// 盗链
System.out.println("请访问优酷");
}
}
}
}

创建另一个项目访问当前项目

http://localhost:8080/ji/requestDemo4这个是直接访问referer的路径
这时候Tomcat默认部署(发布)的就是hehe项目
所以要新建一个Tomcat来部署(发布)servlet项目





不能有两个8080端口

启动hehe项目

启动servlet项目
从高清电影访问referer

在页面上显示
package cn.itcast.web.request;
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;
/**
* @author 旗木五五开
* @create 2020-02-23 12:35
* referer请求从哪里来
*/
@WebServlet("/requestDemo4")
public class RequestDemo4 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 演示获取请求头数据:referer请求从哪里来
String referer = request.getHeader("referer");
System.out.println(referer);
/*
没有从别的超链接,点链接来访问
直接从浏览器地址栏输入
无法获取
因为我没有从哪里来,直接访问的referer
获取的是null
不能直接访问,用超链接来实现
http://localhost:8080/ji/login.html
*/
//防盗链
if (referer != null){
if (referer.contains("ji")){
// 正常访问
System.out.println("播放");
// 页面上显示
// 如果要写中文
response.setContentType("text/html;charset=utf-8");
// 页面上显示的内容
response.getWriter().write("播放");
}else{
// 盗链
System.out.println("请访问优酷");
// 页面上显示
// 如果要写中文
response.setContentType("text/html;charset=utf-8");
// 页面上显示的内容
response.getWriter().write("请访问优酷");
}
}
}
}
hehe项目的高清电影访问

servlet上的login访问

3.获取请求体数据
只有POST请求方式才有请求体,在请求体post中封装了请求参数
request对象将请求体数据封装成流
步骤:
- 获取流对象
- 再从流东西中拿数据
获取流对象的方法:
字符流:BufferedReader getReader():只能操作字符数据
字节流:ServletInputStream getInputStream():可以操作所有类型数据,继承了InputStream,可以把它当做InputStream来用。
文件上传是写
package cn.itcast.web.request;
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.BufferedReader;
import java.io.IOException;
/**
* @author 旗木五五开
* @create 2020-02-24 12:14
* getReader()案例
*/
@WebServlet("/requestDemo5")
public class RequestDemo5 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1.获取请求消息体——请求参数
BufferedReader br = request.getReader();
// 2.读取数据
String line = null;
while ((line = br.readLine())!=null){
System.out.println(line);
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}

post参数的格式和get参数的格式是一样的,只不过存放的位置不一样。
常用的方法
获取虚拟目录:/day14。
String getContextPath()
获取请求的uri:/day14/demo1。
String getRequestURI():返回/day14/demo1
String getRequestURL():返回http://localhoust/day14/demo1
String getHeader(String name):通过请求头的名称获取请求头的值。
2.其他功能:重要
基于第一类方法生成的,更方便使用request对象的方法
1.获取请求参数——通用方式(可以兼容get和post)常用
1.String getParameter(String name):根据参数名称获取参数值。内部是通过流来获取的参数的值
例如:username=zhang&password=123,传username返回zhang,传password返回123
package cn.itcast.web.request;
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;
/**
* @author 旗木五五开
* @create 2020-02-24 14:33
* 获取请求参数
* 1.String getParameter(String name):根据参数名称获取参数值
*/
@WebServlet("/requestDemo6")
public class RequestDemo6 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// post获取请求参数
// getParameter根据参数名称获取参数值
String username = request.getParameter("username");
System.out.println("post");
System.out.println(username);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// get获取请求参数
// String username = request.getParameter("username");
// System.out.println("get");
// System.out.println(username);
this.doPost(request,response);
}
}

2.String[] getParameterValues(String name):根据参数名称获取参数值的数组。
例如hobby=xuexi&hobby=game,通过一个键可以获取两个值,把两个值封装成了一个数组。多用于复选框
package cn.itcast.web.request;
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;
/**
* @author 旗木五五开
* @create 2020-02-24 14:33
* 获取请求参数
* 2.String[] getParameterValues(String name):根据参数名称获取参数值的数组。
*/
@WebServlet("/requestDemo6")
public class RequestDemo6 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 根据参数名称获取参数值的数组。
String[] hobbies = request.getParameterValues("hobby");
for (String hobby : hobbies) {
System.out.println(hobby);
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}
3.Enumeration<String> getParametNames():获取请求参数的名称的枚举
方法是将发送请求页面中form表单里所有具有name属性的表单对象获取(包括button).返回一个Enumeration类型的枚举.
通过Enumeration的hasMoreElements()方法遍历.再由nextElement()方法获得枚举的值.此时的值是form表单中所有控件的name属性的值.
最后通过request.getParameter()方法获取表单控件的value值.
package cn.itcast.web.request;
import javax.naming.Name;
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;
import java.util.Enumeration;
/**
* @author 旗木五五开
* @create 2020-02-24 14:33
* 获取请求参数
* 3.Enumeration<String> getParametNames():获取请求参数的名称的枚举
*/
@WebServlet("/requestDemo6")
public class RequestDemo6 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Enumeration<String> parameterNames = request.getParameterNames();
while (parameterNames.hasMoreElements()){
String name = parameterNames.nextElement();
System.out.println(name);
String value = request.getParameter(name);
System.out.println(value);
System.out.println("-------------");
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}
没有获取到学习
4.Map<String,String[]> getParameterMap():获取所有参数的map集合。常用
键是字符串,值是字符串数组。是为了防止上面那种情况,复选框只能获取一个值
package cn.itcast.web.request;
import javax.naming.Name;
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;
import java.util.Enumeration;
import java.util.Map;
import java.util.Set;
/**
* @author 旗木五五开
* @create 2020-02-24 14:33
* 获取请求参数
* 4.Map<String,String[]> getParameterMap():获取所有参数的map集合
*/
@WebServlet("/requestDemo6")
public class RequestDemo6 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 获取所有参数的map集合
Map<String, String[]> parameterMap = request.getParameterMap();
// 遍历
Set<String> keyset = parameterMap.keySet();
for (String name : keyset) {
// 根据键获取值
String[] values = parameterMap.get(name);
System.out.println(name);
for (String value : values) {
System.out.println(value);
}
System.out.println("--------------");
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}


解决请求参数中文乱码
get方式:Tomcat8已经将乱码问题解决了
post方式:会乱码
解决方式:设置流的编码。
以后页面多的时候无论get还是post在获取请求参数的时候就写上这个代码
request.setCharacterEncoding("utf-8");
package cn.itcast.web.request;
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;
/**
* @author 旗木五五开
* @create 2020-02-27 11:08
*/
@WebServlet("/requestDemo7")
public class RequestDemo7 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1.设置流的编码
request.setCharacterEncoding("utf-8");
// 获取请求参数username
String username = request.getParameter("username");
System.out.println(username);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}
utf-8从哪里来的?

2.请求转发:一种在服务器内部的资源跳转方式
程序设计要求:功能单一,细化。不要把很多代码写到一个类里,方法里。不利于后期维护,不利于分工协作
请求转发就是为了这个,A做完,丢给B
步骤:
1.通过request对象,获取请求转发器对象:RequestDispatcher getRequestDispatcher(String path)
2.使用RequestDispatcher 对象转发:forward(ServletRequest request, ServletResponse response)
package cn.itcast.web.request;
import javax.servlet.RequestDispatcher;
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;
/**
* @author 旗木五五开
* @create 2020-02-27 13:47
*/
@WebServlet("/requestDemo8")
public class RequestDemo8 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("8被访问了");
// 转发到demo9资源
/*
RequestDispatcher requestDispatcher = request.getRequestDispatcher("/requestDemo9");
requestDispatcher.forward(request,response);
不要这样写,把代码合成一行。
因为requestDispatcher只用一次,只调用一次forward。这样写要单独创建变量不合算
*/
request.getRequestDispatcher("/requestDemo9").forward(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}


特点:
1.浏览器地址栏不发生变化
2.只能转发到服务器的内部资源中
3.转发是一次请求

3.共享数据
A做完丢给B的时候,需要告诉B干到哪了,之间需要数据通信的
转发的时候才使用


步骤:
1.存储数据到request域中
2.转发
3.获取
package cn.itcast.web.request;
import javax.servlet.RequestDispatcher;
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;
/**
* @author 旗木五五开
* @create 2020-02-27 13:47
*/
@WebServlet("/requestDemo8")
public class RequestDemo8 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("8被访问了");
// 1.存储数据到request域中
request.setAttribute("msg","hello");
// 2.转发
request.getRequestDispatcher("/requestDemo9").forward(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}
package cn.itcast.web.request;
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;
/**
* @author 旗木五五开
* @create 2020-02-27 13:47
*/
@WebServlet("/requestDemo9")
public class RequestDemo9 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("9被访问了");
// 获取数据
Object msg = request.getAttribute("msg");
System.out.println(msg);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}

4.获取ServletContext
ServletContext getServletContext()
package cn.itcast.web.request;
import javax.servlet.ServletContext;
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;
/**
* @author 旗木五五开
* @create 2020-02-27 14:31
*/
@WebServlet("/requestDemo10")
public class RequestDemo10 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ServletContext servletContext = request.getServletContext();
System.out.println(servletContext);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}
Request功能的更多相关文章
- git 上的pull request 是什么意思?
1.git 上有常见的pull request 功能 2.pull request 的含义 解释一: 有一个仓库,叫Repo A.你如果要往里贡献代码,首先要Fork这个Repo,于是在你的Gi ...
- Git工作流指南:Pull Request工作流
参考地址:http://blog.jobbole.com/76854/ Pull Requests是Bitbucket上方便开发者之间协作的功能.提供了一个用户友好的Web界面,在集成提交的变更到正式 ...
- response和request
请求响应流程图 response response是用来向客户端响应的对象! 需要回忆一下http响应内容: l 首行:状态码 l 响应头: 1头1值,1头多值: l 响应体(正文):html ...
- 好代码是管出来的——Git的分支工作流与Pull Request
上一篇文章介绍了常用的版本控制工具以及git的基本用法,从基本用法来看git与其它的版本控制工具好像区别不大,都是对代码新增.提交进行管理,可以查看提交历史.代码差异等功能.但实际上git有一个重量级 ...
- servlet中的request和response
request对象 1.什么是请求 a.浏览器向服务器发送数据就是请求. 一.request功能1--获取数据 1.获取浏览器相关的信息 getRequestURL方法 -- 返回客户端发出请求完整U ...
- gitlab 一键 merge request(III)
已经有两位同学写过类似的 wiki 了,值得一看: gitlab一键提交request merge & assign 为啥我又来凑热闹呢?基于下面两个原由: 我的机子是 Win10,上面脚本的 ...
- Git - Pull Request工作流
Pull Requests是Bitbucket上方便开发者之间协作的功能.提供了一个用户友好的Web界面,在集成提交的变更到正式项目前可以对变更进行讨论. 开发者向团队成员通知功能开发已经完成,Pul ...
- request和response的复习
客户端发来的请求,服务器将请求封装成request对象,包括请求头和请求的数据等.创建response对象,调用Servlet的Service()方法传递这两个参数,使用HttpServlet就是将这 ...
- Java web课程学习之Request和Response
request和response l HttpServletRequest l 请求转发 l HttpServletResponse l 请求重定向 请求流程 每次请求service(),都会由容 ...
随机推荐
- Anaconda 常用命令
目录 包管理 环境管理 共享环境设置 包管理 安装包 conda install xxx conda install pandas ; conda install pandas numpy ; 同时安 ...
- 在C#中使用RESTful API的几种好方法
什么是Restful API REST 即Representational State Transfer的缩写.直接翻译的意思是"表现层状态转化". 它是一种互联网应用程序的API ...
- ES6 DEMO
案例: ①匿名封装 (function(window,document){ const HEAD = 1; let MSG = function(options){ this._init(option ...
- LeetCode 9、判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
class Solution: def isPalindrome(self, x: int) -> bool: a = x if a<0: return False else: num = ...
- 巨杉数据库SequoiaDB】巨杉Tech | SequoiaDB 分布式事务实现原理简介
1 分布式事务背景 随着分布式数据库技术的发展越来越成熟,业内对于分布式数据库的要求也由曾经只用满足解决海量数据的存储和读取这类边缘业务向核心交易业务转变.分布式数据库如果要满足核心账务类交易需求,则 ...
- First Kernel-pwn
Kernel pwn-极简题目的操作模式 完全参照M4x师傅的指导,用 hacklu的baby kernel迈了第一步 题目附带文件说明 一般题目会给出bzImage,.cpio, .sh文件 sh文 ...
- BZOJ 2467: [中山市选2010]生成树
有一种图形叫做五角形圈.一个五角形圈的中心有1个由n个顶点和n条边组成的圈.在中心的这个n边圈的每一条边同时也是某一个五角形的一条边,一共有n个不同的五角形.这些五角形只在五角形圈的中心的圈上有公共的 ...
- 创建基于ASP.NET core 3.1 的RazorPagesMovie项目(三)-已搭建基架的Razor页面解释和更新
本节主要介绍在上一节中通过搭建基架而创建的Razor页面,并做一些UI改变. 一.创建.删除.详细信息和编辑页面 1.双击Pages/Movies/Index.cshtml.cs文件,这是一个Razo ...
- 【JavaScript Weekly】#471 — JANUARY 17, 2020
https://javascriptweekly.com/issues/471 #471 — JANUARY 17, 2020 READ ON THE WEB JavaScript Weekly Ba ...
- 2019-08-20 纪中NOIP模拟A组
T1 [JZOJ6310] Global warming 题目描述 给定整数 n 和 x,以及一个大小为 n 的序列 a. 你可以选择一个区间 [l,r],然后令 a[i]+=d(l<=i< ...





