赞
踩
1.浏览器发起请求
2.tomcat会根据请求url中的资源路径,创建对应的Servlet对象
3.tomcat服务器创建request对象和response对象,request对象中封装请求消息数据
4.tomcat将request和response两个对象传递给Servlet对象的Service()方法,并调用Service()
5.程序员通过request对象获取请求消息数据,通过response对象设置响应消息数据。
注意:request对象和response对象是由服务器创建的
ServletRequest(接口)
|
HttpServletRequest(子接口)
|
org.apache.catalina.connector.RequestFacade(Tomcat 实现的实现类)
while(headerNames.hasMore()){
String name = headerNames.nextElement();
String value = request.getrHeader(name);
}
注意: 只有post请求方式才有请求体,请求体中封装了POST请求的请求参数
步骤:
1.获取流对象
BufferedReader getReader() 只能获取字符数据 有readLine()方法,按行读取
ServletInputStream getInputStream() 获取字节输入流
2.再从流对象中拿数据
BufferedReader br = request.getReader();
String line = null;
while((line = br.read())!= null){
System.out.println(line);
}
通用方法指的是get\post请求都可以用
1.String getParameter(String name) 根据请求参数名称获取参数值
2.String[] getParameterValues(String name):根据参数名称获取参数值的数组(复选框使用)
3.Enumeration<String> getParameterNames():获取所有请求的参数名称
4.Map<String,String[]> getParameterMap() 获取所有参数的k-v集合
String username = request.getParameter("username");
System.out.println(username);
解决方案:
即使用通用的获取请求参数的方法,对于post来说,第一步也是获取流,所以在获取请求参数之前,先设置流的编码方式,注意编码方式和HTML页面的编码方式保持一致。
request.setCharacterEncoding("utf-8");
String username = request.getParameter("username");
System.out.println(username);
- 什么是请求转发?
服务器收到请求后,从一次资源跳转到另一个资源的操作
请求转发属于在服务器内部的资源跳转方式
- 请求转发的使用
步骤:
1.通过request对象获取请求转发器对象:
RequestDispatcher getRequestDispatcher(String path)
2.使用RequestDispatcher对象来进行转发:
forward(ServletRequest request,ServletResponse response)
示例: demo08转发到demo09
@WebServlet("/demo08")
public class ServletDemo08 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("Servlet08被访问了");
RequestDispatcher rd =req.getRequestDispatcher("/Demo09");
rd.forward(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req, resp);
}
}
@WebServlet("/demo09")
public class ServletDemo09 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("Servlet09被访问了");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req, resp);
}
}
/
开头;/
表示地址为:http://ip:port/工程名/,映射到IDEA代码的Web目录
- 请求转发的特点
演示:
但是请求转发不能从c.html跳回来了
base标签相当于href的相对路径中的出发点;
注意:如果href的值是目录结尾,必须加上/
结尾,如果是资源就没事;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。