HttpServletRequest --- request(请求)
- 所有的 和请求相关的操作,都用这对象来处理
- 当有请求来的时候 , request就被实例化
复制代码 HttpServletResponse --- response(响应)
- 所有和响应相关的操作,都用这个对象来处理
- 当有请求来的时候 , response 就被实例化
- 当你想要给出响应就使用 response ,, 我们给出的响应,必须要展示在客户端(浏览器)
复制代码 init方法什么时候执行?
- * 默认当我们第一次访问servlet的时候被调用,延迟加载。
- * 初始化方法只执行一次。
- public class HelloServlet extends HttpServlet {
- @Override
- public void init(ServletConfig config) throws ServletException {
- System.out.println("servlet初始化");
- System.out.println(config.getInitParameter("username"));
- System.out.println(config.getInitParameter("password"));
- }
- @Override
- protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- doGet(req,resp);
- }
- @Override
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- //接收参数 ,处理请求
- request.getParameter("username");
- request.getParameter("password");
- // 给出响应
- // 客户端和服务器端的信息传递
- // 设置响应的字符集 一定要放在获取流之前
- // 服务器处理字符串按照UTF-8处理
- response.setCharacterEncoding("utf-8");
- // 添加响应头,告诉浏览器以HTML的格式来解析响应字符串
- response.addHeader("content-type","text/html;charset=utf-8");
- //Io流
- PrintWriter writer = response.getWriter();
- //向客户端回复数据
- writer.write("我是后台返回的数据");
- // * writer.write---写字符。
- // * writer.print---写字节。
- //流的操作
- writer.flush();
- writer.close();
- }
- }
复制代码 System.out.println("请求的方法:" + request.getMethod());
System.out.println("请求的根路径:" + request.getContextPath());
System.out.println("请求的URI:" + request.getRequestURI());
System.out.println("请求的URL:" + request.getRequestURL());
System.out.println("请求的servletPath:" + request.getServletPath());- @WebServlet("/demo.do")
- public class Demo01Servlet extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- // 根据key获取对应的value
- request.getParameter("");
- // 获取一个key对应的多个值,返回值为String类型的数组 例如:复选框
- String[] hobbies = request.getParameterValues("hobby");
- // System.out.println(Arrays.toString(hobbies));
- // 获取请求中传过来的参数的key值,根据key值获取对应的value值
- Enumeration<String> parameterNames = request.getParameterNames();
- while(parameterNames.hasMoreElements()){
- System.out.println(parameterNames.nextElement());
- }
- // 可以获取到请求中的所有的键值对,返回值是一个map集合
- // 这个map集合的key是String,value是String[]
- // username=admin,password=123456,hobby=a,b,c,gender=man
- Map<String, String[]> map = request.getParameterMap();
- for (Map.Entry<String, String[]> name : map.entrySet()) {
- String key = name.getKey();
- String[] value = name.getValue();
- System.out.println(key + "--->" + Arrays.toString(value));
- }
- }
- @Override
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- doGet(request,response);
- }
复制代码 }
转发 request.getRequestDispatcher("demo03.do").forward(request,response);
- @WebServlet("/demo02.do")
- public class Demo02Servlet extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- /*
- * 请求转发---由多个servlet来处理同一个请求
- *
- * 请求转发是在服务器上完成的,跟客户端是否无关!!!
- *
- *
- */
- String name = request.getParameter("name");
- System.out.println("Demo02Servlet,name:" + name);
- // getRequestDispatcher参数:转发的servlet的地址
- // forward参数:request,response,把当前servlet用的request和response传给下一个
- request.getRequestDispatcher("demo03.do").forward(request,response);
- }
- @Override
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- doGet(request, response);
- }
- }
复制代码- @WebServlet("/demo04.do")
- public class Demo04Servlet extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- /*
- * 作用域:起作用的区域
- *
- * 往request作用域中添加了一个属性name,值是zhangsan
- *
- * 请求转发的时候是同一个request
- *
- */
- request.setAttribute("name","zhangsan");
- // name怎么取出来?
- System.out.println("demo04.do---name:" + request.getAttribute("name"));
- request.getRequestDispatcher("demo05.do").forward(request,response);
- // 根据指定的key,删除对应的value
- // request.removeAttribute("name");
- // 获取request作用域中的所有的key
- // Enumeration<String> attributeNames = request.getAttributeNames();
- }
- @Override
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- }
- }
- request.getRequestDispatcher("demo03.do").forward(request,response);
- }
- @Override
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- doGet(request, response);
- }
- }
复制代码 重定向 response.sendRedirect("success.html");
- @WebServlet("/demo06.do")
- public class Demo06Servlet extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- response.getWriter()
- response.setCharacterEncoding("utf-8");
- response.addHeader("content-type","text/html;charset=utf-8");
- response.sendRedirect("success.html");
- }
- @Override
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- }
- }
复制代码 请求转发和重定向的区别:
- 1.重定向是两次请求,请求转发是一个请求
- 2.重定向是客户端行为,请求转发是服务器行为
- 3.重定向浏览器地址会发生改变,转发不会
复制代码 最常见的客户端传参的方式两种,get,post
- * 浏览器地址栏直接输入:一定是get请求
- * 超级链接:一定是get请求
- * 表单:可以是get,也可以是post,取决于method
- *
- * GET请求和POST请求的区别:
- * GET:请求的参数会在浏览器的地址栏中显示,不安全;请求的长度限制在1K之内。
- * 没有请求体,无法通过request去设置一些参数。
- * POST:请求的参数不会在浏览器的地址栏中显示,相对安全。
- * 把请求的参数封装成几个数据报文(请求体)。请求参数的长度没有限制。
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |