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