java servlet http_javaWeb的HttpServletRequest和HttpServletResponse

HttpServletRequest

HttpServletRequest对象是封装了用户的请求信息,包括请求参数去,请求头等信息,service()f方法中的两个HttpServletRequest和HttpServletResponse的形参是由Tomcat将创建好的实例对象传进来,不需要我们关心。(如果感兴趣的话,可以看看Tomcat的底层实现,如果有时间的话,我们可以再详细讨论一下这个原理)。

HttpservletRequest的常用方法

85ca0adfd018bdae9b08a6ac235a45e4.png

importjava.io.IOException;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;public class Servlet01 extendsHttpServlet{

@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throwsServletException, IOException {

String url=req.getRequestURL().toString();

System.out.println("url--->"+url);

String uri=req.getRequestURI();

System.out.println("uri--->"+uri);

String qs=req.getQueryString();

System.out.println("请求参数:"+qs);

String method=req.getMethod();

System.out.println("请求参数"+method);

String protocol=req.getProtocol();

System.out.println("请求协议:"+protocol);

String context=req.getContextPath();

System.out.println("请求站点名:"+context);

}

}

获取请求头

bdb3f5bfc1b4b35d19b4a0f5ee7fccb5.png

importjava.io.IOException;importjava.util.Enumeration;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;public class Servlet02 extendsHttpServlet{

@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throwsServletException, IOException {

String header=req.getHeader("host");

System.out.println(header);

System.out.println("++++++++++++++++");

Enumeration enu=req.getHeaderNames();while(enu.hasMoreElements()){

System.out.println(enu.nextElement());

}

}

}

获取客户端请求参数

bbe152f0570e061089efee7c905117ef.png

importjava.io.IOException;importjava.util.Enumeration;importjava.util.Map;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;public class Servlet03 extendsHttpServlet {

@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throwsServletException, IOException {

String name=req.getParameter("uname");

System.out.println(name);

String [] hobby=req.getParameterValues("hobby");for(String temp:hobby){

System.out.println(temp);

}

Enumeration es=req.getParameterNames();while(es.hasMoreElements()){

es.nextElement();

}

Map map =req.getParameterMap();for(String key:map.keySet()){

System.out.println(key);for(String str:map.get(key)){

System.out.println(str);

}

}

}

}

乱码问题的解决方式

由于现在的 request 属于接收客户端的参数,所以必然有其默认的语言编码,主要是由于在解析过程中默认使用的编码方式为 ISO-8859-1(此编码不支持中文),所以解析时一定会出现乱码。要想解决这种乱码问题,需要设置 request 中的编码方式,告诉服务器以何种方式来解析数据。或者在接收到乱码数据以后,再通过相应的编码格式还原。

方式一:req.setCharacterEncoding("UTF-8");

该方法值针对post有效,对get是无效的,但是Tomcat8 起,以后的 GET方式请求是不会出现乱码的,所以使用Tomcat8及以上的Tomcat版本,只需要设置该post的编码即可

方式二:

String str=req.getParameter("uname");

String str1=new String(str.getBytes("ISO-8859-1"),"UTF-8");

该方式借助了 String 对象的方法,该种方式对任何请求有效,是通用的,但只能针对单个参数进行编码转换来达到解决乱码的问题

请求转发

请求转发,是一种服务器的行为,当客户端请求到达后,服务器进行转发,此时会将请求对象进行保存,地址栏中的 URL 地址不会改变,得到响应后,服务器端再将响应发送给客户端,从始至终只有一个请求发出。实现方式如下,达到多个资源协同响应的效果。

servlet01.javaimportjava.io.IOException;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;public class servlet01 extendsHttpServlet {

@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throwsServletException, IOException {

String name= req.getParameter("uname");

req.setAttribute("uname", name);//转发到servlet02

req.getRequestDispatcher("s02").forward(req,resp);

}

}

servlet02.javaimportjava.io.IOException;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;public class servlet02 extendsHttpServlet {

@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throwsServletException, IOException {

System.out.println(req.getAttribute("uname"));//转发到index.jsp页面 ,请求转发的过程中,用的是同一个request和response

req.getRequestDispatcher("index.jsp").forward(req,resp);

}

}

index.jsp页面

Insert title here

HttpServletResponse

Web 服务器收到客户端的 http 请求,会针对每一次请求,分别创建一个用于 代表请求的 request 对象和 代表响应的 response 对象。request 和 response 对象代表请求和响应:获取客户端数据,需要通过request 对象; 向客户端输出数据,需要通过 response 对象。HttpServletResponse 的主要功能用于服务器对客户端的请求进行响应,将Web 服务器处理后的结果返回给客户端。service()方法中形参接收的是HttpServletResponse 接口的实例化对象,这个对象中封装了向客户端发送数据、发送响应头,发送响应状态码的方法。

常用方法

bfff28148f5d1c86346cc98e29582fb7.png

importjava.io.IOException;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;public class Servlet04 extendsHttpServlet{

@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throwsServletException, IOException {

req.setCharacterEncoding("UTF-8");

String str=req.getParameter("uname");

String str1=new String(str.getBytes("ISO-8859-1"),"UTF-8");

System.out.println(str1);

resp.addHeader("name", "zhangsan");

resp.setHeader("name", "lisi");

resp.setHeader("refresh", "3;url=http://www.shsxt.com");

resp.sendError(404);

}

}

importjava.io.IOException;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;public class Servlet04 extendsHttpServlet{

@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throwsServletException, IOException {

resp.setContentType("text/html;charset=UTF-8");

resp.getOutputStream().write("

hello world

".getBytes());

将图片显示在网页上

importjava.io.File;importjava.io.FileInputStream;importjava.io.IOException;importjava.io.InputStream;importjavax.servlet.ServletException;importjavax.servlet.ServletOutputStream;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;public class Servlet05 extendsHttpServlet {

@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throwsServletException, IOException {

resp.setContentType("image/jpg;charset=UTF-8");

String realpath=req.getServletContext().getRealPath("/");

System.out.println(realpath);

String filepath=realpath+"1.jpg";

File file=newFile(filepath);if(file.exists()&&file.isFile()){

InputStream is=newFileInputStream(file);byte[] bs=new byte[1024];int len=0;while((len=is.read(bs))!=-1){

resp.getOutputStream().write(bs,0,len);

}

resp.getOutputStream().close();

is.close();

}else{

resp.setContentType("text/html;charset=UTF-8");

resp.getWriter().write("

文件不存在!

");

}

}

}

重定向

importjava.io.IOException;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;public class Servlet06 extendsHttpServlet{

@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throwsServletException, IOException {

resp.sendRedirect("s05");

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值