一、
- Java Servlet API中引用Session机制来追踪客户的状态。Servlet API中定义了javax.servlet.http.HttpSession接口,Servlet容器必须实现这个接口。
- 当一个Session 开始时,Servlet 容器将创建一个HttpSession 对象,Servlet 容器为HttpSession 分配一个唯一标识符,称为Session ID。Servlet 容器将Session ID 作为Cookie 保存在客户的浏览器中。每次客户发出HTTP 请求时,Servlet 容器可以从HttpRequest 对象中读取Session ID,然后根据Session ID 找到相应的HttpSession 对象,从而获取客户的状态信息。
- 当客户端浏览器中禁止Cookie,Servlet 容器无法从客户端浏览器中取得作为Cookie 的Session ID,也就无法跟踪客户状态。
Java Servlet API 中提出了跟踪Session 的另一种机制,如果客户端浏览器不支持Cookie,Servlet 容器可以重写客户请求的URL,把Session ID 添加到URL 信息中。 - HttpServletResponse接口提供了重写URL的方法:public java.lang.String encodeURL(java.lang.String url)
该方法的实现机制为: ●先判断当前的Web组件是否启用Session,如果没有启用Session,直接返回参数url。●再判断客户端浏览器是否支持Cookie,如果支持Cookie,直接返回参数url;如果不支持Cookie,就在参数url中加入Session ID信息,然后返回修改后的url。
我们可以对网页中的链接稍作修改,解决以上问题:
修改前:
修改后:
<a href=“<%=response.encodeURL(“maillogin.jsp“)%>“>
二、
spring的scope作用域
三、
Spring2.0:
Spring AOP部分使用JDK动态代理或者CGLIB来为目标对象创建代理。(建议尽量使用JDK的动态代理)
如果被代理的目标对象实现了至少一个接口,则会使用JDK动态代理。所有该目标类型实现的接口都将被代理。若该目标对象没有实现任何接口,则创建一个CGLIB代理。
如果你希望强制使用CGLIB代理,(例如:希望代理目标对象的所有方法,而不只是实现自接口的方法)那也可以。但是需要考虑以下问题:
无法通知(advise)Final 方法,因为他们不能被覆写。
你需要将CGLIB 2二进制发行包放在classpath下面,与之相较JDK本身就提供了动态代理
强制使用CGLIB代理需要将 |aop:config| 的 proxy-target-class 属性设为true:
|aop:config proxy-target-class=“true”|
四、
单一职责原则: 应该有且仅有一个原因引起类的变更(一个接口或一个类只有一个原则,它就只负责一件事)
里式替换原则: 子类型必须能替换掉它们的基类型
依赖倒置原则:
高层模块不应该依赖低层模块,两者都应该依赖其抽象
抽象不应该依赖细节
细节应该依赖抽象
接口隔离原则:
客户端不应该依赖它不需要的接口
类间的依赖关系应该建立在最小的接口上
五、
SpringMVC的原理:
SpringMVC是Spring中的模块,它实现了mvc设计模式的web框架,首先用户发出请求,请求到达SpringMVC的前端控制器(DispatcherServlet),前端控制器根据用户的url请求处理器映射器查找匹配该url的handler,并返回一个执行链,前端控制器再请求处理器适配器调用相应的handler进行处理并返回给前端控制器一个modelAndView,前端控制器再请求视图解析器对返回的逻辑视图进行解析,最后前端控制器将返回的视图进行渲染并把数据装入到request域,返回给用户。
DispatcherServlet作为springMVC的前端控制器,负责接收用户的请求并根据用户的请求返回相应的视图给用户。