1.字符流与字节流
package cn.hncu.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class OutServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//字节流
ServletOutputStream out=response.getOutputStream();
out.println("hello..");
// out.println("中文.."); //字节流无法用print()输出中文--只支持iso8859-1,所以英文可以,中文不可以--出现500异常
out.write("中文".getBytes());//字节流可以用write()方法输出中文---不用设置编码
getServletContext().getContextPath();
//只能获取一种流(字节流,字符流不能共存)
// PrintWriter pw=response.getWriter();
// response.setCharacterEncoding("utf-8");//只是设置传输编码,并没有告诉浏览器要用什么编码来解析
response.setContentType("text/html;charset=utf-8");//既可以设置传输编码,又可以告诉浏览器使用什么编码来解析
// pw.println("中文");
}
}
2.转发(request.getRequestDispatcher("/OutTwoServlet").forward(request, response))
package cn.hncu.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class OutOneServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out=response.getWriter();
out.println("第一个Servlet的输出信息");
// out.flush();
/*
* 1.第1个servlet的输出信息只是保存在缓存中,会被第2个servlet清空
* 2.如果第1个servlet刷了缓存flush(),第2个servlet不会输出,而且转发会出现异常
* 3.这种方式下,转发后地址栏显示的还是第一个servlet的地址
*/
//转发--站内转发,不要带项目名
request.getRequestDispatcher("/OutTwoServlet").forward(request, response);
}
}
package cn.hncu.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class OutTwoServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out=response.getWriter();
out.println("第二个Servlet的输出信息");
}
}
package cn.hncu.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* @author<a href="mailto:794530831@qq.com">dragon_Dai</a>
* @version 2017-09-30 下午2:59:49
* @filename ForwardOneServlet.java
*/
public class ForwardOneServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("One.111:doGet....");
//转发地址栏中,地址栏中显示的第一个servlet的地址,真正应答的是第2个servlet
// request.setCharacterEncoding("utf-8"); Get方式请求,这样对中文乱码解决无效
//上面这一句只是设置请求体的编码,而Get方式的数据在请求头中
String name=request.getParameter("name");
name=new String(name.getBytes("iso8859-1"), "utf-8");
String age=request.getParameter("age");
System.out.println(name+","+age);
//传参数--通过这种方式,往request容器中存放数据,供下一个servlet从中取
request.setAttribute("time", "2017年9月29日20点13");
//转发--如果第一个servlet通过get方式请求,转发后的第二个servlet,也是采用get方式请求
request.getRequestDispatcher("/ForwardTwoServlet").forward(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("One.222:doPost....");
request.setCharacterEncoding("utf-8");
String name=request.getParameter("name");
String age=request.getParameter("age");
System.out.println(name+","+age);
//转发--如果第一个servlet通过post方式请求,转发后的第二个servlet,也是采用post方式请求
int n=5;
if(n>3){
request.getRequestDispatcher("/ForwardTwoServlet").forward(request, response);
}
//第一个servlet转发代码后,不能再转发,否则会发生500异常
// if(n<10){
// request.getRequestDispatcher("/OutTwoServlet").forward(request, response);
// }
}
}
package cn.hncu.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ForwardTwoServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("Two.111:doGet....");
// request.setCharacterEncoding("utf-8"); Get方式请求,这样对中文乱码解决无效
//上面这一句只是设置请求体的编码,而Get方式的数据在请求头中
String name=request.getParameter("name");
name=new String(name.getBytes("iso8859-1"), "utf-8");
String age=request.getParameter("age");
System.out.println(name+","+age);
//从requset中取出前面存放的数据--因为可以存放各种数据,所以返回值为Object
String time = (String) request.getAttribute("time");
System.out.println(time);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("Two.222:doPost....");
request.setCharacterEncoding("utf-8");
String name=request.getParameter("name");
String age=request.getParameter("age");
System.out.println(name+","+age);
}
}