Servlet
2022-05-07 14:50:53 22 举报
AI智能生成
Servlet笔记
作者其他创作
大纲/内容
web程序简介
web程序基础知识
关于html
web应用程序(是一种架构模式)
客户端Client(浏览器)
服务器Se'rver(http服务器)
URL、URN、URI
URL:Uniform Resource Locator
以文字的方式说明互联网资源如何取得
协议
ftp文件协议
http超文本传输协议
mailto电子邮件协议
file协议
格式:协议://主机:端口号/
举例
假设主机名为www.baidu.com,端口号为8080,资源在home下的indexhtml
http://www/baidu.com:8080/home/index.html
画个图解析
URN:Uniform Resource Name
URI:Uniform Resouce Identifer
关于http
严格来说是一种通信协议,基于tcp/ip之上的应用层协议
非常重要的特性(强调那些能做到,那些不能做到,可以引出session)
请求(Request)/响应(Response)
无状态通信
浏览器发送http请求的4种方式
get(获取资源)
post(发送数据)
put
delete
从客户端发送数据到服务器,一般大量数据都用post
从服务器上取得资源
如何选择get和post?取决于应用场景,get长度有限,写在url地址栏上不安全
动态网页与静态网页
动态网页技术
servlet/jsp
php
cgi
asp
浏览器不认识动态网页?怎么办
servlet/jsp简介
java运行依赖jvm
什么是servlet/jsp,其实就是一个类,用来处理客户端的请求
动态网页运行依赖web容器
servlet和jsp的关系
jsp也会被转换为servlet
编写与设置servlet
第一个servlet
准备开发环境
tomcat
eclipse/idea
配置
编写servlet
关键API
在HelloServlet之后
关于HttpServlet的继承管理,以及Servlet接口
DefaultServlet的作用
@WebServlet和XML配置的区别,url命名不能以auto开头
进阶部署设置
请求与响应
从容器到HttpServlet
web容器帮我们做了什么?
客户端发送请求
容器创建了一个仅当这次的HttpServletRequest,同时还会创建一个HttpServletResponse作为响应
容器根据注解或xml找到对应的servlet,调用service方法,把请求和响应对象当作参数传递,最后根据请求方式调用doget或dopost
http的无状态
如果不重写doGet和doPost会出现什么情况
关于HttpServletRequest
处理请求参数与标头
getParameter获取一个参数,字符串类型
getParameters获取一组参数,字符串数组
getParameterNames获取所有请求的参数名称
请求参数编码处理
seCharacterEncoding
new String(name.getBytes("ISO-8859-1") , "utf-8");
requestDispatcher请求转发
include包含
将另外一个servlet操作流程包含进来
forward转发
把请求转发给别的servlet
总结区别
关于HttpServletResponse
getWriter获取输出字符串,注意乱码问题
解决乱码
setContentType
setCharacterEncoding
输出二进制
getOutputStream
sendRedirect
forward是把请求转发到指定的URL,对于客户端它知不知道呢?并且是同一个请求周期,地址不会发生变化
sendError
通过登录和注册来练习
会话管理
会话管理基本原理
使用隐藏域的缺陷
使用cookie自动登录
(自动登录功能)把服务器应该知道的信息发送到路浏览器,浏览器通过Cookie来保存
打开浏览器证明cookie是怎么存在的,来引出cookie是文件类型的,存储在本地
查看本地淘宝的cookie
自动登录的代码例子,同时演示关闭页签,关闭浏览器进行比较,总结出cookie的原理,然后引出cookie的最大时长概念
然后刚是关闭浏览器,现在关闭服务器看看效果。 最后通过多个账号登录,引出cookie唯一性
然后刚是关闭浏览器,现在关闭服务器看看效果。 最后通过多个账号登录,引出cookie唯一性
通过该案例,让学员做一个html自动登录的功能,如果没有登录,重定向到index.html,否住转发到工作首页
使用URL重写
其实就是请求参数的应用,以分页为例
HttSession会话管理
使用HttpSession,然后观察浏览器cookie变化,多了一个JSESSIONID,创建session对象的时候,自动创建了cookie
req.getSession()
getAtrribute()
setAtrribute()
HttpSession会话管理原理
对cookie进行了封装
注意:关闭浏览器实效的是cookie,session会重新创建一个新的
SessionCookieConfig接口可以修改session对应的cookie信息
HttpSession与URL重写
通过HttpSession来改写之前的案例
Servlet进阶API、过滤器、监听器
Servlet进阶API
生命周期
servlet生命周期的三个方法,init,service,destory
代码例子,通过Servlet接口引出3个方法的定义,然后查看继承关系下是怎么实现的
通过注解和XML提供初始化参数,通过service方法中,获取初始化参数
注意:GenericServlet已经实现了获取参数的API
ServletContext
可以获取servlet上下文的很多信息
应用程序事件、监听器
web上下文的监听(整个工程监听)
ServletContextListener
Web应用程序启动或关闭的时候,然后做一点操作,比如数据库信息的加载
全局的,初始化参数只能web.xml文件中编写
contextInitialized 初始化时调用
注意:在Servlet初始化之前加载的!!
contextDestroyed 销毁前调用
ServletContextArributeListener
attributeAdded 添加属性时
attributeRemoved 删除属性时
attributeReplaced 属性值发生变化时
httpSession监听器(session监听)
HttpSessionListener
sessionCreated
sessionDestroyed
HttpSessionAttibuteListener
attributeAdded 添加属性时
attributeRemoved 删除属性时
attributeReplaced 属性值发生变化时
其它两个暂不讲解
httpServletRequest监听器(请求监听)
ServletRequestListener
requestInitialized
requestDestroyed
ServletRequestAtrributeListener
attributeAdded 添加属性时
attributeRemoved 删除属性时
attributeReplaced 属性值发生变化时
AsyncListener
过滤器
用于性能测试,添加日志,编码设置等
Filter
init
doFilter
destroy
融合过滤器和监听器,还有初始化,看看这个的调用顺序
requestInitialized
hello init....
start MyFilter doFilter
class org.apache.catalina.connector.RequestFacade
name
name-[wenjian]
end MyFilter doFilter
requestDestroyed
hello init....
start MyFilter doFilter
class org.apache.catalina.connector.RequestFacade
name
name-[wenjian]
end MyFilter doFilter
requestDestroyed
异步处理
每个servlet都是一个线程
AsyncContext
使用JSP
从JSP到Servlet
引入
原理
编写一个简单的jsp,然后编译后打开目录查看java和class文件
HttpJspBase源码查看
查看init方法
小脚本
<%%>
生成_jspservice方法中的代码
jsp指令
<%@ 指令类型 [属性名=属性值] %>
page
如何转译目前的JSP
include
把另一个jsp包含进来
taglib
如何转译jsp中的标签库
声明
<%! %>
生成属性和方法
注意线程问题
表达式
<%= %>
其实就是一个实参 。 out.print()
隐士对象
标准标签
表达式语言EL
减少小脚本,代码可读性
案例:通过小脚本和EL的对比,最一个请求参数的加分运算
${patam.a.b.c}
11个隐士对象
优点
默认null处理为""
直接调用方法 ${pageContext.request.方法名}
访问数组 ${数组名[下标]}
访问对象 ${对象名.属性名} 或 ${对象名["属性名"]}
map集合 ${map.kek}
常用的运算符 + - * /
逻辑运算符 and or not
关系运算符 > < != ==
使用JSTL
JSTL简介
核心标签库
il8n兼容格式标签库
xml标签库
函数标签库
自定义标签
tag file自定义标签
simple tag自定义标签
tag自定义标签
整合数据库
jdbc入门
jdbc进阶
使用SQL标签库
web容器安全管理
JavaMail入门
使用JavaMail
从模式到架构
认识设计模式
重构、模式与架构
0 条评论
下一页