JSP的基本使用

一:概念

JSP的全名为Java Server Pages,也是Java服务端页面(动态网页技术)。

动态网页技术的概念: 页面内容根据不同时间、不同地点、不同客户显示不同的效果。
即 asp、php、cgi等动态网页技术。

同时,在网页 html 中嵌入java代码,实现动态的业务逻辑。

二:JSP本质

JSP的本质是 Servlet,第一次访问jsp页面时,Tomcat服务器会将.jsp文件转化为.java源文件,然后编译成.class字节码文件,加载到JVM运行。

提醒:我们可以在Tomcat目录下的 work 文件夹下找到对应的源文件和字节码文件。
在这里插入图片描述
由上图可知,index_jsp继承了HttpJspBase类,而HttpJspBase类是HttpServlet类的子类,因此说JSP本质上是一个Servlet。

三:JSP七大元素

3.1 html

在JSP中可以按照编写HTML页面的方式来编写,可以包含HTML文件的所有静态内容,并且可以在HTML内容之间嵌套JSP的其他元素来产生动态内容和执行业务逻辑。

3.2 指令

JSP指令可以用来设置整个JSP页面的相关属性,如网页的编码格式,使用的脚本语言。
例:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

共三种指令标签: page include taglib

指令描述
<%@ page…%>定义网页依赖属性
<%@ include… %>包含其他文件
<%@ taglab…%>引入标签库的定义

①:== Page指令==:一个页面可以有多个page指令,常见的属性有contentType(指定当前JSP页面的字符编码)、import(导入要使用的Java类)、language(定义JSP页面所使用的的脚本语言,默认是Java)等。

<%@ page import="类的完整路径"%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

②:include指令:此指令可以包含其他文件,例如JSP文件、HTML文件、文本文件。包含的文件也作为JSP文件的一部分,会被同时编译执行。

<%@ include file="文件相对路径"%>

③:taglab指令:可以引入一个自定义标签集合的定义,包括路径、自定义标签。
uri是确定标签库的位置,prefix属性指定标签库的前缀,可以自定义。

<%@ taglib uri="地址" prefix="prefix"%>

<%-- 引入jstl --%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

3.3 注释

有两种注释方式:
第一种: <%-- 注释 --%>
第二种: <!-- 注释 --%>
第二种会在网页中的源代码中显示,第一种不会。

3.4 scriptlet脚本

语法:

<%   代码片段     %>

例:


<%
	Random random = new Random();
	int r = random.nextInt(99999);
		for (int i = 0; i < 10; i++) {
			String hexcolor = "#"+Integer.toHexString((i+1)*r);
			out.println("<hr size='8' width=\""+(i+1)*20+"\"
	color=\""+hexcolor+"\" />");
}
%>

3.5 表达式

语法:

<%=   表达式  %>

3.6 声明

声明中,只能用于声明属性或方法,不能直接写语句
语法:

<%!   代码片段  %>

例: 表达式和声明搭配使用的例子

<html>
<head>
	<title>Title</title>
</head>
<body>
	<%!   // 声明
		// 属性
		private SimpleDateFormat format = new SimpleDateFormat("YYYY年MM月dd日HH:mm:ss");
		//方法
		String getDate(){
				String str = format.format(new Date());
				return str;
		}
    %>
		<%-- 表达式 --%>
		今天是:<span style="color:red"><%=getDate()%> </span>
</body>
</html>

3.7 动作

作用:JSP动作标签利用XML语法格式的标记来控制Servlet引擎的行为。利用JSP动作可以动态的插入文件,重用JavenBean组件等。

特点:jsp动作元素是用XML语法写成的;jsp的动作标签,在使用的时候不需要导包(内置了);
常见的动作有 < jsp:include>、< jsp:param>、< jsp:forward>、< jsp:plugin>、< jsp:useBean>、< jsp:setProperty>、< jsp:getProperty>

①:< jsp:include>属于动态包含,它动态的包含一个文件的内容

<jsp:include page="/include.jsp"></jsp:include>

注意: <%@ include file="/include.jsp" %>属于静态包含
静态包含和动态包含的区别:
静态包含的结果是把其他的jsp文件引入到当前jsp,转义为.java源文件时,把两个页面合成一个页面Servlet类,所有的变量属于一个类,一个作用域。

动态包含的结构是两者独立的,转义.java源文件时,引入的jsp文件和当前jsp文件是分别进行转义和编译的,生成两个或多个类,两个类之间变量不共享。

②:< jsp:param>起传递参数作用,可以传递多个参数。要与< jsp:include>或者< jsp:forward>配合使用

<jsp:include page="/include.jsp">
	< jsp:param name="参数名" value="参数值">
</jsp:include>

③:< jsp:forward>作用是跳转页面,可以与< jsp:param>配合使用。

<jsp:forward page="转向页面的url" >
           <jsp:param   name="参数名1" value="参数值1">
</jsp:forward>

④:< jsp:plugin>法作用根据浏览器的类型,插入Java插件。

⑤:< jsp:useBean>作用是加载一个将在JSP页面使用的JavaBean。

<jsp:useBean id="对象名" class="完整包名.类名" />

⑥:< jsp:setProperty>作用是设置已经实例化的Bean对象的属性

<jsp:useBean id="对象名" ... >
   <jsp:setProperty name="javaBean对象名" property="javaBean对象的属性名" .../>
</jsp:useBean>

⑦:< jsp:getProperty>作用是获取指定Bean属性的值

<jsp:getProperty name=“javaBean对象” property=“javaBean对象属性名” />

四:内置对象

JSP中的内置对象,又称为隐式对象。是在 JSP 中不需要自己声明可以直接使用的对象。容器提供了9种容器对象。分别是out、page、pageContext、request、session、application、config、exception、response,其中pageContext、request、session、application四个作用域对象。

都有方法: setAttribute(key,val) 、getAttribute(key)、removeAttribute(key)

  1. out 对象: out对象是JspWriter 类的实例,用于将结果输出到网页上。

  2. page对象:page对象就是this类似于this关键字,可以看作是整个JSP页面的代表。

  3. config对象:config对象是 ServletConfig 类的实例。

  4. exception对象:exception对象是Exception类的对象,代表发生错误的JSP页面中对应的异常对象。

  5. pageContext对象:可以代表整个JSP页面,提供JSP页面所有对象。如果此对象使用了动态包含,那么两个页面的数据是不共享的。如果使用了静态包含,两个页面的数据是共享的,此时两个页面只能有一个相同的属性名,有两个就会报错。

  6. request对象:request对象是HttpServletRequest 类的实例。每次客户端发送一个请求时,JSP引擎会制造一个新的request对象来代表这个请求。
    request对象的方法有:
    ①:getParameter(String name): 获得客户端传送给服务器端的有name指定的参数值
    ②:getParameterNames(): 获得客户端传送给服务器端的所有参数的名字,结果是一个枚
    举的实例
    ③:getParameterValues(String name):获得有name指定的参数的所有值
    ④:setAttribute(String name,Object):设置名字为name的request的参数值
    ⑤:getAttribute(String name): 返回由name指定的属性值
    ⑥:setCharacterEncoding(“utf-8”); 设置请求编码
    ⑦:getRemoteAddr(): 获取客户端的IP地址
    ⑧:getSession([Boolean create]): 返回和请求相关Session
    ⑨:getServletPath(): 获取客户端所请求的脚本文件的路径

  7. session对象
    session对象是HttpSession类的实例,作用是来实现会话跟踪。比如在第一次访问服务器时,服务器会在响应时,返回给客户端一个session 用来区分不同会话,来实现会话跟踪。
    session对象的方法有:
    setAttribute(key,value)
    getAttribute(key)
    setMaxInactiveInterval(20):设置最大非活动间隔时间 单位是秒
    getMaxInactiveInterval() : 获取最大非活动间隔时间
    isNew() : 是否第一次访问
    getCreationTime() : 获取session 创建时间
    getLastAccessedTime() : 获取上次访问时间

  8. application对象
    application对象是ServletContext类的实例,此对象的整个生命周期都代表此JSP页面,此对象在JSP页面初始化就创建了。
    application对象的方法有:
    setAttribute(key,value)
    getAttribute(key)
    getAttributeNames():获取 application 对象的所有参数名字
    removeAttribute(key): 根据key删除 application 对象的参数
    getMajorVersion():获取服务器支持 Servlet 的版本号
    getMinorVersion(): 获取服务器支持 Servlet 的版本号

  9. response对象
    response对象是HttpServletResponse类的实例,当服务器创建request对象时同时会创建response对象,用来响应客户端。
    response对象的方法有:
    setAttribute(key,value)
    getAttribute(key)
    setCotentType(type):设置页面的 MIME 类型和字符集
    addCookie(cookie):添加 cookie 信息
    sendRedirect(location):实现页面重定向

五:其他:

5.1 POST和GET请求

区别:

比较项getpost
参数出现在URL中
长度限制
安全性
URL可传播

注意:
参数: POST传参是请求体,隐式方式提交的。GET在地址栏使用URL传参
安全:POST安全的,GET不安全。
长度:POST 没有限制,支持大量数据提交,支持文件上传;GET 限制,用于传输小量数据
传播、收藏:POST 不支持,GET 支持

5.2 重定向和转发

重定向语法:response.sendRedirect(页面的相对路径);
转发语法:request.getRequestDispatcher(页面的相对路径).forward(request,response);

区别:

重定向转发
地址栏地址栏URL改变地址栏URL不改变
传值不能共享和获取请求中的数据可以获取到请求数据
次数发送两次请求发送一次请求
位置是浏览器发生的跳转是服务器端发生的跳转

5.3 四种作用域对象的比较

从小到大的顺序:
pageContext:只在当前页面(和被静态包含的页面中)起作用
request:当前页面、转发的页面
session:一次会话中所有的页面
application:整个应用范围

测试:
pageContext页面

	<h1>pageContext页面</h1>
    <%
        pageContext.setAttribute("key","pageContext");
        request.setAttribute("key","request");
        session.setAttribute("key","session");
        application.setAttribute("key","application");

    %>

    <h1>采用链接跳转</h1>
    <a href="TestSession.jsp">跳转到Session页面测试</a>
    <a href="TestRequest.jsp">跳转到Request页面测试</a>
    <a href="TestApplication.jsp">跳转到Application页面测试</a>

    <p>pageContext:<%=pageContext.getAttribute("key")%></p>
    <p>request:<%=request.getAttribute("key")%></p>
    <p>session:<%=session.getAttribute("key")%></p>
    <p>application:<%=application.getAttribute("key")%></p>

Request页面

	<h1>Request页面</h1>
    <p>pageContext:<%=pageContext.getAttribute("key")%></p>
    <p>request:<%=request.getAttribute("key")%></p>
    <p>session:<%=session.getAttribute("key")%></p>
    <p>application:<%=application.getAttribute("key")%></p>

Session页面

	<h1>Session页面</h1>

    <p>pageContext:<%=pageContext.getAttribute("key")%></p>
    <p>request:<%=request.getAttribute("key")%></p>
    <p>session:<%=session.getAttribute("key")%></p>
    <p>application:<%=application.getAttribute("key")%></p>

Application页面

	<h1>Application页面</h1>
	
    <p>pageContext:<%=pageContext.getAttribute("key")%></p>
    <p>request:<%=request.getAttribute("key")%></p>
    <p>session:<%=session.getAttribute("key")%></p>
    <p>application:<%=application.getAttribute("key")%></p>

测试结果:
进入pageContext页面后;
在这里插入图片描述
点击跳转到Session页面后
在这里插入图片描述
点击跳转Request页面后
在这里插入图片描述
点击跳转Application页面后
在这里插入图片描述
当你除了PageContext页面,将其他三个页面的地址复制到另外一个浏览器中,会出现取得session的值为null
在这里插入图片描述

案例:实现登录注册功能,并且使用Session跟踪用户登录信息

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

☞^O^☜♞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值