Servlet技术入门

一、什么是Servlet

  • 1、Servlet是JavaEE规范之一,规范就是接口。
  • 2、Servlet是JavaWeb三大组件之一。

三大组件分别是:Servlet程序、Filter过滤器、Listener监听器。

  • 3、Servlet是运行在服务器上的一个java小程序,它可以接受客户端发送过来的请求,并响应数据给客户端。

二、如何使用Servlet

  • 继承HttpServlet实现Servlet程序
  • 并需要在xml里面配置映射

三、HTTP协议

  • 客户端->服务器叫请求
  • 服务器->客户端叫响应
* 常用的响应码:
* 200   表示请求成功
* 302   表示请求重定向
* 404   表示请求服务器已经收到了,但是数据不存在(请求地址错误)
* 500   表示服务器已经收到请求,但是服务器内部错误(代码错误)

* 常用请求头:
* Accept: 表示客户端可以接受的数据类型
* Accept-Languege: 表示客户端可以接受的语言类型
* User-Agent: 表示客户端浏览器的信息
* Host: 表示请求时的服务器ip和端口号

请求又分为get请求和post请求:

  • get 请求用来从服务器上获取资源
  • post 请求通常是用来向服务器提交数据的
    在这里插入图片描述

四、Servlet下的类

4.1 HttpServletRequest类
  • 每次只要请求进入Tomcat服务器,它就会把请求过来的Http协议信息解析好封装到Request对象中。
  • 然后传递到Service方法(doGet和doPost)中给我们使用。
		System.out.println("servlet01的get方法");
        //getRequestURI()   获取请求的资源路径
        System.out.println("URI->" + request.getRequestURI());
        //getRequestURL()   获取请求的统一资源定位符(绝对路径)
        System.out.println("URL->" + request.getRequestURL());
        //getRemoteHost()   获取客户端ip地址
        System.out.println("客户端 ip地址:" + request.getRemoteHost());
        //getHeader()       获取请求头
        System.out.println("请求头User-Agent:" + request.getHeader("User-Agent"));
        //getMethod()       获取请求的方式GET或POST
        System.out.println("请求的方式:"  + request.getMethod());

用户登陆传参数值

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="/JavaWeb01/Servlet01" method="get">
        用户名:<input type="text" name="username"><br/>
        密码:<input type="password" name="password"><br/>
        爱好:<input type="checkbox"  name = "hobby" value="sing">唱歌
        <input type="checkbox" name = "hobby" value="dance">跳舞
        <input type="checkbox" name="hobby" value = "play">和cxk一起打篮球
        <input type="submit" value="登陆">
    </form>
</body>
</html>
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//设置req对象的解码方式
		req.setCharacterEncoding("UTF-8");
        //获取请求参数
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        String[] hobby = req.getParameterValues("hobby");

        System.out.println("用户名:" + username);
        System.out.println("密码:" + password);
        System.out.println("爱好:" + Arrays.asList(hobby));
        for(int i = 0; i < hobby.length; i ++ ){
            System.out.println(hobby[i]);
        }
    }

请求转发

  • 请求转发指的是服务器收到请求后,从一个资源跳转到另一个资源的操作。
------------servlet02---------------------
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=utf-8");
        req.setAttribute("dog","leigou");
        //dispatcher调度
        RequestDispatcher rd = req.getRequestDispatcher("/Servlet03");
        rd.forward(req,resp);
    }

------------servlet03---------------------
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        PrintWriter out = resp.getWriter();
        String dog = (String) req.getAttribute("dog");
        if(dog != null) out.println(dog);
    }

Web下的路径

* 在web中/斜杠是一种绝对路径
* 如果被浏览器解析,得到的地址是:http://ip:port/
*                <a href="/"></a>
* 如果被服务器解析,得到的地址是:http://ip:port/工程路径
* Redirect:使改方向
* 特殊的:response.sendRediect("/") :http://ip:port/
4.2 HttpServletResponse类
  • 上面一样,每次请求进来,Tomcat服务器都会创建一个Response对象传递给Servlet程序去使用,HttpServletRequest表示请求的信息,HttpServletResponse表示所有响应的信息。

两个响应流:

* 字节流 getOutputStream()     常用与下载(传递二进制数据)
* 字符流 getWriter()           常用于回传字符串(常用)
* 两个流同时只能使用一个!
//在客户端上打印hello
PrintWriter out = resp.getWriter();
out.write("hello");

服务器和客户端字符编码集的设置

//设置服务器字符集为UTF-8
resp.setCharacterEncoding("UTF-8");
//通过响应头,设置浏览器使用UTF-8字符集
resp.setHeader("Content-Type","text/html;charset=UTF-8");
//默认ISO-8859-1
//同时设置服务器和客户端都是用UTF-8字符集,还设置了响应头
resp.setContentType("text/html;charset=utf-8");
System.out.println(resp.getCharacterEncoding());
PrintWriter out = resp.getWriter();
out.write("磊是真狗");

请求重定向

  • 请求重定向:
    客户端给服务器发请求,然后服务器给客户端一个新地址去访问(可能旧地址已经被抛弃了emm)
  • 第一种方法:
//设置响应状态码302,表示重定向
resp.setStatus(302);
//设置响应头,说明新地址在哪
resp.setHeader("Location","/JavaWeb01/Servlet03");

-第二种方法:

resp.sendRedirect("/JavaWeb01/Servlet03");
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值