一、servlet的缺点
1. 开发人员要十分熟悉java
2. 不便于页面调试和维护:修改、重新编译
3.很难利用网页设计工具进行页面设计
- HTML内容导入到servlet中
- 用PrintWriter的对象进行输出
二、JSP简介
1. JSP(Java Server Pages)与Java Servlet一样,是在服务器端执行的
- 不同的是先由服务器编译部署成servlet执行
2. JSP技术的企业最佳实践
- 生成HTML内容
3. 新的JSP2.0规范版本包括新的功能
- EL表达式
- 新增的SImple Tag和Tag File
- web.xml新增<jsp:config>元素
三、JSP运行原理
四、JSP程序的翻译过程
五、JSP脚本元素
标签 | 语法 | 用途 |
---|---|---|
Declaration Tag (声明标签) | <%! 变量或方法声明%> | 声明JSP内所使用的全局变量或方法 |
Expression Tag (表达式) | <%= 表达式%> | 输出java中变量或者表达式的值到页面上 |
Scriptlet Tag (程序代码标签) | <% 程序代码 %> | 编写java程序代码,但不可以定义方法 |
六、Declaration(声明)
- 声明的格式:<%! 声明1; [声明2]; ......%>
- 声明的作用范围是整个JSP页面,同时它只在一个JSP页面有效
- 声明的类型包括:变量、方法、类。
七、Expression(表达式)
- 语法格式:<%= 变量或表达式%>
- 表达式的计算结果转换成字符串:使用隐含对象out进行输出
- 范例:<%= "abc"%>等价于out.print("abc");
- jsp脚本表达式中的变量或表达式后面不能有分号(;)
八、Scriptlets(代码块)
- 语法格式:<% java code %>
- 在"<%"和"%>"之间插入java程序片,一个JSP页面可以有许多程序片,这些代码块将被JSP服务器按照顺序执行
- 在一个代码块中声明的变量时JSP页面的局部变量,只在当前页面有效
九、EL快速入门
1. EL全名为Expression Language
2. 语法:${标识符}
3. 常用功能:
获取各种雨中存储的数据
<%=request.getAttribute("name")%>
${requestScope.name}
十、Tip:会话
1. 什么是会话?session
- 会话可以简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话。
2. 会话过程中要解决的一些问题?
- 每个用户与服务器进行交互的过程中,各自会有一些数据,程序要想办法保存每个用户的数据。
- 例如:用户点击超链接通过一个servlet购买了一个商品,程序应该保存用户购买的商品,以便于用户点结账servlet时,结账servlet可以得到用户商品为用户结账。
- 思考:用户购买的商品保存在request或ServletContext中行不行?
十一、Tip:保存会话数据的两种技术
1. Cookie
Cookie是客户端技术,程序把每个用户的数据以Cookie的形式写给用户各自的浏览器。当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去。这样,web资源处理的就是用户各自的数据了。
2.Session
Session是服务器端技术,利用这个技术,服务器在运行时可以为每一个用户的浏览器创建一个其独享的session对象,由于session为用户浏览器独享,所以用户在访问服务器的web资源时,可以把各自的数据放在各自的session中,当用户再去访问服务器中的其它web资源时,其它web资源再从用户各自的session中取出数据为用户服务。
十二、Tip:Cookie技术
十三、Cookie快速入门
显示用户上次访问时间
十四、Tip:Cookie API
javax.servlet.http.Cookie类用于创建一个Cookie,response接口中也定义了一个addCookie方法,它用于在其相应头中增加一个相应的Set-Cookie头字段。同样,request接口中也定义了一个getCookie方法,它用于获取客户端提交的Cookie。Cookie类的方法:
- public Cookie(String name, String value)
- setValue与getValue方法
- setMaxAge与getMaxAge方法
- setPath与getPath方法
- getName方法
十五、Tip:Cookie细节
- 一个Cookie只能标识一种信息,它至少含有一个标识该信息的名称(NAME)和设置值(VALUE)
- 一个web站点可以给一个web浏览器发送多个Cookie,一个web浏览器也可以存储多个web站点提供的Cookie。
- 浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie。每个Cookie的大小限制为4KB。
- 如果创建了一个Cookie,并将他发送到浏览器,默认情况下它是一个会话级别的Cookie(即存储在浏览器的内存中),用户退出则需要使用maxAge,并给出一个以秒为单位的时间。
- 删除持久Cookie,可以将Cookie最大失效设为0,注意:删除Cookie时,path必须一致,否则不会删除。
- -1代表的是浏览器关闭后失效。
十六、Cookie应用
显示用户上次浏览过的商品。
显示上次浏览商品的实现过程:
十七、Tip:Session
- 在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意,一个浏览器独占一个session对象(默认情况下)。因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其它程序时,其它程序可以从用户的session中取出该用户的数据,为用户服务。
- session和Cookie的主要区别在于:Cookie是吧用户的数据写给用户的浏览器。session技术把用户的数据写给用户独占的session中(服务器端)。
- session对象由服务器创建,开发人员可以调用request对象的getSession方法得到session对象。
十八、Tip:session为每个浏览器保存数据
十九、Tip:session实现原理
二十、session案例
使用session完成简单的购物车功能
二十一、Tip:浏览器禁用Cookie后的session处理
- 实验演示禁用Cookie后servlet共享数据导致的问题
- 解决方法:URL重写
response.encodeRedirectURL(java.lang.String url)
用于对sendRedirect方法后的URL地址进行重写
response.encodeURL(java.lang.String url)
用于对表单action和超链接的URL地址进行重写
- 附加:
session失效
web.xml文件配置session失效时间
二十二、Tip:session案例
利用session实现一次性验证码用户登录
二十三、Tip:session案例一次性校验码
- 一次性验证码的主要目的就是为了限制人们利用工具软件来暴力猜测密码
- 服务器程序接收到表单数据后,首先判断用户是否填写了正确的验证码,只有该验证码与服务器端保存的验证码匹配时,服务器才开始正常的表单处理流程。
- 密码猜测工具要逐一尝试每个密码的前提条件先输入了正确的验证码,二验证码是一次性有效的,这样基本上就阻断了密码猜测工具的自动地处理过程。
二十四、Tip:Servlet的数据访问范围
- application Scope servletContext(数据连接池,配置,线程池,站点访问次数)
- 每一个web应用对应一个ServletContext
- 存放所有用户都可以访问的数据
- session Scope HttpSession(存放与用户相关数据)
- 存放每个用户自己会话过程中的数据
- request Scope HttpServletRequest
- Servlet处理结果,JSP显示
- 数据存放在request对象中
- 生成新的请求时,原request存放数据丢失