码迷,mamicode.com
首页 > Web开发 > 详细

jsp语法与jsp基本知识点

时间:2016-04-27 07:00:07      阅读:222      评论:0      收藏:0      [点我收藏+]

标签:

【jsp基本知识点】
JSP全称是Java Server Pages,它和servlet技术一样,都是SUN公司定义的一种用于开发动态web资源的技术。
JSP/Servlet规范。 JSP实际上就是Servlet
JSP这门技术的最大的特点在于,写jsp就像在写html,但它相比html而言,html只能为用户提供静态数据,而jsp技术允许在页面中嵌套java代码,为用户提供动态数据。

[JSP模板元素]
JSP页面中的HTML内容称之为JSP模板元素

JSP模板元素定义了网页的基本骨架,即定义了页面的结构和外观。

jsp的几大对象
    PageContext pageContext = null;
    HttpSession session = null;
    ServletContext application = null;
    ServletConfig config = null;
    JspWriter out = null;
    Object page = this;
    JspWriter _jspx_out = null;
    PageContext _jspx_page_context = null;

      _jspx_page_context = pageContext;
      application = pageContext.getServletContext();
      config = pageContext.getServletConfig();
      session = pageContext.getSession();
      out = pageContext.getOut();
      _jspx_out = out;

[JSP的脚本,如下]

  <body>
  	<%
  		request.setAttribute("name", "张三");
  		request.getRequestDispatcher("/one02.jsp").forward(request, response);
  	 %>
  </body>
 在【<%  ****** %>】之前的java代码称作为jsp脚本

 [JSP表达式,如下]

   <body>
     脚本表达式(输出一个变量):<%=request.getAttribute("name") %>
  </body>
在【<%=这里写表达式  %>】这样的表示jsp表达式,注意:表达式不是语句,所有最后不能有“;”号


例如:如下代码

     <table border=1 width="200">
     	<%
     		for(int i=0;i<4;i++){
     	 %>
	     	 <tr>
	     	 	<td><%=i %></td>
	     	 	<td>112</td>
	     	 </tr>
     	 <%
     	 	}
     	  %>
     </table>
显示结果为:

技术分享
在jsp页面中,可以用上述方法巧妙的运用HTML页面标签和jsp的java脚本和表达式组成循环,输出table


[jsp声明]

     <%!
     	int a=0;
     	public void add(){
     		System.out.println("大家好");
     	}
     	
     	public class A{
     		public void add1(){
     			System.out.println("大家好,我是内部类");
     		}
     	}
      %>
      <% 
      		this.add(); 
      		A a=new A();
      		a.add1();
       %>

后台自动编译后会变成:

技术分享

可以发现jsp声明中的变量,会变成类的属性,而类会变成内部类。

在【<%! ****** %>】里面的java代码里面可以定义方法和属性


[jsp注释]

  <body>
    <%-- 我是jsp注释 --%>
  </body>
JSP引擎在将jsp页面翻译成Servlet程序时,忽略JSP页面中被注释的内容。

[JSP指令]
JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分。
在JSP2.0规范中共定义了三个指令:


静态指令
page指令
lnclude指令
taglib指令

例如: 
<%@ page import="java.awt.*" %>
可以使用page指令引用java包到页面上。
在【<%@ *** %>】中的属性又如下:
【pageEncoding="UTF-8"】设置jsp页面的默认编码和客户端页面的默认编码为UTF-8
【contentType="text/html;charset=ISO-8859-1"】设置客户端编码,默认是ISO-8859-1和pageEncoding在页面的显示上没有任何区别
【import=""】用来在当前jsp页面中引入jar包
【language="java"】 指定当前页面支持的脚本语言为java(目前jsp只支持java脚本语言)
【autoFlush="true"】是否自动刷新,由服务端向客户端自动发送数据(一般不要修改)
【buffer="8kb"】指定缓冲区大小默认是8kb
【extends】继承,可以修改继承的类,可以自己写类继承。默认继承了一个类。
【info】键值对,可以在服务端拿到。一般很少用
【isELIgnored="false"】是否支持EL表达式,如果是true,表示不支持EL表达式。
【isThreadSafe="true"】是否是线程安全,默认是true,表示是线程安全
【session="true"】是否可以在页面中使用session。默认是true,表示在jsp页面上可以直接使用。

【isErrorPage】定义当前页面是否是错误处理页面。默认是false 不是错误处理页面
【errorPage】指定当前页面jsp脚本发送错误时,错误处理页面时那个。一般和isErrorPage一起使用。相当于错误处理机制


page指令用于定义JSP页面的各种属性,无论page指令出现在JSP页面的什么地方,它作用的都是整个JSP页面,为了保持程序的可读性和遵循良好的编程习惯,page指令最好放在整个JSP页面的起始位置。
errorPage属性的设置值为一路径(相对或者绝对),如果以“/"开头,表示相对于当前WEB应用程序的根目录(注意站点根目录,否则,表示新队路径)
可以在web.xml文件中使用<exception-type>子元素指定异常类的完全限定名,<loaction>元素指定以"/"开头的错误处理页面路径。

在web.xml配置全局的应该如下:

  <error-page>
  	<error-code>404</error-code>
  	<location>/one04.jsp</location>
  </error-page>


如下是演示一种error错误处理

触发错误页面代码为:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"  errorPage="one05.jsp" %>
<%
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>演示error异常处理</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">

  </head>
  
  <body>
  <%
  out.write("aaa你好");
  out.write(10/0);//保证一定会出现异常
  %>
  </body>
</html>

定义错误处理页面代码为:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" isErrorPage="true"%>
<%
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>本页面为异常处理页面</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">

  </head>
  
  <body>
  服务器正忙,请一会访问!
    <%
    	String str=exception.getMessage();
  		out.write(str);
    %>
  </body>
</html>

显示结果为:

技术分享


include包含
1.静态包含:指代码级别的包含,指将目标页面的源码拷贝一份包含进来
2.动态包含:指是执行目标页面,将结果包含进来
例如:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"  %>
<%@ page import="java.awt.*" %>
<%
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>jsp指令标签3个</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>
    <%-- 我是jsp注释 --%>
    <!-- 静态包含 -->
    <%@ include file="one06.jsp" %>
    <!-- 动态包含 -->
    <jsp:include page="one07.jsp"></jsp:include>
  </body>
</html>

one06.jsp页面为:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    
    <title>include指令《静态包含》</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>
    静态包含,我是页面one06 <br>
  </body>
</html>


one07.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>include动态包含</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>
   我也页面07 <br>
  </body>
</html>

include指令用于引入其他JSP页面,如果使用include指令引入了其它JSP页面,那么JSP引擎将把这两个JSP翻译成一个servlet。所以include指令通常也称为静态引入。
语法:
<%@ include file="被包含组件的绝对URL" %>
其中file属性用于指定被引入文件的路径。路径以"/"开头,表示当前web应用。
细节:
被引入的文件必须遵循JSP语法
被引入的文件可以使用任意的扩展名,即使其扩展名为html,JSP引擎也会按照处理JSP页面的方式处理它里面的内容,JSP规范建议使用.jspf(JSP fragments)作为静态引入文件的扩展名。
由于使用include指令将会涉及到2个jsp页面,并会把2个JSP翻译成一个servlet,所以2个JSP页面的指令不能冲突(除了pageEncoding和导包除外)。




Taglib指令用于在JSP页面中导入标签库





jsp语法与jsp基本知识点

标签:

原文地址:http://blog.csdn.net/u013008795/article/details/51255297

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!