JSP

僤鯓⒐⒋嵵緔 提交于 2019-12-16 11:00:02

JSP总结

  • 概念:
    本质上是一个servlet,跨平台,依次编写处处运行,组件跨平台,健壮、安全。

  • 访问原理:
    第一阶段(请求):客户端发起请求,请求jsp到服务器。
    第二阶段(处理):Tomcat生成请求对象,然后处理请求。执行jspservlet,将jsp文件转成servlet文件,然后执行该文件。
    第三阶段(响应):服务器最后响应处理结果到客户端。
    在这里插入图片描述

  • jsp三种注释:
    前端注释:会被转译,也会被发送,但是不会被浏览器执行。
    java注释:会被转译,不会被servlet执行。
    jsp注释:不会被转译。

  • JSP的page指令:
    <% page 属性名=“属性值” %>
    language:声明jsp要被转译的语言
    import:声明转译的java文件要导入的包
    pageEncoding:jsp文件的数据编码格式
    session:转译的servlet中是否开启session支持
    errorPage:jsp运行错误跳转的页面
    extends:jsp转译的java要继承的父类

  • JSP的局部代码块:
    局部代码块中声明的java代码会被原样转译为jsp对应的servlet的jspservice方法中,代码块中声明的变量是局部变量。

  • 缺点:
    使用局部代码块在jsp中进行逻辑判断,书写麻烦。

  • 开发:
    servlet进行请求逻辑处理,jsp进行页面展示。

  • jsp全局代码块:
    特点:声明的java代码作为全局代码转译到对应的servlet
    使用:<% ! 全局代码块%>

  • jsp脚本段语句:
    特点:帮助快速获取变量或方法的返回值作为数据响应给浏览器
    使用:<%=变量或方法名%>

  • JSP的静态引入和动态引入:
    静态引入(先合并后处理代码):
    <%@ indude file=“要引入的jsp文件的相对路径” %>
    特点:
    会将引入的jsp文件和当前的jsp文件转移为一个java文件,在网页中也就显示合并后的显示效果。
    注:静态引入的jsp文件不会单独转译为java文件,当前文件和静态引入的jsp文件中不能使用java代码块声明同名变量。

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'includeStatic.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">		
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>

  <body>
 	 <%
 	 	//int a=5;
 	 %>
	  <b>我是静态引入页面---网站声明</b>
  </body>
</html>

动态引入(先处理各自的java代码,再进行合并):
<jsp:include page="要引入的jsp文件的相对路径“></jsp:include>
特点:将引入的jsp文件单独转译,在当前文件转译好的java文件中调用引入的jsp文件的转译文件。在网页中显示合并后的显示效果。
注意:动态引入允许文件中声明同名变量。
优点:降低jsp代码冗余,便于维护。

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'includeActive.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
    <i>我是动态引入------网站声明</i>
  </body>
</html>

  • Jsp的转发标签:
    <jsp:forward page=“要转发的jsp文件的相对路径”></ jsp:forward>
    特点:一次请求,地址栏信息不改变。
    注意:在转发标签的两个标签中间除了写<jsp:para value=“str” name=" "/>子标签不会报错,其他任意字符都报错。
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'forward.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
    <b>我是转发页面---forward--<%=request.getParameter("str") %></b>
  </body>
</html>

  • Jsp的九大内置对象:
    内置对象:jsp文件在转译为其对应的servlet文件的时候自动生成的并声明的对象。在jsp页面直接使用。
    注意:内置对象在jsp页面中使用,使用局部代码块或脚本段语句,不能在全局代码块中使用。
    内容:
    pageContext:页面上下文对象,封存其他内置对象,封存当前jsp运行信息,每个jsp文件单独使用一个pageContext对象。作用域是当前页面。
    request:封存当前请求数据的对象。由Tomcat服务器创建一次请求。
    session:此对象用来存储用户不同请求的共享数据 ,一次会话。
    application:servletContext对象一个项目只有一个。存储用户共享数据的对象,完成其他操作。
    response:响应对象,响应请求处理结果给浏览器对象设置响应头,重定向。
    out:响应对象,jsp内部使用,带有缓冲区的响应对象,效率高于response对象。
    page:代表当前jsp对象,相当于java中的this。
    exception:异常对象,存储当前运行的异常信息。
    config:servletConfig,用来获取web.xml中的配置数据,完成一些初始化数据的读取。

  • 四个作用域对象:
    PageContext:当前对象,解决在当前页面内的数据共享问题。
    request:一次请求,一次请求的servlet的数据共享。请求转发将数据流转给下一个servlet。
    session:一次会话,一个用户的不同请求的数据共享。
    application:一个项目内,不同用户的数据共享问题,数据从一个用户流转到其他用户。

  • Jsp路径:
    在jsp中资源路径可以使用相对路径完成跳转,但是:
    资源位置不可随意更改,需要使用…/进行文件夹的跳出。
    使用绝对路径:
    /虚拟项目名/资源名。例:<a href="/jsp/jspPro.jsp“>
    注意:在jsp中资源的第一个/表示服务器根目录,相当于:localhost:8080。
    使用jsp中自带的全局路径声明:

<% String path=request.getContextPath();
 		String basePath=request.getScheme()+" : // "+request.getServerName()+":"+request.getContextPath() %>
<base href="<%=basePath%>">

作用:给资源前面添加项目路径:http://127.0.0.1:8080/虚拟路径名/

<html>
	<head>
		<title>jsp基本语法学习</title>
		<meta charset="utf-8"/>
	</head>
	<body>
		<h3>jsp基本语法学习</h3>
		<hr />
		<!-- 局部代码块 -->
		<%
			//声明java代码域--局部代码块声明
			String str="jsp中使用逻辑校验很难受";
			int a=2;
			if(a>3){
		%>
			<b>jsp学习很简单</b>
		<%} else{%>
			<i>	<%=str%></i>
			
		<%test();} %>
		
		<!--全局代码块 -->
		<%!
			int b=5;
			public void test(){
				System.out.println("我是全局代码块声明");
			}
		%>
		<!--jsp的静态引入  -->
		<%@include file="includeStatic.jsp" %>
		<!-- jsp的动态引入 -->
		<jsp:include page="includeActive.jsp"></jsp:include>
		
		<!-- jsp的转发forward标签 -->
		<%-- <jsp:forward page="forward.jsp">
			<jsp:param value="aaa" name="str"/>
		</jsp:forward> --%>
		<!-- jsp的 九大内置对象学习-->
		<%
			//获取请求数据
			String s=request.getParameter("str");
			request.getAttribute("str");
		%>
		<%=s%>
		<%
			//response.sendRedirect("forward.jsp");
		
		%>
	<!--Jsp的路径  -->
		<br />
		<a href="/jsp/a/a.jsp">a.jsp</a><br />
		<a href="a/b/b.jsp">b.jsp</a><br />
	</body>
</html>
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!