servlet&request&response笔记

新建一个类ServletTest实现Servlet并重写方法

public class ServletTest implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {

    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {

    }
}

(1)init方法:默认情况下,servlet被第一次访问时调用,只调用一次

(2)service方法:每次请求Servlet都会被调用

(3)destroy:在内存释放或服务器关闭的时候调用

(4)getServletInfo:获取Servlet信息

(5)ServletConfig:获取ServletConfig对象


体系结构:

因为每次重写太麻烦,并且常用的方法只有service,因此直接继承HttpServlet简化操作

package servletDemo.request;

import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

//访问路径
@WebServlet("/demo4")
public class ServletDemo4 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("get...");

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("post...");
    }
}


url配置:在浏览器中填写/demo1或/demo2都可以访问


Request:获取请求数据 

Response:设置响应数据

package servletDemo.request;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedReader;
import java.io.IOException;


@WebServlet("/demo5")
public class RequestDemo1 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        //1.获取方法
        String method = req.getMethod();
        System.out.println(method);
        //2.获取虚拟路径--/tomcatDemo
        String contextPath = req.getContextPath();
        System.out.println(contextPath);
        //3.获取URL资源路径--http://localhost:8080/tomcatDemo/demo5
        StringBuffer url = req.getRequestURL();
        System.out.println(url);
        //4.获取uri--统一资源标识符
        String uri = req.getRequestURI();
        System.out.println(uri);
        //5.获取请求参数
        String queryString = req.getQueryString();
        System.out.println(queryString);
        //6. 获取请求头--浏览器的版本信息
        String header = req.getHeader("user-agent");
        System.out.println(header);

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        //获取post请求体:请求参数

        //1.获取字符输入流
        BufferedReader br = req.getReader();
        //2.读取数据
        String s = br.readLine();
        System.out.println(s);

    }
}


通用方式获取请求参数:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="/tomcatDemo/demo6" method="post">
    <input type="text" name="username"><br>
    <input type="password" name="password"><br>
    <input type="checkbox" name="hobby" value="1">游泳
    <input type="checkbox" name="hobby" value="2">健身<br>
    <input type="submit">
</form>
</body>
</html>
package servletDemo.request;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedReader;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Map;


@WebServlet("/demo6")
public class RequestDemo2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        
        //1.获取所有参数的map集合
        Map<String, String[]> map = req.getParameterMap();
        for (String key : map.keySet()) {
            // username:zhangsan
            System.out.print(key + ":");
            //获取值
            String[] values = map.get(key);
            for (String value : values) {
                System.out.print(value + " ");
            }
            System.out.println();
        }
        System.out.println("--------");
        //2.根据key获取参数值,数组
        String[] hobbies = req.getParameterValues("hobby");
        for (String hobby : hobbies) {
            System.out.print(hobby + "  ");
        }
        //3.根据key获取单个值
        String username = req.getParameter("username");
        String password = req.getParameter("password");

        //解决 中文乱码
        username = new String(username.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8);
        System.out.println("username:" + username);
        System.out.println("password:" + password);
    }


    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        //解决post中文乱码
        req.setCharacterEncoding("UTF-8");
        this.doGet(req, resp);

    }
}

结果为:


解决中文乱码问题:

get:

new String(username.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8);

post:

req.setCharacterEncoding("UTF-8");

请求转发:

        //请求转发语句,其中“req4”是需要转发的新地址,只需要修改它就ok
        req.getRequestDispatcher("req4").forward(req, resp);

重定向:

package servletDemo;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class ResponseDemo1 {

    @WebServlet("/resp1")
    public class RequestDemo4 extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
/*
            resp.setStatus(302);
            resp.setHeader("Location", "/tomcat/resp2");
*/

            //简化方式:
            System.out.println("resp1......");
            //"/tomcatDemo/resp2":重定向新地址
            resp.sendRedirect("/tomcatDemo/resp2");
        }


        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        }
    }
}

response响应字符数据:

package servletDemo;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

public class ResponseDemo3 {
    @WebServlet("/resp3")
    public class RequestDemo4 extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            System.out.println("resp3");
            //设置编码格式和HTML
            resp.setContentType("text/html; charset=utf-8");
            //获取字符输出流
            PrintWriter writer = resp.getWriter();
            writer.write("好的呢");
            writer.write("<h2>hello<h2>");
        }
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        }
    }
}

response响应字节数据:

package servletDemo;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.PrintWriter;

public class ResponseDemo4 {

    @WebServlet("/resp4")
    public class RequestDemo4 extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //1.读取文件
            FileInputStream fis = new FileInputStream("d://a.html");
            //2.获取response字节输出流
            ServletOutputStream os = resp.getOutputStream();
            //3.完成流的copy
            byte[] buff = new byte[1024];
            int len = 0;
            while ((len = fis.read(buff)) != -1) {
                os.write(buff, 0, len);
            }
            fis.close();
        }
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        }
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值