Java Web:会话与JSP

会话

  • Cookie:数据共享,是存储在浏览器
    使用步骤:服务器
    1.创建Cookie对象,绑定数据
new Cookie(String name,String value)

2.发送Cookie对象

response.addcookie(Cookie cookie);

3.获取Cookie,拿到数据

Cookie[] request.getCookies();
@WebServlet("/cookiedemo3")
public class CookieDemo3 extends HttpSrevlet{
protected void doPost (HttpServletRequest request,HttepServletResponse)
{创建Cookie对象
Cookie c1 = new Cookie(name,haha);
Cookie c2 = new Cookie(name,zhangsan);
c1.serMaxAge(30);//在文件中存储30秒后自动删除
c1.setPath("/day16");//day16目录下面的项目可以访问该cookie
response.addCookie(c1);
response.addCookie(c2);//传送多个Cookie
}
}

原理实现:第一次请求服务器,服务器会基于响应头里的set-cookie发送Cookies信息给浏览器,在第二次访问服务器的时候,浏览器通过请求头发送Cookie给服务器

cooki的细节
1.一次可以发多个cookie
2.cookie在浏览器中,默认情况下,当浏览器关了就立即释放

 持久化存储:setMaxAge(int seconds); 
 参数:正数:数据写道硬盘中,持久化存储,也可以是存活时间
 负数时默认值
 零代表删除Cookie信息

3.cookie在tomcat 8之前不能存储中文,之后就可以
如果不能的话,需要转码,一般采用URL编码
4.cookie获取范围有多大?
一个服务器中有多个web项目,默认情况下不能共享
serPath(String path):设置cookie的获取范围
参数 是有‘/’的话 所有项目都可以共享cookie
5.不同的tomcat服务器间的cookie
setDomain(String path) 设置一级 域名 相同,那么可以共享
setDomain(".baidu.com"),那么tieba.baidu.com 和 new.baidu.com中的cookie可以共享

  • cookie 的特点和作用
    1.cookie存储数据在客户端浏览器(不安全)
    2.浏览器对单个cookie 的大小有限制,以及对同个域名下的总cookie 数量有限制(一般20个)
    3.cookie一般用于存储少量的不太敏感的数据
    4.在不登录的情况下,完成服务器对用户的身份识别

  • 案例:记住上次的访问时间

@WebServlet("/cookieServlet")
public class  cookieServlet extends HttpSrevlet{
protected void doPost (HttpServletRequest request,HttepServletResponse)
{
设置编码类型
response.setContextType("text/html;charaset=utf-8");
获取所有的cookie
Cookie[] cookies=request.getCookie();
boolean flag = false;
判断时候有访问过,即存在不存在lastime的cookie
if(cookies!=null&&cookies.length>0){ 
	for(coookie cookie:cookies){
	String name =cookie.getName();
			if("lasetime".equal(name)) 
		    {设置cookie的value,获取当前时间的字符串,重新发送cookie
		    flag=ture;//有叫lastime 的cookie
			获取当前时间放在时间对象 date
			Date date=new Date();
			
			
			因为时间为美国格式,所以改一下中国格式
			SimpleDateFormat sdf=new SimpleDateFormat("yyyy年mm月dd日");
			
			String str_date = sdf.format(date);
			cookie.setValue(str_date);
			
			
			设置cookie的存活时间
			cookie.setMaxAge(60*60*24*30);//一个月
			response.addCookie(cookie);			
			
			
			获取浏览器发过来的cookie的时间值
			String value=cookie.getValue();
			response.getWriter().write("欢迎回来,您上次访问的时间为:value");
			break;
      }
    } 
  }
  if(cookies==null||cookie.length==0||flag==false)
  {
  cookie cookie=new cookie("lastime",str_date);
  }
}
}

JSP

  • 作用:简化编程工作

  • 原理:通过请求头寻找jsp资源,然后转化为java文件,再通过编译编程class字节码文件,然后返回给浏览器;jsp实质上是servlet ,因为他继承了Httpservlet

  • Jsp的脚本:JSP定义Java代码的方式
    1.<% 代码 %>:定义的java代码放在service代码中
    2.<%! 代码 %>:定义的java代码作为类的成员变量
    3.<%= 代码 %>:定义的java代码作为输出语句

  • 内置对象:在jsp页面中不要定义的对象,可以直接拿来用的叫内置对象,共9个。

变量名                它们的类                     作用
pageContext          PageContext              当前页面共享数据
 request             HttpServletRequest       在一次请求访问多个资源(转发)共享数据,还可以获取其他八个对象
 session             HttpSession              一次会话域的共享数据
 application         ServletContext           所有用户间共享(服务器开光)
 response            HttpServletResponse      响应对象
 page                Object                   当前页面Servletde 的对象 this
 out                 JspWriter                输出对象,输出到页面上
 config              SrvletConfig             Servlet的配置对象
 exception           Throwable                异常对象
  • out字符输出流对象,可以将数据对象输出要页面上,与response.getWriter().write();的区别: response的输出永远比out先,不管写的时候什么顺序

  • 指令 :用于配置JSP页面以及导入资源文件
    1.格式:<%@ 指令名称 属性名1=属性值1,属性名2=属性值…%>
    2.分类:
    (1)Page:用于配置JSP页面
    contentType:等同于response.setContentType();设置响应体的mime类型及其字符集;设置点前 jsp 页面的编码(只能高级的开发工具如IDE才能生效);
    import 导包,buffer 输出空间;
    errorPage:错误页面,即当前页面发生异常后指定跳转页面;
    isErrorPage 标识当前页面是否为错误页面,true 则可以使用excepation对象,false不行

<%@ page contenType="text/html";charset-UTF-8> isErrorPage="true"ErrorPage=500.jps"%>
<html>
	<body>
		<h1>服务器正在忙</h1>
		<%
		String message = exception.getMessage();
		out.print(message);
		%>
	</body>
</html>

(2)incude:页面包含的,导入资源

 <%@include file ="top.jsp"%>

(3)taglib:导入资源(标签库)

<%taglib prefix="c" url="http:java.sun.com/jsp/jst1/core"%>
  • 注释
    1.html注释:<!-- – > 只能注释HTML脚本,浏览器看得到
    2.jsp的注释:<%-- – >能注释jsp,也可以注释html,浏览器看不到

Session

  • 概念:服务器端会话技术,在一次会话的多次请求间共享数据,数据保存在服务器对象中HttpSession
    1.HttpSession 对象 :
    获取Session对象:HttpSession session=request.getSession();
    2.使用session对象
    object getAttribute(String name);获得值
    void setAttribute(String name,object value)存储值作为共享
    void removeAtrribute(String name)
@WebServlet("/sessionDemo1")
public class  SessionDemo1 extends HttpSrevlet{
protected void doPost (HttpServletRequest request,HttepServletResponse)
{
获取Session对象
HttpSession session= request.getSession();
存储数据
session.setAttribute("msg","hello");
}
  • Session原理:依赖于Cookie,第一次访问服务器,没有cookie,所以创建session对象含ID,响应浏览器的时候,返回含session的哈希code值的cookie给浏览器,浏览器第二次访问的时候,传送含哈希code值的cookie给服务器,这样让服务器确定了是同个session
  • session的细节
    1.当客户端关闭后,服务器不关闭,两次获取session不是同一个
    默认情况下不是,客户端关闭意味着这次会话结束
    解决方法:在服务器创建并把哈希code值放进cookie中,且设置Cookie的持续存储 ,respose返回cookie给浏览器
    2.客户端不关闭,服务器关闭后,两次获取的session不一样
    解决方法:tomcat自动帮我们完成了
    session的钝化:在服务器正常关闭之前,将session对象系列化(即创建文件)到硬盘上(idea中不行,因为会自动删除放了session的work文件夹,重新创新的)
    session的活化:在服务器启动后,将session文件转化为内存中session对象即可
    3.session销毁:
    服务器关闭;
    调用session对象中的invalidate方法;
    30分钟默认失效;
去配置文件里:
<session-config>
<session-tomcout>30</session-tomcout>
</session-config>
  • Session特点
    1.用于存储一次会话的多次请求的数据,放在服务器(安全)
    2.session存储任意大小,类型的数据
    3.作用域为一次会话
  • 案例:验证码

MVC开发模式

Mode模型:处理事务(如:查询),封装对象,JavaBean
VIew视图:展示 JSP
Controller控制器:用户输入;调用模型;数据交给视图 Servleet

  • 优点
    耦合性低,方便维护,利于分工,重用性高;
  • 缺点
    使得项目架构变得复杂,对开发人员要求高
    不适合小型应用程序

EL标签

  • 概念:表达式语言

  • 作用:替换和简化JSP中Java代码的编写

  • 语法:$ {表达式}
    如果要忽略EL 标签可以 在page中找属性,isELIgnored或
    空运算符:empty ,判断字符串、集合、数组对象是否为null并且长度是否为0

  • 获取值:$ {域名称,键名}:从指定域中获取指定键的值
    1.pageScope —> pageContext
    2.requestScope —>request
    3.applicationScope -->application(ServletContext)
    4.sessionScope—> session
    举例:在request域中存储了name=张三
    获取:${requestScope.name}

  • ${键名}:表示依次从最小的域中查找是否有该键对应的值,直到找到为止

  • 获取对象、List集合、Map集合的值
    对象:${域名称.键名.属性名}
    本质上会去调用对象的getter方法
    List集合:${域名称.键名[索引]}
    Map集合:${域名称.键名.key名称}

${域名称.键名[“key名称”]}
  • 隐式对象:
    el表达式中有11个隐式对象
    pageContext:
    获取jsp其他八个内置对象
    ${pageContext.request.contextPath}:动态获取虚拟目录

JSTL标签

1.概念:JavaServer Pages Tag Library JSP标准标签库
是由Apache组织提供的开源的免费的jsp标签
2.作用:用于简化和替换jsp页面上的java代码
3.使用步骤:
1)导入jstl相关jar包
2)引入标签库:taglib指令:<%@ taglib %>
3)使用标签
4.常用的JSTL标签
1)If:相当于java代码的if语句
a)属性:test 必须属性,接收boolean表达式
i.如果表达式为true,则显示if标签体内容;如果表达式为false,则不显示标
签体内容
ii.一般情况下,test属性值会结合el表达式一起使用
b)注意:c:if标签没有else情况,想要else情况,则可以再定义一个c:if标签
2)Choose:相当于java代码的switch语句
a)使用choose标签取出数字,相当于switch声明
b)使用when标签做数字判断,相当于case
c)otherwise标签做其他情况的声明,相当于default
3)Foreach:相当于java代码的for语句

Filter:过滤器

  • 作用: 过滤信息,完成通用操作 , 如:登录验证;编码;敏感字符
  • 入门
    1.定义一个类,实Filter接口
    2.复写方法
    3.配置拦截路径:
    注解配置@WebFilter ()
    web.xml配置
@WebFilter("/*") //访问所有资源前,执行该过滤器
class FilterDemo implenents Filter{
服务器启动后自动创建Filter对象
public void init(FilterConfig filterConfig)throw ServletException{
}
每次请求被拦截一次执行一次,可执行多次
public void doFilter(ServletRequest servletRequest,ServletResponse servletResponse,FilterChain filterchain){
System.out.println("1");

//放行
filterChain.doFilter(servletRequest,servletResponse);
System.out.println("2");
}
服务器正常关闭的时候执行
public void destroy(){
Syestem.out.println("destroy...");
}
  • 细节
    1.web.xml配置:在Web-INF 配置
<filter>
	<filter-filter-name>demo1</filter-name>
	<filter-class>cn.itcase.web.filter.FilterDemo1<filter-class>
</fliter>
<fliter-mapping>
	<filter-name>demo1</filter-name>
	<url-pattern>/*</url-pattern>
	<dispatcher>REQUEST</dispatcher>
</filter-mapping>

2.过滤器执行流程
先经过过滤器,判断是否有执行过滤器许可,有则访问资源,再回来执行过滤器的内容;没则只访问资源。作用:回来执行过滤器一般是对response对象的响应消息进行增加
3.过滤器声明周期方法
4.过虑器配置详解
(1)拦截路径配置:具体资源路径:
/index.jsp 只访问index.jsp资源時,过滤器才会被执行
/user/* 访问user下的所有资源時,过滤器才会被执行
*.jsp 访问所有后缀名为jsp资源時,过滤器都会执行
/* 访问所欲资源時拦截
(2)拦截方式配置:资源被访问的方式,即什么访问方式才会允许执行顾虑器
注解配置:设置dispatcherTypess 属性:
REQUEST:默认值,浏览器请求资源
FORWARD:转发访问资源
INCLUDE:包含访问资源
ERROR:错误跳转资源
ASYNC:异步访问资源

//转发和请求都会执行过滤器
@WebFilter("value="/*",dispatcherTypes={Dispatcher.FORWARD,Dispatcher.REQUEST})

Web.xml:

5.过滤链(配置多个过滤器)
(1)如果有两个过滤器,:过滤器1和2,那么执行顺序:
滤器1》过滤器2》资源》过滤器2》过滤器1
(2)过滤器先后问题:
注解配置过滤器:按类名的字符串的比较规则比较,值小先执行
Web.xml配置:谁先定义在上面谁先执行

三层架构

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主会第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上二次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值