Servlet知识点总结2

HttpServletRequest类

HttpServletRequest类有什么用?

当有请求进入Tomcat服务器时,Tomcat服务器就会把用户请求过来的HTTP协议信息解析好封装到Request对象中。然后传递到service方法(doGet和doPost)中给我们使用。我们可以通过HttpServletRequest对象,获取到所有用户请求的对象。

HttpServletRequest类的常用方法

    request.getRequestURL();	获取请求的统一资源定位符(绝对路径)
    request.getRequestURI();	获取请求的资源路径
    request.getRemoteHost();	获取客户端ip地址
    request.getHeader();	获取请求头
    request.getParameter();	获取请求的参数
    request.getParameterValues();	获取请求的参数(多个值的时候使用)
    request.getMethod();	获取请求的方式GET或POST
    request.setAttribute(key,value);	设置域数据
    request.getAttribute(key);	设置域数据
    request.getRequestDispatcher()	获取请求转发对象

如何获取用户的请求参数

表单提交数据:

<body>
    <form action="http://localhost:8080/WebTest" method="get">
    用户名:<input type="text" name="username"><br/>
    密码:<input type="password" name="hobby" value="cpp">C++
    兴趣爱好:<input type="checkbox" name="hobby" value="java">Java
        
    <input type="submit">
    </form>
</body>

Java代码:

public class HelloServlet3 extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取请求参数
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        String[] hobby = request.getParameterValues("hobby");

        System.out.println("用户名:"+username);
        System.out.println("密码:"+password);
        System.out.println("兴趣爱好:"+ Arrays.asList(hobby));
    }
}

Get请求的中文乱码解决:

//获取请求参数
String username = request.getParameter("username");

//1.先以iso8859-1进行编码
//2.再以utf-8进行编码
username = new String(username.getBytes("iso-8859-1"),"UTF-8");

POST请求的中文乱码解决

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
...
...
    }

请求转发:从一个资源跳到另一个资源

请求转发地址栏上的url不变
request.getRequestDispatcher() 获取请求转发对象
servlet1代码:
在这里插入图片描述

servlet2代码:
在这里插入图片描述

HttpServletResponse类

HttpServletResponse类和HttpServletRequest类一样,每次请求进来,Tomcat服务器都会创建一个Response对象传递给Servlet程序去使用。HttpServletRequest表示请求过来的信息,HttpServletResponse表示所有响应的信息。

输出流

字节流 getOutputStream(); 常用于下载(传递二进制数据)
字符流 getWriter(); 常用于回传字符串(常用)

两个流同时只能使用一个,同时使用会报错。

如何往客户端回传数据

:往客户端回传 字符串 数据。

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//往客户端回传 字符串 数据。
		PrintWriter writer = response.getWriter();
		writer.write("response's content!!!");
    }

响应的乱码 解决

//使用UTF-8,设置响应头
//此方法一定要在获取流对象之前调用才有效
response.setContentType("text/html;charset=UFT-8");

请求重定向

请求重定向,是指客户端给服务器发请求,然后服务器告诉客户端说,我给你一些地址。你去新地址访问,叫请求重定向(因为之前的地址可能已经被废弃)。//随着时间的推移和项目的不断更新,这个接口被废弃了,由新的接口所取代。

请求重定向的特点:
1.浏览器地址栏会发生变化
2.两次请求
3.不共享Request域中数据
4.不能访问WEB-INF下的资源
5.可以访问工程外的资源

请求重定向的第一种方案:

//设置响应状态码302,表示重定向(已搬迁)
response.setStatue(302);
//设置响应头,说明 新的地址在哪里
response.setHeader("Location","http://localhost:8080");

请求重定向的第二种方案:

response.sedRedirect("http://localhost:8080");

请求转发和重定向的区别

1.请求转发是在服务器内部的跳转,整个过程中只有1个请求,重定向是在客户端的跳转,产生了新请求
2.请求转发后,地址栏上的url不变,可以继续使用request中的数据,而重定向后,url会改变,就不能使用原request中的数据
3.请求转发只能跳转到服务内部的资源,重定向可以访问服务器外部的资源

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值