GET请求有哪些:
1、form标签method=get
2、a标签
3、link标签引入css
4、script标签引入js文件
5、img标签引入图片
6、iframe引入 html页面
7、在浏览器地址栏中输入地址后敲回车
POST请求有哪些:
1、form标签method=post
b)HttpServletRequest类的常用方法
i. getRequestURI() 获取请求的资源路径
ii. getRequestURL() 获取请求的统一资源定位符(绝对路径〉
iii.getRemoteHost() 获取客户端的ip地址
iv. getHeader() 获取请求头
v. getParameter() 获取请求的参数
vi.getParameterValues() 获取请求的参数(多个值的时候使用)
vii.getMethod() 获取请求的方式GET 或POST
viii.setAttribute(key , value); 设置域数据
ix. getAttribute(key ); 获取域数据
x. getRequestDispatcher() 获取请求转发对象
服务器内部转发
是一次请求响应的过程,对于客户端而言,服务器内部经过了多少次转发,客户端是不知道的;
客户端发出请求(地址指向Servlet1),该请求由Servlet1接收,然后Servlet1将请求转发到Servlet2,由Servlet2执行请求,执行完后将响应的数据发送给客户端。
在浏览器上进行访问时在链接时输入
?后面的是传入的数据,username=sadmsda用于读取。
创建一个Java程序用于读取数据,并在内部实现转发。
package com.atguigu.servlet;
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 {
//在servlet1中可以读取到传入的数据username
String username = req.getParameter("username");
System.out.println("在柜台1中查看参数:"+username);
//设置域数据,这个域数据在一次服务中,是可以一直访问的,用来证明这个由servlet1转发到servlet2,
req.setAttribute("key","柜台1已确认");
//转发到servlet2
RequestDispatcher requestDispatcher = req.getRequestDispatcher("/servlet2");
requestDispatcher.forward(req,resp);
}
}
Servlet2
package com.atguigu.servlet;
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 {
//在Servlet2中也可以查询username的数据
String username = req.getParameter("username");
System.out.println("在柜台2中查看材料:"+username);
//查询域数据
Object key = req.getAttribute("key");
System.out.println("柜台1是否确认可行:"+key);
System.out.println("柜台二执行操作");
}
}
在项目中的web中的WEB-INF下的xml文件中配置Servlet1和Servlet2
<?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_4_0.xsd"
version="4.0">
<servlet>
<servlet-name>Servlet1</servlet-name>
<servlet-class>com.atguigu.servlet.Servlet1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Servlet1</servlet-name>
<url-pattern>/servlet1</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>Servlet2</servlet-name>
<servlet-class>com.atguigu.servlet.Servlet2</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Servlet2</servlet-name>
<url-pattern>/servlet2</url-pattern>
</servlet-mapping>
</web-app>
Web中‘/’斜杠的不同意义
1、 在web中/斜杠是一种绝对路径。
2、/斜杠 如果被浏览器解析,得到的地址是:http://ip:port/
3、/斜杠 如果被服务器解析,得到的地址是:http://ip:port/工程路径
1、<ur1-pattern>
/ servlet1</url-pattern>
2、servletContext.getRealPath(“/”);
3、request.getRequestDispatcher(“”);
特殊情况:
response. sendRediect(“/");把斜杠发送给浏览器解析。得到http://ip:port/