JSP及相关技术知识总结

JSP使用

JSP的运行机制

这里写图片描述
过程:

  1. jsp容器先将jsp文件转换为一个java源文件;
  2. 转换成功,jsp容器则使用javac将生成的java源文件编译成相应的字节码文件.class。该.class文件就是Servlet。
  3. 由Servlet容器加载转换后的Servlet类(.class文件),创建一个该Servlet(jsp页面的转换结果)的实例,并执行Servlet的jspInit()方法在Servlet的整个生命周期只会被执行一次。
  4. 执行_jspService()方法来处理客户端的请求。
  5. 如果.jsp文件被修改了,则服务器将根据设置决定是否对该文件重新编译,如果重新编译,则使用重新编译后的结果取代内存中常驻的Servlet,并继续上述处理流程。
  6. 若系统资源不足等,jsp容器会以某种不确定的方式将Servlet从内存中移除,调用jspDestroy()方法。
  7. 接着Servlet实例便会被垃圾回收器GC回收。
  8. 当请求处理完成后,响应对象由jsp容器接收,并将html格式响应信息发送回客户端
include指令和<jsp:include>动作元素的区别:

include指令:

  1. 格式:<%@ include file=”被包含文件的地址”>
  2. 它是在jsp文件中插入一个包含文本或代码的文件,它把文件插入后与原来的jsp文件合并成一个新的jsp页面;如果被插入的文件发生变化,则包含这个文件的jsp文件需要被重新编译。(被包含的文件不会被jsp编译器执行)

<jsp:include>动作元素:

格式:<jsp:include page="relative URL" flush="true|false"/>
1. 它既可以包含静态文件,也可以包含动态文件;
2. jsp动态包含某个文件:当jsp页面运行时才会载入该文件,并不是简单的将被包含文件与jsp页面合并成一个新的jsp页面。
3. 如果被包含文件时文本文件,则运行时只需将该文件内容发送到客户端又客户端显示出来;
4. 如果包含文件是jsp文件,则jsp编译器先执行该文件,再将执行结果发送到客户端并显示出来。

JavaBean使用

<jsp:useBean id="实例名" scope="page" class="全限定类名"/>
//param和value不能同时使用
<jsp:setProperty name="实例名" property="属性名" param/value="属性值"/>
<jsp:getProperty name="实例名" property="属性值" />

Servlet使用

生命周期

1、加载和实例化
Servlet容器加载和实例化Servlet,加载后,容器会通过java反射机制来创建Servlet的实例。
2、初始化
Servlet创建后,容器会调用Servlet的init()方法来初始化该Servlet对象(类似于构造方法的初始化功能),每一个Servlet实例只会调用init()方法一次。
3、执行
当客户端请求到来时,Servlet容器首先针对该请求创建ServletRequest和ServletResponse对象(分别用于封装请求数据和封装响应数据),将两个对象作为service()方法的参数被传递Servlet,然后容器会自动调用service()方法来响应客户端请求;service()方法执行时会检查http请求类型,并相应调用doGet、doPost方法。
4、清理
当Servlet实例需要从服务器中移除时,容器会调用destroy()方法,让该实例释放掉它所使用的资源,并将实例中的数据保存到持久的存储设备中;之后,Servlet实例便会被垃圾回收器GC回收。

get和post区别:

get:
以文明方式通过url提交数据(以?分割url和传输数据,参数之间以&相连),数据在url中可以看到,提交的数据<=2KB(因为浏览器对url长度有限制)。安全性较低但效率比post高,适合提交数据量不大,安全性不高的数据,如搜索,查询功能。
post:
将用户提交的信息封装在html header内,适合提交数据量大,安全性高的用户信息,比如注册、登录、修改、上传等。

请求转发和请求重定向区别:

请求转发:服务器端行为,request.getRequestDispatcher().forward(req,resp),是一次请求,转发请求时对象会保存,地址栏url不会发生变化。
请求重定向:
客户端行为,response.sendRedirect()本质上等同于两次请求,前一次请求的对象不会保存,地址栏的url地址会改变。

创建与使用cookie

创建cookie对象:Cookie cookie=new Cookie(String key,Object value)
写入cookie对象:response.addCookie(new Cookie)
读取cookie对象:Cookie[] cookies=request.getCookies()

解决cookie中无法保持中文的问题:

1、request.setCharacterEncoding
2、
URLEncoder.encode()编码
URLEncoder.decode()解码

Session和Cookie区别:

1、cookie数据存放在客户的浏览器上(数据类型是String类型),session数据放在服务器上(数据类型是Object类型)。

2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
考虑到安全应当使用session。

3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
考虑到减轻服务器性能方面,应当使用COOKIE。

4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。

5、所以个人建议:
将登陆信息等重要信息存放为SESSION
其他信息如果需要保留,可以放在COOKIE中

pageEncoding是jsp文件本身的编码
contentType的charset是指服务器发给客户端的内容编码,contentType更常用。
URL传中文参数使用request.setCharacterEncoding("utf-8")无法解决中文乱码问题。
解决:在服务器connetor中加入URLEncoding=”utf-8”,然后重启服务器。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值