日期:2014-05-16  浏览次数:20335 次

Servlet和JSP复习笔记

1. 理解典型的Web应用
1.1 浏览器客户端、Web服务器、应用服务器、数据库服务器
1.1.1 在我们的项目里Tomcat即是Web服务器,又是应用服务器。
1.1.2 Web服务器一般用来处理静态的内容,HTML,CSS之类的东西
1.1.3 应用服务器主要负责在服务器端运行的应用程序,比如说我们的Servlet和JSP

1.2 典型的Web应用的请求处理过程
1.2.1 我们的请求从客户端那边递交过来,首先会到达Web,如果是请求一个Servlet或JSP,他会把请求转发给应用服务器。
然后由应用服务器去初始化那个程序。比如说我们调用一个Servlet,他会初始化一个Servlet对象,这时候他的init()方法就被调用。
然后再调用他里面的Service方法这些东西。
在Servlet可能要访问数据库,把一些数据存储起来,或者查询一些数据。完了以后再返回来,通过Response返回数据。
由应用服务器向客户端浏览器返回一些响应的html代码。
1.2.2这是一个请求和响应的过程。他的底层是基于TCP/IP协议。数据肯定会被传到后台,因为他不是基于UDP的。
1.2.3Web应用会有个根目录,Servlet被编译以后会被放到WEB-INF的classes目录下面,WEB-INF下面的还有个lib目录,放的都是些依赖包。
WEB-INF目录是在运行的时候类路径的一部分。在classes里面的那些类在运行的时候会先于lib里面的那些jar包被加载。
2. 理解Get和Post请求
2.1 发生get请求的情况:在浏览器里面输入地址请求,在网页里面点击一个连接地址,在表单里面定义method=get
2.2 post发生的情况只有在表单里面定义的method为post,表单默认采用的是get
2.3 get请求是通过在url后面加参数的方式来传递参数的,post是通过httpheader的方式来传递参数的。
2.4 post可以提交文件,get不可以。
2.5 这两个对于后台没有多大差异,可能要考虑的是编码
3. 理解Servlet/JSP的职责划分
3.1 一般来讲JSP适合编写html代码负责展现,servlet适合编写java代码负责逻辑,
一般来讲,在jsp里面只有把与展现有关的一些逻辑放到里面去。
servlet主要负责把页面里面传递过来的参数取出来,在页面里面对参数进行转换,然后调用后台的业务逻辑,比如说DAO和Service,来进行业务逻辑的处理。
处理完成后由servlet将结果通过request的setAttri()方法放到request里面再将结果forward到一个jsp,再由JSP进行呈现。
4. 理解服务器端重定向和客户端重定向
4.1 服务器端重定向只是从后台的一个Servlet转向另一个Servlet或者jsp,请求对象仍然是同一个请求对象,他的Attribute仍然存在。
客户端重定向:在浏览器里面向客户端发一个请求,实际上客户端已经响应了,响应代码302。
4.2 客户端在收到响应后,他就知道这是个从定向的请求。所以咯他重新再发一个请求。
5. 理解路径问题
5.1 对于服务器端重定向,我们使用的路径将跟服务器有关,配置的Servlet的具体映射是什么样的地址,就用什么样的地址。
eg:request.getRequestDispatcher("/admin/ArticleServlet").forward(request,response);
5.2 对于客户端的重定向,要加上一个requset.getContextPath(),
eg:response.sendRedirect(request.getContextPath()+ "/admin/ArticleServlet");
5.3 <%jsp:include%> 和 <%@include%>的路径都是相对路径
5.4 <img src="../images/tb.gif"> src里面可以用相对路径也可以用http://开头的绝对路径
5.5 在<head>标签下定义<base href="..."/>,那么在这个页面下所有的相对路径都会以href开头。
6. 理解编码问题
6.1 get请求与当前操作系统以及页面编码有关。
如果在页面里面的请求参数有中文的,则按照页面编码;如果在浏览器的地址栏里面输入,则与操作系统的编码有关
6.2 post请求与当前页面的编码有关
6.3 通过get请求的参数处理需要在tomcat里面改一个uriEncoding的参数
6.4 post请求通过下面方式修改
HttpServletRequest httpServletRequest=(HttpServletRequest)request;
httpServletRequest.setCharacterEncoding(encoding);
6.5 Tomcat有两种编码,一种是给服务器用的,另一种是给客户端用的
服务器端的编码主要讲的是数据存储到数据库里面是怎样的一种编码
客户端的编码主要是通过客户端连接服务器,客户端是什么编码
7. 理解HttpSession
7.1 服务器不会可以为客户端保留状态信息,比如说购物车,就要用到HttpSession对象
客户端已请求,服务器可以创建一个HttpSession对象
//判断session 是否有LOGIN_ADMIN
String loginAdmin=(String) httpServletRequest.getSession().getAttribute("LOGIN_ADMIN");
if (loginAdmin==null&&!page.equals("/admin/login.jsp")&&!page.equals("/admin/LoginServlet")) {
httpServletResponse.sendRedirect(httpServletRequest.getContextPath()+"/admin/login.jsp");
}

7.2 在服务器端创建Session对象的时候会创建一个JSESSIONID,他会把这个id通过Response里面的httpHead返回给客户端。
这个客户端可以通过request传到本地的cookie,然后每次通过这个请求来发送这个JSESSIONID的值。
服务器拿到这个信息就能找到对应的HttpSession对象。

7.3 session是以cookie或URL重写为基础的,默认使用cookie来实现,系统会创造一个名为 JSESSIONID的输出cookie,我们叫做session cookie,
以区别persistent cookies,也就是我们通常所说的cookie,注意session cookie是存储于浏览器内存中的,并不是写到硬盘上的,
这也就是我们刚才看到的JSESSIONID,我们通常情是看不到JSESSIONID的,但是当我们把浏览器的cookie禁止后,
web服务器会采用URL重写的方式传递Sessionid,我们就可以在地址栏看到 sessionid=KWJHUG6JJM65HS2K6之类的字符串。

7.4 session cookie针对某一次会话而言,会话结束session cookie也就随着消失了,
而persistent cookie只是存在于客户端硬盘上的一段文本(通常是加密的),而且可能会遭到cookie欺骗以及针对cookie的跨站脚本攻击,
自然不如 session cookie安全了。

7.5 通常session cookie是不能跨窗口使用的,当你新开了一个浏览器窗口进入相同页面时,系统会赋予你一个新的sessionid,
这样我们信息共享的目