1、用户禁止cookie,如何继续使用session?(了解)
(1)当用户禁止cookie以后,服务器仍然会发送sessionId(以set-cookie消息头的方式),但是,浏览器会拒绝接受,这样,session机制会失效。
(2)可以使用url重写来解决该问题
a,什么是url重写?
如果某个组件需要session机制的支持,则不能直接使用该组件的地址去访问,而应该使用服务器生成的组件的地址(会在组件的地址后面添加sessionId)去访问。
b,如何重写?
//用于链接地址,表单提交地址。
response.encodeURL(Stringurl);
//用于重定向
response.encodeRedirectURL(Stringurl);
比如:
response.sendRedirect(
response.encodeRedirectURL("list.jsp"));
转发不用考虑。
2、session的优缺点
优点:
session相对安全
session能够保存的数据类型更丰富
session能够保存的数据大小更大
缺点:
session需要将所有数据写在服务器端,所以,服务器会占用过多的内存空间。可以考虑使用cookie来代替或者使用数据库来保存状态(即数据)。
3、过滤器
(1)什么是过滤器?
servlet规范当中定义的一种特殊的组件,用来拦截容器的调用过程并进行相应的处理。
(2)如何写一个过滤器
step1,写一个java类,实现Filter接口。
step2,将处理逻辑写在doFilter方法里面。
step3,配置过滤器(web.xml)
(3)过滤器的初始化参数
step1,在web.xml,使用<init-param>配置初始化参数。
step2,使用FilterConfig.getInitParameter(String paraname)来获取初始化参数值。
(4)过滤器的优先级
当有多个过滤器都满足过滤的条件,则容器依据<filter-mapping>的先后顺序来调用过滤器。
(5)优点:
a,可以将多个web组件相同或者相近的处理逻辑(比如,session验证、权限的管理、编码的处理等等)集中写在过滤器里面,方便代码的维护。
b,可以实现代码的“可插拔性”:删除或者添加某些模块,不会影响到整个程序的正常运行。
4、上传文件(扩展)
step1,设置表单的enctype属性:<form action=""method="post" enctype="multipart/form-data">。(http协议的要求)
step2,在服务器端,不能够直接使用request.getParameter方法,需要使用InputStreamrequest.getInputStream()获得一个输入流,然后分析该流来获得数据。一般使用一些工具来分析,比如apache提供的commons-fileupload.jar。首先,需要将相应的.jar文件拷贝到WEB-INF\lib下。然后,使用其api来分析InputStream。
1 表单提交时get和post的区别?
1) get和post是两种不同的协议,post在协议中可以传输数据,get只能在请求地址中通过请求参数传递数据。(只限于文本)
2) post提交的数据量受服务器的限制,get提交的数据量受浏览器地址栏长度的限制
3) 都不安全。如果要保证安全使用https协议。
注意:文件上传只能用post
2 描述Servlet的生命周期
1) servlet重要的生命周期方法(容器调用的方法)init,service,destroy
默认情况下第一次访问servlet时实例化对象(也可以配置为启动即加载)
实例化后调用init
每次受到请求调用service
实例被销毁前调用destroy
2) 单实例,多线程
3 列举httpServletRequest的常用方法
1) 获取请求参数:getParameter(String name);getParameterMap();
2) 获取请求地址:getRequestURI();
3) 获取请求应用名:getContextPath();
4) 获取请求的头信息:getHeader(String name);
5) 根据请求信息中的sessionId获得session:getSession();
6) 作为一个容器,存取数据:setAttribute(String name,Objectvalue);getAttribute(String name);
7) 设置解码的字符集(默认:ISO8859-1):setCharacterEncoding(Stringcharset);
Stringname="你好";
Stringname1 = URLEncoder.encode(name,"utf-8");
name= URLDecoder.decode(name1,"utf-8");
8) 获取请求信息中提交的cookie:getCookies();
9) 实现转发:getRequestDispatcher(".....").forward(request,response);
4 列举httpServletRespose的常用方法
1. 获得响应内容的输出流:getWriter();//输出文本
getOutputStream();//输出非文本
2. 设置响应头中的ContentType:response.setContentType(String);
3. 通过响应头传递cookie:response.addCookie();
4. 生成一个重定向响应:sendRedirect("");
5 谈一谈使用session的经验
1 不能放安全级别要求高的信息(sessionID容易获得)
2 不能放大量的信息(服务器的性能问题)
3 不能放持久性的信息(session有持续时间)
能放的很有限(一般都不是业务信息,而是为了操作方便的信息):登录后的用户ID,服务器端生成的验证码.......
6 转发和重定向的区别
1. 转发请求一个组件,该组件在服务器端把请求转发给另外一个组件由另外一个组件实现应用。
2. 重定向请求一个组件,该组件生成一个重定向向相应浏览器收到此响应后访其他的组件。(多个请求)
3. 一个事情两个组件协同完成用转发。(jsp Model2)两个组件之间一般需要传递数据用request.setAttribute("...",...);
一个事情完成自动开始两外一件事情用重定向。
7 相对地址和绝对地址的区别
1.
相对地址 绝对地址
连接,表单提交 b.jsp /应用名/目录名/b.jsp
重定向 b.jsp /应用名/目录名/b.jsp
转发 b.jsp /目录名/b.jsp
2. 相对地址在转发时容易出错!
8 javaweb开发中的编码问题
1. 页面显示
servlet
response.setContetType("text/html;charset=utf-8");
jsp jsp引擎读取jsp页面时的编码,即当前文件的编码
<%@pagepageEncoding="gbk"contentType="text/html;charset=utf-8"%>
2. 提交数据的问题
servlet
request.setCharacterEncoding("utf-8");
jsp这样写可能是无效的,一般用Filter
<%request.setCharacterEncoding("utf-8"); %>