javaweb response request
response
1、向客户端输出中文数据
//程序以什么码表输出,程序就一定要控制浏览器以什么码表打开
//用html中的meta标签模拟了一个http响应头,来控制浏览器的行为
2、write流输出数据的问题
//用getWriter输出时需要response调用serCharacterEncoding(设置response使用的码表,以控制response以什么码表向浏览器写数据)和setHeader (以什么码表打开服务器发送的数据)
或使用setContentType设置就行了
3//文件下载
public class ResponseDemo extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String path = this.getServletContext().getRealPath("/download/人.jpg");
String filename = path.substring(path.lastIndexOf("\\")+1);
InputStream in = null;
OutputStream out = null;
//下载中文文件,文件名要经过编码
response.setHeader("content-disposition", "attachment;filename="+URLEncoder.encode(filename, "UTF-8"));
try {
in = new FileInputStream(path);
out = response.getOutputStream();
int len =0;
byte[] bt = new byte[1024];
while((len = in.read(bt))>0){
out.write(bt, 0, len);
}
} finally{
if(in!=null){
try {
in.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(out!=null){
try {
out.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
//实用的跳转技术
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//用于处理用户登录的servlet
//用户登录成功
String message ="<meta http-equiv='refresh' content='3;url=/day06/index.jsp'>登录成功<a href=''>登录</a>";
this.getServletContext().setAttribute("message", message);
this.getServletContext().getRequestDispatcher("/message.jsp").forward(request, response);
}
//定时刷新页面
private void test(HttpServletResponse response) throws IOException {
response.setHeader("refresh", "3");
String data = new Random().nextInt(100000)+"";
response.getWriter().write(data);
}
注意:
response.getOutStream() 与 response.getWriter()不能同时在一个调用链里使用
request
httpServletRequest对象代表客户请求
1、常用方法
getRequestURI()获取当前资源的/day06/servlet/demo
getRequestUrl()获取当前资源的http://localhost:8080/day06/servlet/demo
URI()设置权限,,记录访问次数
getRemoteAddr() 得到客户机的ip地址
2、获取请求数据(获取请求数据时一般来说要先检查后使用)
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//获取数据方式1 主要用
String name = request.getParameter("username");
if(name!=null&&!name.trim().equals("")){
System.out.println(name);
}
//获取数据方式2
Enumeration e = request.getParameterNames();
while(e.hasMoreElements()){
name = (String) e.nextElement();
String value = request.getParameter(name);
System.out.println(name+" "+value);
}
//获取数据方式3主要用
Map<String,String[]> map = request.getParameterMap();
User user = new User();
try {
BeanUtils.populate(user, map);//反射,用map集合数据填充bean
// BeanUtils.copyProperties(user, formBean); bean的拷贝
} catch (IllegalAccessException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (InvocationTargetException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
System.out.println(user);
//获取数据方式4 应用在文件上传
InputStream in = request.getInputStream();
int len =0;
byte [] buffer = new byte[1024];
while((len = in.read(buffer))>0){
System.out.println(new String(buffer,0,len));
}
}
3、request.setCharacterEncoding(“UTF-8”);//只对post提交有效
超链接提交的中文,服务器不想乱码,也只能手工处理
username = new String(username.getByte(“iso8859”),”UTF-8”)
4、request.getAttrbute():获取域中的数据
request.getParament():获取客户机提交的数据
5、
请求转发的细节
流关闭之后再执行跳转就会导致抛出异常
writer.close()
request.getRequestDispatcher(“/message.jsp”).forward(request,response);
跳转时候一定要return
if(true){
request.getRequestDispatcher(“/message.jsp”).forward(request,response);
return true;
}
request.getRequestDispatcher(“/index.jsp”).forward(request,response);
6、forward时,会清空response中的数据
request.getRequestDispatcher("apage.jsp").forward(request, response);//转发到apage.jsp
response.sendRedirect("apage.jsp");//重定向到apage.jsp
7、RequestDispatcher既有forward函数还有一个include函数。用include实现页面包含。包含页面不能有全局架构标签
8、web中地址的写法
9、防盗链
String referer = request.getHeader(“referer”);
if(referer==null || !referrer.startsWith(http://localhost)){
response.sendRedirect(“/day06/index.jsp”);
return;
}
浙公网安备 33010602011771号