Servlet常用方法

Request

package com.xxx.servlet;

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;

@WebServlet("/ser01")
public class Servlet01 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取请求时的完整路径 从http开始 到?前面结束
        String url = request.getRequestURL() + "";
        System.out.println("完整路径:" + url);
        //获取请求时的部分路径 项目站点名开始 到?前面结束
        String uri = request.getRequestURI();
        System.out.println("部分路径:" + uri);
        //获取请求时的参数字符串 从?后面开始 到最后的字符串
        String queryString = request.getQueryString();
        System.out.println("参数字符串:" + queryString);
        //获取请求方式(GET和POST)
        String method = request.getMethod();
        System.out.println("请求方式:" + method);
        //获取当前协议版本(HTTP/1.1)
        String prototo1 = request.getProtocol();
        System.out.println("协议版本:" + prototo1);
        //获取项目的站点名(项目对外访问路径)
        String webapp = request.getContextPath();
        System.out.println("站点名:" + webapp);
        //获取置顶名称的参数值 返回字符串
        String uname = request.getParameter("uname");
        String upwd = request.getParameter("upwd");
        System.out.println("uname:" + uname);
        System.out.println("upwd:" + upwd);

        //获取指定名称的参数的所有参数值(用于复选框传值)
        String[] hobbys = request.getParameterValues("hobby");
        //判断是否为空
        if (hobbys != null && hobbys.length > 0) {
            for (String hobby : hobbys) {
                System.out.println("爱好" + hobby);
            }
        }
    }
}

解决POST乱码:

package com.xxx.servlet;

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;

@WebServlet("/ser02")
public class Servlet02 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置编码格式
        request.setCharacterEncoding("UTF-8");
        //获取客户端传递的参数
        String uname = request.getParameter("uname");
        String upwd = request.getParameter("upwd");
        System.out.println("用户名:" + uname);
        System.out.println("密码" + upwd);

    }
}

请求转发
Servlet03:

package com.xxx.servlet;

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;

/*
 * 请求转发跳转
 *   可以让请求从服务端跳转到客户端(或跳转到指定Servlet)
 *   服务端行为
 *   特点:
 *       1、服务端行为
 *       2、地址栏不发生改变
 *       3、从始至终只有一个请求
 *       4、request数据可以共享
 * */
@WebServlet("/ser03")
public class Servlet03 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //接收客户端的参数
        String uname = request.getParameter("uname");
        System.out.println("Servlet03 uname:" + uname);

        //请求转发跳转到Servlet04
//        request.getRequestDispatcher("ser04").forward(request, response);
        //请求转发跳转到jsp页面
        request.getRequestDispatcher("login.jsp").forward(request, response);
    }
}


Servlet04:

package com.xxx.servlet;

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;

/*
 * 请求转发跳转
 *   可以让请求从服务端跳转到客户端(或跳转到指定Servlet)
 *   服务端行为
 * */
@WebServlet("/ser04")
public class Servlet04 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //接收客户端的参数
        String uname = request.getParameter("uname");
        System.out.println("Servlet04 uname:" + uname);

    }
}

域对象
通过该对象可以在一个请求中传递数据,作用范围:在一次请求中有效,即服务器跳转有效

request域对象中的数据在一次请求中有效,则经过请求转发,域中的数据依然存在,则在请求转发过程中可以通过request来传输/共享数据
Servlet05:

package com.xxx.servlet;

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.util.ArrayList;
import java.util.List;

/*
* request作用域
*  通过该对象可以在一个请求中传递数据,作用范围:在一次请求中有效,即服务器跳转有效
* */
@WebServlet("/ser05")
public class Servlet05 extends HttpServlet {
   @Override
   protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       System.out.println("Servlet05.....");
       //设置域对象内容
       request.setAttribute("name", "admin");
       request.setAttribute("age", 20);
       List<String> list = new ArrayList<>();
       list.add("aaa");
       list.add("bbb");
       request.setAttribute("list", list);
       //请求转发Servlet06
       request.getRequestDispatcher("ser06").forward(request, response);
   }
}

Servlet06:

package com.xxx.servlet;

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.util.List;

/*
 * request作用域
 *  通过该对象可以在一个请求中传递数据,作用范围:在一次请求中有效,即服务器跳转有效
 * */
@WebServlet("/ser06")
public class Servlet06 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("Servlet06.....");
        //获取域对象内容
        String name = (String) request.getAttribute("name");
        System.out.println("name:" + name);
        Integer age = (Integer) request.getAttribute("age");
        System.out.println("age:" + age);
        List<String> list = (List<String>) request.getAttribute("list");
        System.out.println(list.get(0));


    }
}

Response

响应数据
getWriter 字符输出流(输出字符串)
getOutputStream 字节输出流 (输出一切数据)

两种流不能同时使用

package com.xxx.servlet;

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.IOException;
import java.io.PrintWriter;

@WebServlet("/ser07")
public class Servlet07 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取字符输出流
        PrintWriter writer = response.getWriter();
        //输出数据
        writer.write("Hello");

        //字节输出流
        ServletOutputStream out = response.getOutputStream();
        out.write("Hi".getBytes());
    }
}

响应乱码

        //设置服务端的编码格式
        response.setCharacterEncoding("UTF-8");
        //设置客户端的编码格式
        response.setHeader("context-type", "text/html;charset=UTF-8");

        //获取字符输出流
        PrintWriter writer = response.getWriter();
        //输出数据
        writer.write("Hello");
        //字节输出流
        ServletOutputStream out = response.getOutputStream();
        //响应乱码
        out.write("Hi".getBytes("UTF-8"));

重定向
1、地址栏会发生改变
2、request对象不能共享
在这里插入图片描述

文件上传

前台实现:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>文件上传</title>
</head>
<body>
<!--文件上传
1、准备表单
2、设置表单提交类型
3、设置表单类型为文件上传表单 enctype="multipart/form-data"
4、设置文件提交的地址
5、准备表单元素 (1)普通的表单项 type="text" (2)文件项 type="file"
6、设置表单元素的name属性值(表单提交一定要设置表单元素的name属性值,否则后台无法接收到数据)
-->
<form method="post" enctype="multipart/form-data" action="uploadServlet">
姓名:<input type="text" name="uname"><br>
文件:<input type="file" name="myfile"><br>
    <!--button默认是提交类型-->
    <button>提交</button>
</form>
</body>
</html>

后台实现:
使用注解@MultipartConfig讲一个Servlet标识为支持文件上传,Servlet将"multipart/form-data" 的POST请求封装成Part,通过Part对上传的文件进行操作

package com.xxx.servlet;

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

@WebServlet("/uploadServlet")
@MultipartConfig
public class UploadServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("文件上传...");
        //设置编码格式
        request.setCharacterEncoding("UTF-8");
        //获取前台uname参数
        String uname = request.getParameter("uname");
        System.out.println("uname:" + uname);

        //获取Part对象 表单中文件域file的name属性值
        Part part = request.getPart("myfile");
        //通过part对象得到上传的文件名
        String file = part.getSubmittedFileName();
        System.out.println("file:" + file);
        //得到文件存放的路径
        String filePath = request.getServletContext().getRealPath("/");
        System.out.println("存放的路径:" + filePath);
        //上传文件到指定路径
        part.write(filePath + "/" + file);
    }

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值