首页 > 代码库 > servlet笔记

servlet笔记

开发servlet有三种方法:

   (1)    实现 Servlet接口

   (2)    通过继承 GenericServlet

   (3)    通过继承 HttpServlet

 

get提交和post提交的区别:

1.   从安全看 get<post 因为get 会把提交的信息显示到地址栏

2.   从提交内容看 get<post get 一般不要大于2k, post理论上无限制,但是在实际开发中,建议不要大于64k

3.   从速度看 get>post

4.   Get可以保留uri中的参数,利于收藏

 

HttpServletResponse说明:

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

 

OutputStream os=response.getOutputStream();

os.write("hello,world".getBytes());

 

如果是回送字符数据,则使用  PrintWriter对象 ,效率高

如果我们是回送字节数据(binary date) ,则只能使用 OutputStream

这两个流不能同时使用;    原因:流会自动关闭,再次使用流已经无效

 

解决乱码问题:

     乱码发生在三种情况:  form提交,超链接,sendRedirect().

 

1.form提交:

   (1)  post:     在服务器端设置成浏览器端的编码方式     request.setCharacterEncoding("utf-8");

   (2)  get:   需要转码两次,因为接收到服务器需要转换成服务器默认语言iso-8859-1,然后在转换成浏览器端的编码.

2.超链接;  和get处理方法一样,因为超链接本质上就是get提交

3.sendRedirect():

   返回浏览器乱码:   服务端是中文,浏览器也需要是中文显示,response.setContentType(“text/html;charset=utf-8”);

   下载提示框中文乱码:    String temp=java.net.URLEncoder.encode("传奇.mp3","utf-8");

 

HttpServletRequest对象的详解:

   getRequestURL   返回客户端发出请求时的完整URL。

   getRequestURI    返回请求行中的资源名部分。

   getQueryString  返回请求行中的参数部分(参数名+值)

   getRemoteAddr    返回发出请求的客户机的IP地址

   getRemoteHost    返回发出请求的客户机的完整主机名. 如果没有在dns上注册,则只能返回ip地址.

   getRemotePort     返回客户机所使用的网络端口号

  客户机的端口号是随机选择的,web服务器的端口号是一定的

  getLocalPort         返回web服务器所使用的网络端口号

  getLocalAddr        返回WEB服务器的IP地址。

  getLocalName       返回WEB服务器的主机名

 

forward与sendRedirect:

      Request中的Attribute在一次请求有效。一次请求:没有返回到浏览器,就为一次请求

 

       区别: (1)发生的位置不同:   sendRedirect 发生 浏览器, forward 发生 web服务器

               (2)用法不同:        sendRedirect地址需要带/web名称, forward不需要带/web名称

               (3)范围不同:        sendRedirect可以访问到外部的url,  forward只能访问web内的资源

 

 

cookie:

 

 cookie存放中文:

存放:  String val=java.net.URLEncoder.encode("顺平","utf-8");

         Cookie cookie=new Cookie("name",val);

取出:  String val=java.net.URLDecoder.decode(cookie.getValue(), "utf-8");

         out.println("name ="+val);

 

session:  

       session是存在服务器的内存中;    如果session属性名重复,则会覆盖.

 

servletContext:

       servletContext存在服务器,     服务器关闭或者web应用reload  则销毁.

     

 

 

servlet笔记