1. 明确Tomcat服务器的本质,就是通过反射机制获取Servlet对象,然后调用该对象的方法。
2. 明确Servlet的生命周期,同时要知道Servlet对象是个伪单例,即构造方法为public的单例,要注意多线程的问题。
3. 明确ServletConfig接口,对应一个Servlet对象的配置信息对象,在Servlet运行init的时候获取;
明确ServletContext接口,对应所有Servlet对象的“四周环境”,在服务器启动阶段被实例化,在服务器关闭阶段被销毁,通过ServletConfig获取;
一个Servlet对象对应一个ServletConfig,所有Servlet对象对应一个ServletContext;
ServletContext范围可以完成跨用户传递数据,它的范围相当于整个Tomcat范围。
4. 知道前端欢迎页面的设置<welcome-file-list>,任何一种web资源都可以作为欢迎页面
5. 知道HTTP状态码404、500、405(get/post使用不正确),以及前端错误跳转<error-page>
6. 知道sun公司使用适配器设计模式为我们实现的GenericServlet,可以让我们不用写一些Servlet中的方法,同时提供了其他许多辅助方法。
7. 明确HTTP请求协议是依次由请求行、消息报头、空白行和请求体构成;响应协议依次是由状态行、响应报头、空白行和响应体构成。
8. 明确GET请求和POST请求的区别:
GET请求传送的数据放在在URI中,而POST请求传送的数据放在请求体中;
一般只有传送敏感数据、传送非字符串数据、传送的数据非常多、请求是为了修改服务器资源,才会使用POST请求;
GET请求的最终结果会被浏览器缓存收纳,下次浏览器再发送相同的请求路径,则从缓存中获取资源,以减低服务器的压力;而POST请求的最终结果不会被浏览器缓存。
9. 明确为了实现服务器需要前端发送POST请求,则前端就发送POST请求,若发送GET请求,则服务器会提示错误信息,sun公司使用模板方法设计模式为我们实现了HttpServlet(继承自GenericServlet),以后写自己的Servlet时,都要继承自HttpServlet,并且使用doPost或者doGet方法,替代原来的service方法。
10. 明确doPost或doGet方法中的参数HttpServletRequest接口:
该对象封装了浏览器的请求方式、webapp的根路径、请求的URI、请求的URL、Servlet在web.xml中配置的路径、客户端的IP地址,以及表单提交的数据;
该对象还可以获取请求转发器完成请求转发,设置服务器从前端接收到的数据的编码方式,获取Cookie和Session;
一次请求对应一个request对象,请求的范围很小。
11. 明确web开发过程中的乱码解决方案,乱码分为数据传递、展示、保存过程中的乱码。
数据传递过程中的乱码:是因为浏览器发送给服务器的数据是ISO-8859-1编码的,所以服务器接收到的数据会出现乱码。
解决方法有三:1. 编码重组 2. doPost中使用request.setCharacterEncoding("UTF-8"); 3. 修改Tomcat配置文件中的URIEncoding
12. 明确转发和重定向的区别:
转发forward,只有一次请求,地址栏不会变,可以实现跨Servlet的数据传输,但是这些Servlet必须在同一请求中;
request.getRequestDispatcher("/b").forward(request, response);
重定向redirect,有两次请求,地址栏会变,服务器接收到第一次请求后,会将第二次请求的路径发送给浏览器,浏览器接收到之后发出第二次请求;
重定向可以解决浏览器的刷新问题,因为刷新的始终是第二次请求,不会影响第一次请求的结果。
response.sendRedirect("/prj-servlet-16/b");
13. 重点明确Cookie:
Cookie的作用是在客户端保存会话状态,典型例子实现十天内免登录;
Cookie可以保存在浏览器缓存中,此时浏览器关闭则Cookie消失;Cookie也可以保存在客户端的硬盘中,只要设置Cookie的有效时长大于0,cookie1.setMaxAge(60 * 60 * 24 * 10); 此时浏览器关闭Cookie也不会消失;
在javaweb中Cookie以对象的形式存在 Cookie cookie1 = new Cookie("username",username); 通过 response.addCookie(cookie1); 由服务器发送给浏览器,浏览器保存后,当特定的请求路径再次请求时,浏览器会向服务器传送相应的Cookie,服务器通过 Cookie[] cookies = request.getCookies(); 获取Cookie。可以通过 cookie1.setPath(request.getContextPath()); 设置Cookie关联的请求路径。
浏览器可以禁用Cookie,从而浏览器不再接收Cookie。
14. 重点明确Session:
Session的作用是在服务器中保存会话状态;
在一个用户的会话进行过程中,服务器始终为这个用户维护一个会话对象HttpSession;服务器中维护了大量的HttpSession对象,即有一个session列表;
web容器是利用Cookie实现一个会话对应一个HttpSession对象,通过浏览器传送给服务器的Cookie,从session列表中查找到相应的HttpSession对象,具体原理要清楚;
从而如果禁用Cookie,会导致无法获得会话对象HttpSession,除非使用URL重写机制;
浏览器关闭的时候,服务器中的HttpSession对象不会被销毁,该对象只有超时未使用(可设置),或使用 session.invalidate(); 才会被销毁。
15. 应用范围总结:
ServletContext application是应用范围的;HttpSession session是会话范围的;HttpServletRequest request是请求范围的。