Java知识点(下)

本文详细介绍了Servlet的概念、编写步骤、运行机制及生命周期管理等关键技术点,并对比了转发与重定向的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

servlet
什么是servlet
sun公司制定的一种用来扩展web服务器功能的组件规范
如何写一个servlet
1写一个Java类,实现servlet接口或者继承HttpServlet类
2编译
3打包
4部署
5启动容器,访问servlet
servlet是如何运行的?
1浏览器依据IP和port建立连接
2浏览器将相关数据添加到请求数据包里面,然后发送给服务器
3服务器会解析请求数据包中的数据,并且将这些数据加到request对象里面,同时
还会创建一个request对象
4服务器创建一个servlet对象,然后调用对象的service方法
5服务器从response对象中获取处理结果,然后创建响应数据包并发送给浏览器
6浏览器解析响应数据包,依据解析到的数据生成相应的页面
HTTP协议
HTTP协议是什么?
是一种网络应用层协议,规定了浏览器与web服务器之间如何通信以及相应的数据包结构
特点:一次请求,一次连接
数据包的结构(消息头,状态码)
请求数据包 请求行(请求方式,请求资源路径,协议和版本)
响应数据包 状态行(协议版本,状态码,状态描述)
两种请求方式:get、post
servlet核心
如何获得请求参数值
string request.getParameter
string[] request.getParameterValues
servlet输出中文,如何处理?
request.setContentType()
表单包含有中文参数,如何处理?
requset.setCharacterEncoding(“utf-8”)
servlet容器如何处理请求资源路径
容器默认访问的是一个servlet,容器会从web.xml中去查找servlet
如果没有匹配的servlet,容器会从对应的位置去查找文件,如果找不到,返回404
如何让一个servlet处理多种请求
1使用后缀匹配
2分析请求资源路径,依据请求路径进行相应处理
servlet的线程安全问题
容器会创建一个实例,容器收到一个请求,就会启动一个线程,由该线程来进行相应的处理,有可能多个线程同时去调用同一个servlet对象的service方法
解决方法(synchronize)
转发与重定向
什么是重定向?
服务器通知浏览器向某个地址发送请求
如何重定向?
request.sendRediect(string url)
重定向特点
重定向地址是任意的
重定向之后,浏览器地址会发生变化
什么是转发?
一个web组件将未完成的处理交给另一个web组件继续做
如何转发?
1绑定数据到request对象上,request.setAttribute(string name,object obj)
2获得转发器
RequestDispatcher rd=request.getRequestDispatcher(String url)
3转发
rd.forword(request,response)
转发特点
转发之后,浏览器的地址不会变
转发的目的地有限制,要求属于同一个web应用
转发与重定向做比较
1浏览器地址
2目的地限制
3能否共享request对象(转发可以,重定向不行)
4转发是一件事没有做完,让另一个web组件继续做
重定向是一件事已经完成,去做另一件独立的事
servlet生命周期
什么是servlet的生命周期
容器如何去创建servlet对象,如何对该对象进行初始化,如何调用该对象处理请求,以及如何销毁该对象的整个过程,即servlet容器是如何去管理servlet的
数据访问
什么是DAO?
封装了数据访问逻辑的一个对象
如何写一个DAO?
写一个Java类 写DAO类提供一些访问数据库方法
DAO优点:
方便测试
方便代码维护
生命周期分成哪几个阶段?
实例化 初始化 就绪 销毁
容器在什么时候创建servlet对象?
实例化 需要配置 load-on-startup参数
容器会创建几个servlet实例?
1个
初始化方法会执行几次?
1次
如何配置初始化参数?

参数名
参数值

如何实现自己初始化处理逻辑?
重写GenericServlet的init()方法
doGet,doPost方法作用
处理业务逻辑
get请求-doGet
post请求-doPost
servlet接口 GenericServlet Httpservlet的关系
init() service() destory()
init() destory()
service()
servletConfig的作用
读取初始化参数
路径问题
什么是相对路径?绝对路径?如何写绝对路径?
不以"/'开头
以"/'开头
链接 表单提交 重定向从应用名开始写
转发从应用名之后开始写
servlet上下文
什么是servlet上下文?
容器启动之后 会为每一个web应用创建唯一一个符合servletContext
接口要求的对象:唯一性 、持久性
如何获得servlet上下文?
servletConfig FilerConfig GenericServlet HttpSession方法
主要作用
绑定的数据 ,生存时间不一样 从小到大依次是request<session<servlet上下文
优先使用生命周期短的
在servlet上下文数据所有用户都能访问
在session对象 只有与之对应的用户能够访问
状态管理
什么是状态管理?
将浏览器与web服务器之间多次交互当做一个整体来处理,并且将多次交互所涉及的数据(即状态)保存下来
如何进行状态管理?
1将状态保存在浏览器端(cookie)
2将状态保存在服务器端(session)
cookie是什么?
服务器临时存放在浏览器端的少量数据 用于存放用户的状态
如何添加cookie?
Cookie c=new Cookie(string name,string values)
response.addCookie©
添加cookie时需要考虑的三个问题
编码 生存 路径
如何读取cookie?
Cookie [] request.getCookies()
cookie的限制
cookie可以被用户禁止
cookie不安全,只能保存少量数据4k,数量也有限制(大约几百个)
只能存放字符串
session
什么是session?
服务器端为了保存用户的状态而创建的一个特殊的对象
如何获取session对象?
HttpSession session =request.getSession();
session超时
服务器会将空闲时长的session对象删除掉 为了节省空间
比较cookie和session
session支持更丰富的数据类型 更安全 可以存放更多的数据 将状态保存在服务器端 占用过多内存
cookie只能存放字符串 只能存放少量数据
过滤器与监听器
什么是过滤器?
servlet规范当中定义的一种特殊的组件,用于拦截servlet容器的调用过程
如何写一个过滤器?
1写一个Java类 实现Filter接口
2在doFilter方法中,实现拦截处理逻辑
3配置过滤器
过滤器的优点
1可以在不修改源代码的基础上,为应用添加一些简单功能
2可以将多个组件相同的功能集中写在过滤器里面,方便代码的维护
什么是监听器?
用于监听servlet容器产生的事件并进行相应的处理
如何写一个监听器?
1写一个Java类,实现相应的监听器接口
2在监听器接口方法当中,实现监听处理逻辑
3配置监听器

Ajax
异步请求
json

Struts
struts五大组件
ActionServlet
struts中的最大控制器,是Struts框架的入口,并且封装了servlet,被配置在web.xml当中
Action
小控制器,处理具体的业务逻辑
ActionForm
和页面表单对应的一个特殊Javabean,负责在页面和控制器之间传递数据,同时还提供了集中验证方法
ActionMapping
用来从Struts的配置文件中读取信息
ActionForword
页面之间跳转

hibernate
是一个开放源代码的对象关系映射框架,可以自动生成sql语句,自动执行。

redis
redis可以缓存、排行榜、计算器\限速器、好友关系、简单的消息列队、session共享
Redis不适用于数据量太大,数据访问频率低的业务

nginx
是一个高性能的HTTP和反向代理服务器
特点:占用内存少,并发能力强
oracle
是对象关系型数据库

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值