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;

}

posted on 2014-10-28 20:00  徐异安  阅读(140)  评论(0)    收藏  举报

导航