Servlet学习笔记(回送字符&传递数据)

part1

getWriter() 和getOutputStream() 都可以回送字符数据

区别在于:
1. getWriter() 用于向客户机回送字符数据
2. getOutputStream() 返回的对象,可以回送字符数据,也可以回送字节数据(二进制数据)

/*getWriter()*/
PrintWriter out=response.getWriter();
out.println("abc");


/*getOutputStream()*/
OutputStream os=response.getOutputStream();
os.write("abc".getBytes());

但需要注意的是,同时使用printWriter和outputstream,则会发生错误:

OutputStream os=response.getOutputStream();
os.write("hello,world".getBytes());
PrintWriter out=response.getWriter();
out.println("abc");

报错内容:
java.lang.IllegalStateException: getOutputStream() has already been called for this response

原因:当发现os.write()时,就会把回送的信息封装到response对象中,返回给web服务,web服务器将response拆解成http响应信息,之后web服务器会检测response相关的流是否关闭,如果没有关闭,则关闭。(这也是为什么我们没有主动关闭流,程序也没问题的原因)

part2

传递数据部分
方法:
1. 使用java基础 static
2. 使用sendRedirect()
3. 使用session 传递

(1)sendRedirect()

response.sendRedirect("/UsersManager/MainFrame?username="+username+"&pwd="+password);

基本格式:

response.sendRedirect("servlet的地址?参数名=参数值&参数名=参数值...");

在接受数据的Servlet中:

String 参数=request.getParameter("参数名");

(2)使用session()来传递字符参数和对象

A.传递字符串
放入session

request.getSession.setAttribute("loginUser",username); 

取出session 在JSP中通过session取出

request.getSession.getAttribute("loginUser");

B.传递对象

User user= new User();
user.setName(“xiaoli”);
user.setPassWord(“123”);

放入session

request.getSession.setAttribute("userObj",user); 

取出session

User user=(User)request.getSession.getAttribute(“userObj”);

你可能感兴趣的:(Servlet)