POST请求注意事项
- POST请求的URL也能够携带参数,和GET一样,存放在Query String Parameters中,Params即URL中携带的参数
- 表单提交的数据存放在Form Data中,Data即请求体中携带的参数
前端ajax.jsp部分代码:
<%--javascript:void(0);含义是既不跳转也不刷新页面,#代表不跳转但刷新页面--%>
<a id="1" href="javascript:void(0);">params数据获取</a><br>
<script src="js/jquery-3.3.1.min.js"></script>
<script>
$("#1").click(function () {
$.ajax({
//访问URL路径
url:"pages/ajax1?msg=ok",
//访问方式
//get Request URL: http://localhost/pages/ajax1?msg=ok&msg=yes
//post Request URL: http://localhost/pages/ajax1?msg=ok
type:"post",
//发送服务器的数据
data:"msg=yes",
//回调函数
success:function (data) {
alert(data);
}
})
});
</script>
后端控制器代码:
package com.it.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.Arrays;
@Controller
@RequestMapping("/pages")
public class MyController {
/**
*
* @param msg 服务器接收客户端发来的参数
* @return 视图跳转,ajax可解析成内容
*/
@RequestMapping("/ajax1")
public String ajax1(String[] msg){ //[ok, yes]
// public String ajax1(String msg){ //ok, yes
System.out.println(Arrays.toString(msg));
return "success";
}
}
测试结果:
- get请求,ajax的url设置为
pages/ajax1?msg=ok
,data设置为msg=yes
- 请求url最终为
[http://localhost/pages/ajax1?msg=ok&msg=yes](http://localhost/pages/ajax1?msg=ok&msg=yes)
- URL数据Query String Parameters为msg:=ok&msg=yes
- 无请求体数据
- 请求url最终为
- post请求,ajax的url设置为
pages/ajax1?msg=ok
,data设置为msg=yes
URL链接示例 | ||||
---|---|---|---|---|
协议 | 服务器IP地址或主机名 | 端口号 | URI(请求的具体资源) | 参数 |
http:// | localhost: | 8080 | /demo/uriDemo.html | 从”?”开始到”#”为止之间的部分 |
Servlet的xml配置
- 定义Servlet
- 定义servlet名称
- 设置servlet处理类,web容器会根据其全类名反射来创建对象
- 配置servlet启动项(创建的时机),设为1后,servlet处理类对象在web容器启动时就被创建
- 配置Servlet映射
- 指定servlet名称
- url匹配模式
- 配置局部初始化参数
- 通过ServletConfig来配置当前的servlet初始化参数,注意标签顺序
- 初始化参数的key
- 初始化参数的value
配置全局初始化参数
通过ServletContext配置全局初始化参数信息
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<!--配置servlet-->
<!--1、定义servlet-->
<servlet>
<!--定义servlet名称-->
<servlet-name>demoServlet</servlet-name>
<!--servlet处理类
通过全类名反射来创建对象
-->
<servlet-class>com.it.servlet.DemoServlet</servlet-class>
<!--3、通过ServletConfig来配置当前的servlet初始化信息-->
<init-param>
<!--初始化参数的key-->
<param-name>encoding</param-name>
<!--初始化参数的value-->
<param-value>UTF-8</param-value>
</init-param>
<!--配置servlet启动项(创建的时机)
设为1后,servlet处理类对象在web容器启动时就被创建
-->
<load-on-startuo>1</load-on-startuo>
</servlet>
<!--2、配置servlet映射-->
<servlet-mapping>
<servlet-name>demoServlet</servlet-name>
<!--url匹配模式-->
<url-pattern>/demo</url-pattern>
</servlet-mapping>
<!--4、通过ServletContext配置全局初始化参数信息-->
<context-param>
<param-name>username</param-name>
<param-value>admin</param-value>
</context-param>
</web-app>
WEB-INF下资源请求
描述:
- 客户端请求不能访问WEB-INF下的资源,只有从服务器端跳转(转发)才可以访问。
- css、img、js文件需要被引用,不可放在WEB-INF目录下
作用:
@WebServlet
:修饰Servlet类,用于部署该Servlet类。@WebFilter:修饰Filter类,用于部署该Filter类@WebInitParam
:与@WebServlet或@WebFilter注解连用,为它们配置参数@MultipartConfig
:修饰Servlet类,指定该Servlet类负责处理multipart/form-data类型的请求(主要用于处理上传文件)@ServletSecurity
:修饰Servlet类,与JAAS(Java验证和授权API)有关的注解@HttpConstrait
:与@ServletSecurity连用@HttpMethodConstrait
:与@ServletSecurity连用ServletContext方法为什么能直接用
问题:ServletContext没有实现类,为什么可以直接调用其方法?
答案:Web容器自动创建实现类对象ApplicationContextFacade,通过多态的特性调用方法
测试代码:
打印结果:@Override
public void init() throws ServletException {
super.init();
ServletContext servletContext = getServletContext();
System.out.println("servletContext = " + servletContext);
}
servletContext = org.apache.catalina.core.ApplicationContextFacade@62d4ac72
查看端口号占用
使用cmd命令
查看pid 在任务管理器中结束占用端口的进程netstat -a -o
状态码
状态码分类
| | 已定义范围 | 分类 | | —- | —- | —- | | 1XX | 100-101 | 信息提示 | | 2XX | 200-206 | 成功 | | 3XX | 300-305 | 重定向 | | 4XX | 400-415 | 客户端错误 | | 5XX | 500-505 | 服务器错误 |
1XX 信息性状态码
状态码 | 状态消息 | 含义 |
---|---|---|
100 | Continue(继续) | 收到了请求的起始部分,客户端应该继续请求 |
101 | Switching Protocols(切换协议) | 服务器正根据客户端的指示将协议切换成Update Header列出的协议 |
2XX 成功状态码
状态码 | 状态消息 | 含义 |
---|---|---|
200 | OK | 服务器成功处理了请求(这个是我们见到最多的) |
201 | Created(已创建) | 对于那些要服务器创建对象的请求来说,资源已创建完毕。 |
202 | Accepted(已接受) | 请求已接受, 但服务器尚未处理 |
203 | Non-Authoritative Information(非权威信息) | 服务器已将事务成功处理,只是实体Header包含的信息不是来自原始服务器,而是来自资源的副本。 |
204 | No Content(没有内容) | Response中包含一些Header和一个状态行, 但不包括实体的主题内容(没有response body) |
205 | Reset Content(重置内容) | 另一个主要用于浏览器的代码。意思是浏览器应该重置当前页面上所有的HTML表单。 |
206 | Partial Content(部分内容) | 部分请求成功 |
3XX 重定向状态码
状态码 | 状态消息 | 含义 |
---|---|---|
300 | Multiple Choices(多项选择) | 多重选择。链接列表。用户可以选择某链接到达目的地。最多允许五个地址。 |
301 | Moved Permanently(永久移除) | 请求的URL已移走。Response中应该包含一个Location URL, 说明资源现在所处的位置 |
302 | Found(已找到) | 与状态码301类似。但这里的移除是临时的。 客户端会使用Location中给出的URL,重新发送新的HTTP request |
303 | See Other(参见其他) | 类似302 |
304 | Not Modified(未修改) | 客户的缓存资源是最新的, 要客户端使用缓存 |
305 | Use Proxy(使用代理) | 必须通过代理访问资源, 代理的地址在Response 的Location中 |
306 | 未使用 | 这个状态码当前没使用 |
307 | Temporary Redirect(临时重定向 | 类似302 |
4XX客户端错误状态码
状态码 | 状态消息 | 含义 |
---|---|---|
400 | Bad Request(坏请求) | 语义有无,当前请求无法被服务器理解,或请求参数有误 |
401 | Unauthorized(未授权) | 需要客户端对自己认证 |
402 | Payment Required(要求付款) | 这个状态还没被使用, 保留给将来用 |
403 | Forbidden(禁止) | 请求被服务器拒绝了 |
404 | Not Found(未找到) | 未找到资源 |
405 | Method Not Allowed(不允许使用的方法) | 请求中指定的方法不被允许 |
406 | Not Acceptable(无法接受) | |
407 | Proxy Authentication Required(要求进行代理认证) | 与状态码401类似, 用于需要进行认证的代理服务器 |
408 | Request Timeout(请求超时) | 如果客户端完成请求时花费的时间太长, 服务器可以回送这个状态码并关闭连接 |
409 | Conflict(冲突) | 发出的请求在资源上造成了一些冲突 |
410 | Gone(消失了) | 服务器曾经有这个资源,现在没有了, 与状态码404类似 |
411 | Length Required(要求长度指示) | 服务器要求在Request中包含Content-Length。 |
412 | Precondition Failed(先决条件失败) | |
413 | Request Entity Too Large(请求实体太大) | 客户端发送的实体主体部分比服务器能够或者希望处理的要大 |
414 | Request URI Too Long(请求URI太长) | 客户端发送的请求所携带的URL超过了服务器能够或者希望处理的长度 |
415 | Unsupported Media Type(不支持的媒体类型) | 服务器无法理解或不支持客户端所发送的实体的内容类型 |
416 | Requested Range Not Satisfiable(所请求的范围未得到满足) | |
417 | Expectation Failed(无法满足期望) |
5XX服务器错误状态码
状态码 | 状态消息 | 含义 |
---|---|---|
500 | Internal Server Error(内部服务器错误) | 服务器遇到一个错误,使其无法为请求提供服务 |
501 | Not Implemented(未实现) | 客户端发起的请求超出服务器的能力范围(比如,使用了服务器不支持的请求方法)时,使用此状态码 |
502 | Bad Gateway(网关故障) | 代理使用的服务器遇到了上游的无效响应 |
503 | Service Unavailable(未提供此服务) | 服务器目前无法为请求提供服务,但过一段时间就可以恢复服务 |
504 | Gateway Timeout(网关超时) | 与状态吗408类似, 但是响应来自网关或代理,此网关或代理在等待另一台服务器的响应时出现了超时 |
505 | HTTP Version Not Supported(不支持的HTTP版本) | 服务器收到的请求使用了它不支持的HTTP协议版本。 有些服务器不支持HTTP早期的HTTP协议版本,也不支持太高的协议版本 |