JavaWeb之servlet笔记

hibernate延迟加载:
    load方法来得到一个对象时,此时hibernate会使用延迟加载的机制来加载这个对象,
  即:当 我们使用session.load()方法来加载一个对象时,此时并不会发出sql语句,当前得到的这个对象其实是一个代理对象,这个代理对象只保存了实     体对象的id值,只有当我们要使用这个对象,得到其它属性时,这个时候才会发出sql语句,从数据库中去查询我们的对象。
  相对于load的延迟加载方式,get就直接的多,当我们使用session.get()方法来得到一个对象时,不管我们使不使用这个对象,此时都会发出
  sql语句去从数据库中查询出来。


1:response.sendRedirect 说明客户端重新发送的request请求去访问 a.jsp 因此存储在request中的数据不会被共享. 
2:采用request.setAttribute("name") 如果没有相应的内容则输出为null 如果采用jstl标签 ${requestScope.name} 没有相应的内容则输出空字符串
3:${requestScope.name} 并不是去读取name属性, 而是去读取相应的getName方法.因此name属性是私有的, 面试经常问到, 需要大家注意. 
4:很多视频说生命周期 application > session > request 这种说法是错的. 
  application在项目关闭的时候会销毁, 而session不会. session会持久化到tomcat硬盘中, 下一次tomat重新启动的时候就会被加载到内存中

  SpringMVC的原理:
  1 首先用户发出请求,请求到达SpringMVC的前端控制器(DispatcherServlet),
  2 前端控制器根据用户的url,请求处理器映射器查找匹配该url的handler,并返回一个执行链,
  3 前端控制器再请求处理器适配器调用相应的handler进行处理并返回给前端控制器一个modelAndView,
  4 前端控制器再请求视图解析器对返回的逻辑视图进行解析,
  5 最后前端控制器将返回的视图进行渲染并把数据装入到request域,返回给用户。
 注:DispatcherServlet作为springMVC的前端控制器,负责接收用户的请求并根据用户的请求返回相应的视图给用户


 JavaBean -> 实体类  例如: User
具备特点:
 1,必须是public声明的
 2,必须有无参的构造方法(默认具有)
 3,所有的属性必须有set和get方法

JSON是一种与开发语言无关的,轻量级的数据格式。全称JavaScript Object Notation
优点:易于人的阅读和编写,易于程序解析与生产

当有一百个用户访问,而只有一个servlet对象时,一个对象怎么服务这么多用户?
调用servlet时,会开启一百个线程,所有的线程都会调用同一个servlet的doGet方法

ServletConfig对象
  public void init(ServletConfig config) throws ServletException {
super.init(config);
//获取web.xml中设置初始化的值
counter = Integer.parseInt(config.getInitParameter("counter"));
}

ServletContext对象  -> 环境信息
  public void doGet(HttpServlet request,HttpServletResponse response) throws ServletException{


ServletContext application = getServletContext();
application.log("---"+request.getRemoteAddr()+":"+this.getClass());
}//可在tomcat文件夹下logs查看打印的日志记录


如果想要过十秒后,调用浏览器转到 http://Server/Path 的网页时,可用如下代码:
response.setHeader("Refresh","10; URL=http://Server/Path" )

Session 对象表示目前个别用户的会话(session)状况,用此项机制可以轻易识别每一个用户,然后针对每一个别用户的要求,给予正确的响应。例如:购物车最常使用 session 的概念,当用户把物品放入购物车时,他不须重复做身份确认的动作(如:Login),就能把物品放入用户的购物车。但服务器利用 session 对象,就能确认用户是谁,主要靠sessionID来区分不同的用户,把它的物品放在属于用户的购物车,而不会将物品放错到别人的购物车。
除了购物车之外,session 对象也通常用来做追踪用户的功能.

Session的字面理解就是会话,只要浏览器打开,去访问一个网站,服务器端就会创建一个内存区域, 这个内存区域一直保留着,当浏览器关闭的时候,这个内存区域才失效

application 对象最常被使用在存取环境的信息, 因为环境的信息通常都储存在 ServletContext 中,所以常利用 application 对象来存取 ServletContext 中的信息。

PAGE_SCOPE 存入 pageContext 对象的属性范围
REQUEST_SCOPE 存入 request 对象的属性范围
SESSION_SCOPE 存入 session 对象的属性范围
APPLICATION_SCOPE 存入 application 对象的属性范围

● pageScope
范围和 JSP 的 Page 相同,也就是单单一页JSP Page的范围(Scope)。
● requestScope
范围和 JSP 的 Request 相同,requestScope 的范围是指从一个 JSP 网页请求到另一个 JSP 网页
请求之间,随后此属性就会失效。
● sessionScope
范围和 JSP Scope 中的 session 相同,它的属性范围就是用户持续在服务器连接的时间。
● applicationScope
范围和 JSP Scope 中的 application 相同,它的属性范围是从服务器一开始执行服务,到服务
器关闭为止。

范 例 说 明
${pageScope.username} 取出 Page 范围的 username 变量
${requestScope.username} 取出 Request 范围的 username 变量
${sessionScope.username} 取出 Session 范围的 username 变量
${applicationScope.username} 取出 Application 范围的 username 变量

当要存取的属性名称中包含一些特殊字符,如 . 或 – 等并非字母或数字的符号,就一定要使用 [ ],例如:
${user.My-Name }
上述是不正确的方式,应当改为:
${user["My-Name"] }

例如:我们要在 session 中储存一个属性,它的名称为 username,在JSP中使用
session.getAttribute("username") 来取得 username 的值 ,但是在EL中,则是使用
${sessionScope.username}来取得其值的

EL 隐含对象  11个
1. 与范围有关的隐含对象
applicationScope
sessionScope
requestScope
pageScope
2. 与输入有关的隐含对象
param
paramValues
3. 其他隐含对象
cookie
header
headerValues
initParam
pageContext

post和get的区别?
1. get是从服务器上获取数据,post是向服务器传送数据。
2. 对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。
3. get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。、
4. get安全性非常低,请求的数据会显示在地址栏上,post请求的数据,会放在http协议的消息体中,
  post安全性较高。但是执行效率却比Post方法好。
建议:1、get方式的安全性较Post方式要差些,包含机密信息的话,建议用Post数据提交方式;
  2、在做数据查询时,建议用Get方式;而在做数据添加、修改或删除时,建议用Post方式

转发与重定向(内部跳转与外部跳转)
请求转发(Forward方式跳转):
servlet内部跳转,只能在同一个web应用程序资源之间进行转发请求,
<jsp:forward page="http://www.baidu.com"/>   报错!

浏览器地址栏不会发生改变
可以通过request传递参数(setAttribute方法)(两个请求是不同的request)
 服务器端去请求资源,服务器直接访问目标地址,并对目标地址的相应内容进行读取,再把读取的内容直接发给浏览器
 用转发当刷新页面时,menthod=add,会继续添加
 目的页面和原页面用的是同一个请求,再次一刷新,还是第一个请求method=add,就再次添加了一条记录了


重定向(Redirect方式跳转):外部跳转,浏览器地址栏要发生改变,不可以通过request传递参数(两个请求是相同的request),用重定向会重新发一个请求

forward转发的页,以及转发到的目标页面可以共享request里面的数据,而重定向以及转发到的目标页面不能共享request里面的数据

将数据库的操作都封装到DAO内,把从数据库查询到的信息实例化为VO

Ajax
1, 假设在login.jsp输入帐号和密码,提交给LoginServlet,LoginServlet调用DAO去访问数据库,再将结果返回给客户端,
  如果服务器反应很慢,客户等待时间长,界面一片空白,客户浏览效果不好。
2,网页除了表单以外,还有替他内容,用户失去了访问这些内容的权利。
3,有些情况下,登陆后的页面和之前的页面只有少量的不同,这些相同的内容重新加载,浪费时间。

异步和同步:
  当一个异步过程调用后,调用者不需要立即得到结果,可以继续做自己的事情,等到过程调用完毕,在通过回调函数
通知调用方。
  同步情况下,调用必须等待对方得到结果,才能继续运行。






  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值