通过前面的了解,我们发servlet所做的核心的事情
1、获取参数
2、回传响应数据,跳转页面
对于我们的程序来说,目前我们可以吧程序划分为几个层:
视图层:html 展示页面和数据的
控制层、业务调度层:Servlet
逻辑层:dao 复杂完成具体功能。
实际上servlet的在项目当中发挥的功能已经全部完毕。剩下就是一些技术问题。
1、乱码问题:
乱码 产生的原因是由于页面传递数据给服务器对数据进行编码的,这个编码格式是由客户端指定(iso-8859-1英文、gbk、gb2312、UTF- 8),同时服务器应该以该编码进行解析,
第一种解决方案就是要保证浏览器和服务器的编码一致,注意此种方法只针对变淡。
post提交数据解决方法就是:
//处理乱码 F5进入方法 F6 下一步
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
get处理乱码:无论浏览器设置什么编码,他都是以iso-8859-1提交数据,如果页面还是以UTF-8来获取,那得到就是乱码
String account = request.getParameter("account");
String pwd = request.getParameter("pwd");
byte data[] = account.getBytes("iso-8859-1");
String account2 = new String(data,"UTF-8");
目前为止:
request、response、application
在我们编写代码的时候需要满足一个 “高类聚,低耦合” 的概念, 未来增加,修改、删除功能的时候,尽量不修改代码
所谓的高类聚是指的我们的任意一个java的类尽量不依赖其他类去完成一个功能,这样的话,当我们修改某个功能模块的时候,不会影响其他模块的功能结构。低耦合我们项目的模块与模块之间尽量不要关联太多。本质的意思就是我们在设计项目的功能模块时,我们需要考虑到未来功能的增加,修改、删除只影响一个功能模块而不影响其他供模块。
application是ServletContext类型的对象。这个对象是全局使用。所有的servlet都可以访问对象,当服务器启动的时候,该对象就创建了。这个对象和hashMap一样,是可以存储数据的一个零时区域,以建-值对进行存储,这种对象在我们servlet里面叫域对象,专门用于存储数据的。
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
String account = request.getParameter("account");
//吧数据存入到application
ServletContext application = this.getServletContext();
application.setAttribute("user", account);
会话技术:所谓的会话技术就是服务器和客户端通过这个过程的一个概念。基于这个会话的过程衍生出来两个对象, session, cookie
session就是服务器为当前访问的客户端(浏览器) 生成的一个存储临时数据的区域, 这个区域只能当前链接的客户端访问,其他客户端是无法访问。
session和application一样也是域对象
//吧数据存入到application
ServletContext application = this.getServletContext();
application.setAttribute("user", account);
//吧数据存入session
HttpSession session = request.getSession();
session.setAttribute("user", "baijuan");
ServletContext application = this.getServletContext();
String account = (String) application.getAttribute("user");
HttpSession session = request.getSession();
String name = (String) session.getAttribute("user");
session是由服务器创建,从浏览器打开访问到浏览器关闭。这是理论的说话,实际上session的时间
aplication 从服务器启动到服务器关闭, 存储数据是整个项目都可以方法
session是从浏览器打开到浏览器关闭,存储数据是当前浏览器才能访问。
cookie用法
创建cookie
//创建对象
Cookie c = new Cookie(“userName”, account);
//设置超时时间
c.setMaxAge(60*60*24);
//添加到响应数据包,响应给客户端
response.addCookie(c);
读取cookie
Cookie cookies[] = request.getCookies();
//读取到、 没读取到
if(cookies != null){
for(int i=0;i