这里是修真院后端小课堂,每篇分享文从
【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】
八个方面深度解析后端知识/技能,本篇分享的是:
【什么是实体表,什么是关系表,一对多和多对多应该怎么设计表?】
大家好,我是IT修真院深圳分院第十三期学员,一枚正直纯洁善良的JAVA程序员。 今天给大家分享一下,修真院官网JAVA任务二里面的知识点:
什么是实体表,什么是关系表,一对多和多对多应该怎么设计表?
1 背景介绍
网站一般都有登录功能,而且登陆后增删改查页面都会显示你的账号。
2.知识剖析
2.1登录后需要绑定到哪个对象?
我们知道Servlet里面有个对象可以向页面传值,比如request,response,config,context等一些对象。
2.2这些对象能不能满足这个业务需求呢?
首先我们来分析业务需求,在页面显示你的账号,可以清楚的知道多个请求都会显示,所以Resquest,response不行,因为它们是一个请求对应的一个生命周期。config和组件servlet是一对一的关系,而登录和查询是不同的servlet所以数据不共用,而且config没有读取变量的能力。tomcat内只有一个对象,context跟servlet是一多的关系,而每个人登录传递的账号都是code=“zhangsan”的数据,其中key值都是一样,存入context有冲突。
2.3使用COOKIE或SESSION来保存这样的数据
1)这几个对象之间的关系
前提条件是游览器跟服务器是一对多的关系(服务器也可能是多,那是大数据和云计算的方向),我们可以把游览器比作理发店的顾客,servlet可以比作理发师,而config对应的每个理发师的背包,context就可以比作理发店里公共的衣柜,而cookie可以比作顾客的钱包,session可比作理发店里会员管理系统。
假如我是顾客在理发店办了一张会员卡,首先我不可能把我的会员卡放在理发师背包里给理发管理(config),我也不可能放在衣柜里面(context)。但是我可放在我的钱包里面(cookie),或者放在会员管理系统里面(session,报我的电话号码就是会员)。所以从上关系可以看出:
cookie存在游览器器上,服务器压力小,但数据不安全(顾客可以改会员卡里面的信息)
-session存在服务器上,服务器压力大,但数据安全。
3.常见问题
1)为什么servlet里面的有些对象不能满足那个需求?
2)什么是cookie和session?
3)什么场景适用于session?什么场景适用于cookie?
4.解决方案:
通过创建cookie和session对象绑定数据然后在页面显示,从而实现业务场景。
5.编码实战
package cookie;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
/**
* 登录检查,判断账号密码是否正确。想当于netctoss中的MainServlet.login()
*/
public class loginServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//接受参数(账号或者密码)
String code =req.getParameter("code");
//检查账号或者密码
//转发或者重定向
//检查通过后,将账号存入cooike
//每个cookie对象只能存一条数据,包括key和value,都是字符串
Cookie c1=new Cookie("code",code);
//声明cookie的生存时间,>0时cookie保存到客户端的硬盘上,=0时cookie被游览器删除,<0是存在内存(默认是小于0)
c1.setMaxAge(600000);
//设置cookie的有效路径
c1.setPath("/cookieandsession");
//将cookie发送给游览器,游览器接收到以后,会自动保存。
resp.addCookie(c1);
//在创建一个数据存中文
Cookie c2 =new Cookie("city", URLEncoder.encode("北京","utf-8"));
resp.addCookie(c2);
}
}
package cookie;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLDecoder;
/**
* 模拟查询资费,想当于NETCTOSS中的mainServlet.findCost()
*/
public class FindCostSetvlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("++++++++++++++++++++");
//模拟资费
//获取cookie
Cookie[] cs =req.getCookies();
//将他们也输出给游览器
if(cs!=null){
resp.setContentType("text/html;charset=utf-8");
PrintWriter out =resp.getWriter();
for(Cookie c:cs){
System.out.println("....."+c);
out.println(c.getName()+":"+ URLDecoder.decode(c.getValue(),"utf-8"));
}
out.close();
}
}
}
package session;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
public class LoginServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//接受账号
String code =req.getParameter("code");
//存入session,session是存在服务上的对象,他的内部可以存储任意类型的数据。
HttpSession session =req.getSession();
session.setAttribute("code",code);
//响应时服务器会自动cookie,将session的Id通过cookie1发送给游览器。
//Cookie c =new Cookie("JSESSIONID",session.getId());
}
}
package session;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;
public class indexServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//由于本次请求游览器传入SID,服务器就根据此SID找到那个旧的session,可以从中读取之前存的数据。
HttpSession session =req.getSession();
String code =(String)session.getAttribute("code");
resp.setContentType("text/html;charset=utf-8");
PrintWriter out =resp.getWriter();
out.println(code);
out.close();
}
}
注:上面分两部分,一部分是cookie的使用,一部分是session的使用(都是两部分),一些配置我没有贴出来,这里只介绍cookie和session的基本使用。
6.扩展思考:
我们在单独使用cookie的时候,保存的是明文,所以很容易被别人获取信息,怎么解决?就需要用到任务五下面的知识了,des加密。
注:本人初学java者,如有不对敬请指出,谢谢!
7.参考文献
CSDN、百度百科
8.更多讨论
7.参考文献
CSDN、百度百科
8 更多讨论
总结:
1))为什么servlet里面的有些对象不能满足那个需求?
首先我们来分析业务需求,在页面显示你的账号,可以清楚的知道多个请求都会显示,所以Resquest,response不行,因为它们是一个请求对应的一个生命周期。config和组件servlet是一对一的关系,而登录和查询是不同的servlet所以数据不共用,而且config没有读取变量的能力。tomcat内只有一个对象,context跟servlet是一多的关系,而每个人登录传递的账号都是code=“zhangsan”的数据,其中key值都是一样,存入context有冲突。
2)什么是cookie和session?
cookie存在游览器器上,服务器压力小,但数据不安全(顾客可以改会员卡里面的信息)
-session存在服务器上,服务器压力大,但数据安全。
3)什么场景适用于session?什么场景适用于cookie?
-重要数据存session
-一般数据存cookie
温馨提示:本人初学java者,如有不对敬请指出,谢谢!
技能树.IT修真院
“我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,掌控自己学习的节奏,学习的路上不再迷茫”。
这里是技能树.IT修真院,成千上万的师兄在这里找到了自己的学习路线,学习透明化,成长可见化,师兄1对1免费指导。
快来与我一起学习吧~技能树.IT修真院
“我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,掌控自己学习的节奏,学习的路上不再迷茫”。
这里是技能树.IT修真院,成千上万的师兄在这里找到了自己的学习路线,学习透明化,成长可见化,师兄1对1免费指导。
快来与我一起学习吧~ http://www.jnshu.com/login/1/...
视频:https://v.qq.com/x/page/a0763...
PPT链接 视频链接
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。