-
C/S架构:客户端和服务器组成;例如QQ,抖音;王者
-
B/S架构:浏览器和服务器组成:例如:所有网页;
-
上述两者的区别:
-
Servlet:是运行在服务器上的Java程序,能够处理请求和响应
JSP本身就是Servlet,
Servlet是开发工具自己去编译为.class文件,然后发布到服务器上,我服务器去运行Servlet;
JSP是被发布上去之后,先有服务器翻译为java文件,再有编译为class文件,但这儿两个步骤再发布成功后之后执行一次,以后都去直接执行,所以在刚开始JSP比Servlet特别慢;以后就都一样. -
Servlet中的request相关方法:作用就是获取请求中的内容
利用session 和cookie 和 filiter (过滤器)实现七天免登录:
1,通过过滤器先给每个页面处理乱码,同时处理登录页面和登陆控制页面,其余页面都必须登录才可以浏览:
@WebFilter("/*")
public class demo01 extends HttpFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
// 改乱码
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
response.setCharacterEncoding("utf-8");
// 用户权限
List<String> baiList=new ArrayList<>();
baiList.add("/LoginController");
baiList.add("/showLoginServlet");
// 从session获取用户,是否存在
HttpSession session = ((HttpServletRequest) request).getSession();
card cardlogin = (card) session.getAttribute("loginCid");
if(baiList.contains(((HttpServletRequest) request).getServletPath())) {
chain.doFilter(request, response);
}else {
if (cardlogin == null) {
((HttpServletResponse)response).sendRedirect("showLoginServlet");
}
chain.doFilter(request, response);
}
}
2,在登陆控制页面把用户信息放进cookies 以便在登录页面获取登录信息,将用户信息放进session,实现用户权限管理
// 获取资源
PrintWriter out = response.getWriter();
// 获取登录页面传的数据
String bname = request.getParameter("bname");
int bid =0;
if(request.getParameter("bid")!=null) {
bid = Integer.parseInt(request.getParameter("bid"));
}
SqlSession sqlSession = DaoUtil.getSqlSession();
CardMapper cardMapper = sqlSession.getMapper(CardMapper.class);
card card1 = cardMapper.queryCardByCid(bid);
if (card1 !=null) {
// 将数据存入session,以便实现权限管理
HttpSession res=request.getSession();
res.setAttribute("loginCid", card1);
// 将数据存入cookie中,以便七天免登录
Cookie cookie1=new Cookie("cname", bname);
Cookie cookie2=new Cookie("cid", bid+"");
cookie1.setMaxAge(7*60*60*24);
cookie2.setMaxAge(7*60*60*24);
// 添加cookie
response.addCookie(cookie2);
response.addCookie(cookie1);
response.sendRedirect("shouAllServlet");
} else {
response.sendRedirect("showLoginServlet");
}
DaoUtil.closeResource(sqlSession);
}
3,登陆页面实现七天免登录:
// 获取资源
PrintWriter out = response.getWriter();
// 获取cookie
Cookie[] cookies = request.getCookies();
String cname=null;
String cid=null;
if(cookies!=null) {
for(int i=0;i<cookies.length;i++) {
if("cname".equals(cookies[i].getName())) {
cname=cookies[i].getValue();}
if("cid".equals(cookies[i].getName())) {
cid=cookies[i].getValue();}}
}
if(cname!=null && cid!=null) {
SqlSession sqlSession = DaoUtil.getSqlSession();
CardMapper cardMapper = sqlSession.getMapper(CardMapper.class);
int cid1=Integer.parseInt(cid);
card card1 = cardMapper.queryCardByCid(cid1);
if(card1!=null) {
request.getSession().setAttribute("loginCid", card1);
response.sendRedirect("shouAllServlet");
return;
}}
-
session定义:是一个会话空间,每个用户有不同的会话空间,seesion存在于用户和服务器之间,放在同一个session中的数据可以只要是在同一个用户同一个会话时间即可实现数据共享,保存在服务器上;可以保存任何数据类型;
生命周期:默认为30分钟;也可以通过 session.setMaxInactiveInterval()设置,单位为秒;生命周期会收非活动时间(在一个页面不进行任何操作的时间)影响,只要有活动,就会不断填满时间,不断刷新时间
session失效: -
cookie定义:保存在本地可以保存数据的容器,需要自己去new 出来一个Cookie对象;而且只能保存字符串类型的数据;最后必须响应添加cookie对象,否则无用;
生命周期,默认就是会话关闭,也就结束了,不存在了,可以用 cookie1.setMaxAge();设置生命时间;不会因为非活动时间时间而改变,浏览器关闭也不会影响,除非手动清除cookie; -
页面之间传值的方式:
1,通过把数据存储到ServletCintext中,达到所有页面共享数据;共享性极高;
2,通过request对象中的getParameter()获取单值数据;通过request对象中的getParameterValues()获取多值数据,比如多选框;
页面之间传参两种方式:表单提交和超链接; -
页面之间跳转:
1,超链接跳转可以传参
2,通过javascript中的localtion.href()跳转;
3,请求的分发转发,客户端不会参与,页面之间作用, 同时也可以传参
4,重定向:response.sendRedirect(“”); 客户端发出请求,服务器响应类容为跳转到下一个页面告诉用户,用户像另一个页面发出请求,并响应
-
response相关方法:
-
Servlet生命周期:
-
JSP:java server page (包含java+HTML)
基本标签:
九大内置对象:这些对象可以直接使用,不需要new
四大作用域(数据共享范围)类似于java中对类和变量的修饰符,protected,public,private,
page作用域对应的作用域访问对象为pageContext 对象
session作用域对应的作用域访问对象为session 对象
request作用域对应的作用域访问对象为request 对象
application作用域对应的作用访问域对象为application 对象