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);
}
}