javaweb之jsp入门

1.jsp概述

定义:jsp(java server pages)是javaweb服务端的动态资源,与html作用是相同的,显示数据和获取数据。
组成:jsp组成 = html+Java脚本+jsp动态标签

2.jsp语法

jsp脚本就是Java代码段,分为三种:

  • <% … %>:Java语句;
  • <%=…%>: java表达式;
  • <%!..%>:Java定义类成员
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
	<title>JSP演示</title>
  </head>  
  <body>
    <h1>JSP演示</h1>
    <%
    	// Java语句
    	String s1 = "hello jsp";
    	// 不会输出到客户端,而是在服务器端的控制台打印
    	System.out.println(s1);
    %>
  <!-- 输出到客户端浏览器上 -->
    输出变量:<%=s1 %><br/>
    输出int类型常量:<%=100 %><br/>
    输出String类型常量:<%="你好" %><br/>
    <br/>
    使用表达式输出常量是很傻的一件事,因为可以直接使用html即可,下面是输出上面的常量:<br/>
    100<br/>
    你好   
  </body>
</html>

内置jsp对象out;out对象在jsp’页面无需创建就可以使用,他的作用是用来输出客户端。

<%
	out.print("你好!");//向客户端输出,与<%=...%>功能一样
%>
3.jsp原理

jsp是一种特殊的servlet,当jsp首次被访问时,容器(tomcat)会先把jsp编译成servlet,再去执行servlet。所以jsp就是servlet。jsp生成的servlet都在work目录下。

4.再论jsp脚本

jsp一共三种形式

  • <% … %>:内容会直接输出到“真身”
  • <%=…%>: 内容会放到out.print()中。
  • <%!..%>:内容会放到_jspService()方法之外,被类直接包含。

<%!..%>,jsp就是一个servlet,<%!..%>他的作用就是在类中添加方法或成员的。所以他不会出现在_jspService()中。

<%!
	String name="zahngsan ";
	public String hello(){
		return "hello";
	}
%>
5.jsp注释

jsp是预先编译成.java,然后编译成.class,其中<%–…--%>的内容在jsp编译成.java时会被忽略。即jsp注释。也可以使用html中的注释。会被编译,但浏览器不显示。

会话跟踪技术

1.什么是会话跟踪技术

可以把会话理解为客户端与服务端的一次交互行为。在一次交互行为中可能会包含多次请求和响应。在javaweb中,客户向某个服务器发出第一个请求会话就开始了,直到关闭浏览器会话结束。
在一个会话的多个请求中共享数据,这就是会话跟踪技术。例如在一个会话中的请求如下:
l 请求银行主页;
l 请求登录(请求参数是用户名和密码);
l 请求转账(请求参数与转账相关的数据);
l 请求信誉卡还款(请求参数与还款相关的数据)。

在这上会话中当前用户信息必须在这个会话中共享的,因为登录的是张三,那么在转账和还款时一定是相对张三的转账和还款!这就说明我们必须在一个会话过程中有共享数据的能力。

Cookie

1.cookie概述

cookie就是一个键和一个值构成的,随着服务端响应发送给客户端浏览器,然后客户端浏览器会把cookie保存起来,当服务器下一次访问服务器的时候把cookie再发送给服务器。
cookie是由服务器创建的,再通过响应发送给客户端的一个键值对。客户端会保存cookie,并标注cookie来源。再次请求时发给服务器,这样服务器就可以识别浏览器了。
规范:

  • cookie大小上线4KB
  • 一个服务器最多在客户端浏览器上保存20个cookie
  • 一个浏览器最多保存300个cookie
2.cookie与http头

cookie是通过http请求和响应头在客户端传递的。
cookie:请求头,客户端发送给服务器端
格式:Cookie:a=A;b=B;c=C;多个cookie使用分号隔开。
set—cookie:响应头,服务器端发送给客户端
一个cookie对象一个set-Cookie:
Set-Cookie:a=A
Set-Cookie:b=B
Set-Cookie:c=C

3.cookie覆盖

如果服务端发送重复的cookie,就会覆盖原有的cookie。

什么是Cookie的生命

Cookie不只是有name和value,Cookie还是生命。所谓生命就是Cookie在客户端的有效时间,可以通过setMaxAge(int)来设置Cookie的有效时间。
1.cookie.setMaxAge(-1):cookie的maxAge属性的默认值就是-1,表示只在浏览器内存中存活。一旦关闭浏览器窗口,那么cookie就会消失。
2.cookie.setMaxAge(60*60):表示cookie对象可存活1小时。当生命大于0时,浏览器会把Cookie保存到硬盘上,就算关闭浏览器,就算重启客户端电脑,cookie也会存活1小时;
3.cookie.setMaxAge(0):cookie生命等于0是一个特殊的值,它表示cookie被作废!也就是说,如果原来浏览器已经保存了这个Cookie,那么可以通过Cookie的setMaxAge(0)来删除这个Cookie。无论是在浏览器内存中,还是在客户端硬盘上都会删除这个Cookie。

HttpSession

1.httpsession 概述

javax.servlet.http.httpsession接口表示一个会话,我们可以把一个会话内需要共享的数据保存到httpsession中。

2.获取HTTP session对象
  • request.getSession();如果当前会话已经有了session对象那么直接返回,如果当前会话还不存在,那么创建session并返回。
  • request.getSession(boolean):当参数为true时,与request.getSession()相同,如果为false时,如果当前对象村子啊session就返回,否则返回null。
3.HttpSession是域对象。

HttpServletRequest和ServletContext是域对象。他们三个是servlet中可以使用的域对象。

  • HttpServletRequest:一个请求创建一个request对象,所以在同一个请求中可以共享request,例如,一个请求从Aservlet转发到Bservlet,那么Aservlet和Bservlet可以共享request域中的数据。
  • ServletContext:一个应用只创建一个ServletContext对象。所以在ServletContext中的数据可以整个应用共享。只要不启动服务器,那么servletcontext数据就可以共享。
  • HttpSession:一个会话创建一个HttpSession对象,同一个会话中的多个请求中可以共享session数据。

下载时session的域方法:
1.void setAttribute(String name, Object value):用来存储一个对象,也可以称之为存储一个域属性,例如:session.setAttribute(“xxx”, “XXX”),在session中保存了一个域属性,域属性名称为xxx,域属性的值为XXX。请注意,如果多次调用该方法,并且使用相同的name,那么会覆盖上一次的值,这一特性与Map相同;
2.Object getAttribute(String name):用来获取session中的数据,当前在获取之前需要先去存储才行,例如:String value = (String) session.getAttribute(“xxx”);,获取名为xxx的域属性;
3.void removeAttribute(String name):用来移除HttpSession中的域属性,如果参数name指定的域属性不存在,那么本方法什么都不做;
4.Enumeration getAttributeNames():获取所有域属性的名称;

4.session实现原理

当首次使用session时,服务器端要创建session,session是保存在服务器端,而给客户端的session的id(一个cookie中保存了sessionId)。客户端带走的是sessionId,而数据是保存在session中。
当客户端再次访问服务器时,在请求中会带上sessionId,而服务器会通过sessionId找到对应的session,而无需再创建新的session。

5.session与浏览器

session保存在服务器,而sessionId通过Cookie发送给客户端,但这个Cookie的生命不-1,即只在浏览器内存中存在,也就是说如果用户关闭了浏览器,那么这个Cookie就丢失了。
当用户再次打开浏览器访问服务器时,就不会有sessionId发送给服务器,那么服务器会认为你没有session,所以服务器会创建一个session,并在响应中把sessionId中到Cookie中发送给客户端。     
你可能会说,那原来的session对象会怎样?当一个session长时间没人使用的话,服务器会把session删除了!这个时长在Tomcat中配置是30分钟,可以在${CATALANA}/conf/web.xml找到这个配置,当然你也可以在自己的web.xml中覆盖这个配置!
web.xml

    <session-config>      
       <session-timeout>30</session-timeout>   
    </session-config>	

session失效时间也说明一个问题!如果你打开网站的一个页面开始长时间不动,超出了30分钟后,再去点击链接或提交表单时你会发现,你的session已经丢失了!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值