Servlet干货
什么是Servlet呢,抛去百度百科的专业解释,我个人认为是实现客户端与服务器端收发数据,实现资源跳转的一个组件.(欢迎纠正)
看完这篇博客,你能:
-
使用Cookie或Session实现服务器端与客户端的交互
-
了解Cookie与Session的异同
-
获取从客户端以get或post方式发送的数据
-
会使用转发和重定向俩种方式跳转资源
-
了解转发和重定向的异同
前期准备
使用Servlet有三种方式
- 实现Servlet接口
- 继承GenericServlet类
- 继承HttpServlet
这里我们使用第三种方法,继承后需要重写doGet()和doPost方法.
get和post是俩种客户端向服务器端请求的俩种方式,没有html基础可以进行百度
下面将针对收发数据和资源跳转俩个方面来讨论Servlet技术
在此之前,你需要创建一个项目,详细步骤看我以前的一篇博客(TomCat集成IDEA并测试Servlet)
篇幅所限,这篇博客只能写基本操作,感兴趣可以在w3cschool上寻找相关的教程进行深入学习
代码包 :链接: https://pan.baidu.com/s/1F1qhQST-qeTf3JXQuFlOHw 提取码: jknc
客户端与服务器端交互(会话技术)
Cookie
Cookie,即客户端会话技术,能把数据保存在客户端,常常用于存储少量不太敏感的数据.
Cookie使用步骤,大致分为三步
- 创建对象,绑定数据 new Cookie(key,value),key与value都是String类的
- 发送Cookie对象 response.addCookie(cookie),通过response的addCookie()方法来发送
- 获取Cookie,拿到数据 Cookie[] cks = request.getCookies(),通过response的getCookie()方法来获取,返回值为Cookie数组
下面通过示例根据上面写的步骤来使用Cookie
创建目录结构如图
编写设置Cookie的对象
编写获取Cookie的对象
编写表单
结果如图
Session
Session,即服务器端会话技术,能把数据保存在服务器端,与cccokie不同,Session的Value可以是任意类型
使用步骤,有俩种方式操作Session
- 通过request对象操作Session
使用resquest.setAttribute(key,value)来设置Session
使用request.getAttribute(key)来获取Session
- 通过HttpSession操作Session
与通过resquest操作Session不同的是,在操作之前需要通过request来获取HttpSession对象
HttpSession hs = request.getSession();//获取HttpSession对象
hs.setAtterbute(key,value);
hs.getAttribute(key);
俩种方式的异同:通过HttpSession操作的Session作用域更大,但HttpSession对服务器的开销更大
下面通过代码来演示
创建目录如图
编写SessionSet类
编写SessionGet类
编写表单
运行结果
Cookie与Session异同
Session把数据存储在服务器端,Cookie把数据存储在客户端
Session对数据有大小限制,而Cookie没有
Session的Value可以是任意类型(Object)
Session数据相对Cookie更加安全
获取数据
客户端的form表单提交后,获取表单的内容
条件:表单里的项有name属性
步骤:1.提交表单.2.调用request.getParameter(name)来获取表单里项的内容
目录结构如图
服务器端代码
客户端代码
运行结果
资源跳转
转发
通过改造上面的Cookie代码来举例
如果你刚刚跟着写了上面的代码,你会发现上面的功能实现需要点击俩次按键(发送和获取)
现在我们通过转发的方式实现点击一次按键就可以实现上面Cookie的功能
注 :需要刷新页面获取Cookie
转发步骤
- 获取请求调度器,req.getRequestDispather()
- 使用调度器里的forward(req,resp)方法
注意一般连起来写:req.getRequestDispather().forward(req,resp)来进行转发
重定向
步骤:
- 获取文件的真实路径 req.getContextPath()+"/资源名"
- 调用resp.sendRedirect(path)方法来进行重定向
通过改造上面的Session代码来实现
转发与重定向异同
转发是一次请求,浏览器上的地址栏路径不变,只能访问当前服务器上的资源
重定向是俩次请求,浏览器上地址栏的路径改变,可以访问不同服务器上的资源