zoukankan      html  css  js  c++  java
  • Jsp的使用

    Jsp 

    java server pages,从用户角度,jsp就是一个网页;从程序员角度,jsp就是一个继承了servlet的Java类,所以jsp可以看作是servlet

    html是用来显示静态内容是一成不变的, 但是有时候我们需要在网页上显示一些动态数据, 比如: 查询所有的学生信息, 根据姓名去查询具体某个学生。 这些动作都需要去查询数据库,然后在网页上显示。 html是不支持写java代码 , jsp里面可以写java代码

    jsp指令

     1 <%@ page language="java" contentType="text/html; charset=utf-8"
     2     pageEncoding="utf-8"%>
     3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     4 <html>
     5 <head>
     6 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
     7 <title>Insert title here</title>
     8 </head>
     9 <body>
    10 
    11 </body>
    12 </html>

    指令写法<%@ 指令名称%>

    page指令

    属性

    language

      language="java",表明jsp页面中可以写Java代码

    contentType

      contentType="text/html; charset=UTF-8",说明这个文件是什么类型,告诉浏览器这个文件是什么类型以及使用什么编码

      text/html是一种MIMEType,说明这是一个文本方式的html网页

    pageEncoding

      jsp内容编码

    extends

      用于指定jsp编译成Java类后继承的父类是谁,一般不修改

    import

      导包时使用

    session 

      值可选的有true or false .用于控制在这个jsp页面里面,能够直接使用session对象。

      具体的区别是,请看翻译后的java文件 如果该值是true , 那么在代码里面会有getSession()的调用,

      如果是false : 那么就不会有该方法调用,也就是没有session对象了。在页面上自然也就不能使用session了。

    errorPage

      指的是错误的页面, 值需要给错误的页面路径

    isErrorPage

      上面的errorPage 用于指定错误的时候跑到哪一个页面去。 那么这个isErroPage , 就是声明某一个页面到底是不是错误的页面。

     include指令

    包含另一个jsp的页面进来

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

    将另一个页面的所有内容都拿过来,包括所有的标签元素(静态包含

    taglib指令

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

    prefix:标签库别名

    uri:标签库路径

    Jsp动作标签

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

      包含指定的页面,动态包含。也就是不把包含的页面的所有标签元素拿过来输出,而是只把它的运行结果拿过来

    <jsp:forword page=""></jsp:forword>

      前往到哪个页面,其实就是<%request.getRequestDispatcher("other02.jsp").forward(request, response); %>

    <jsp:param name="" value=""></jsp:param>

      在包含某个页面的时候,或者在跳转某个页面的时候,加入这个参数

      e.g:

    <jsp:forward page="other.jsp"> <jsp:param name="user" value="admin"/> </jsp:forward>

    在other.jsp中获取参数 :<%= request.getParameter("address")%>

    Jsp内置对象

    内置对象,就是我们可以在jsp页面内直接使用的对象,不需要创建

      1 /*
      2  * Generated by the Jasper component of Apache Tomcat
      3  * Version: Apache Tomcat/8.0.14
      4  * Generated at: 2014-10-31 11:14:54 UTC
      5  * Note: The last modified time of this file was set to
      6  *       the last modified time of the source file after
      7  *       generation to assist with modification tracking.
      8  */
      9 package org.apache.jsp;
     10 
     11 import javax.servlet.*;
     12 import javax.servlet.http.*;
     13 import javax.servlet.jsp.*;
     14 
     15 public final class index_jsp extends org.apache.jasper.runtime.HttpJspBase
     16     implements org.apache.jasper.runtime.JspSourceDependent {
     17 
     18   private static final javax.servlet.jsp.JspFactory _jspxFactory =
     19           javax.servlet.jsp.JspFactory.getDefaultFactory();
     20 
     21   private static java.util.Map<java.lang.String,java.lang.Long> _jspx_dependants;
     22 
     23   private javax.el.ExpressionFactory _el_expressionfactory;
     24   private org.apache.tomcat.InstanceManager _jsp_instancemanager;
     25 
     26   public java.util.Map<java.lang.String,java.lang.Long> getDependants() {
     27     return _jspx_dependants;
     28   }
     29 
     30   public void _jspInit() {
     31     _el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory();
     32     _jsp_instancemanager = org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager(getServletConfig());
     33   }
     34 
     35   public void _jspDestroy() {
     36   }
     37 
     38   public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
     39         throws java.io.IOException, javax.servlet.ServletException {
     40 
     41 final java.lang.String _jspx_method = request.getMethod();
     42 if (!"GET".equals(_jspx_method) && !"POST".equals(_jspx_method) && !"HEAD".equals(_jspx_method) && !javax.servlet.DispatcherType.ERROR.equals(request.getDispatcherType())) {
     43 response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, "JSPs only permit GET POST or HEAD");
     44 return;
     45 }
     46 
     47     final javax.servlet.jsp.PageContext pageContext;
     48     javax.servlet.http.HttpSession session = null;
     49     final javax.servlet.ServletContext application;
     50     final javax.servlet.ServletConfig config;
     51     javax.servlet.jsp.JspWriter out = null;
     52     final java.lang.Object page = this;
     53     javax.servlet.jsp.JspWriter _jspx_out = null;
     54     javax.servlet.jsp.PageContext _jspx_page_context = null;
     55 
     56 
     57     try {
     58       response.setContentType("text/html; charset=UTF-8");
     59       pageContext = _jspxFactory.getPageContext(this, request, response,
     60                   null, true, 8192, true);
     61       _jspx_page_context = pageContext;
     62       application = pageContext.getServletContext();
     63       config = pageContext.getServletConfig();
     64       session = pageContext.getSession();
     65       out = pageContext.getOut();
     66       _jspx_out = out;
     67 
     68       out.write("
    ");
     69       out.write("<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    ");
     70       out.write("<html>
    ");
     71       out.write("<head>
    ");
     72       out.write("<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    ");
     73       out.write("<title>Insert title here</title>
    ");
     74       out.write("</head>
    ");
     75       out.write("<body>
    ");
     76 
     77     out.println("文字内容");
     78 
     79       out.write("
    ");
     80       out.write("</body>
    ");
     81       out.write("</html>");
     82     } catch (java.lang.Throwable t) {
     83       if (!(t instanceof javax.servlet.jsp.SkipPageException)){
     84         out = _jspx_out;
     85         if (out != null && out.getBufferSize() != 0)
     86           try {
     87             if (response.isCommitted()) {
     88               out.flush();
     89             } else {
     90               out.clearBuffer();
     91             }
     92           } catch (java.io.IOException e) {}
     93         if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);
     94         else throw new ServletException(t);
     95       }
     96     } finally {
     97       _jspxFactory.releasePageContext(_jspx_page_context);
     98     }
     99   }
    100 }
    View Code

    作用域

    表示这些对象可以存值,他们的取值范围有限定。 setAttribute 和 getAttribute

    • pageContext
      • PageContext,作用域仅限当前的页面
      • 可以获取其它八个内置对象

          

    • request
      • HttpServletRequest,作用域仅限于一次请求,只要服务器对请求做出响应,这个作用域就失效了  
    • session
      • HttpSession,作用域仅限于一次会话(一个会话的多次请求和响应)  
    • application
      • ServletContext,整个工程中都可以访问,服务器关闭后就不可以访问了  

    使用作用域存取数据

     1 <body>
     2     <%
     3         pageContext.setAttribute("name", "page");
     4         request.setAttribute("name", "request");
     5         session.setAttribute("name", "session");
     6         application.setAttribute("name", "application");
     7     %>
     8 
     9         取出四个作用域中的值<br>
    10 
    11     <%=pageContext.getAttribute("name")%><br>
    12     <%=request.getAttribute("name")%><br>
    13     <%=session.getAttribute("name")%><br>
    14     <%=application.getAttribute("name")%><br>
    15 </body>

    作用域范围大小:

      pageContext -- request --- session -- application

    输出 

    out对象,JspWriter

    如果同时有HttpServletResponse输出,那么先将out对象的输出内容放到HttpServletResponse的缓冲区中,先等待HttpServletResponse本身内容输出完成再输出out要输出的内容

    其他内置对象 

    • response
      • HttpServletResponse  
    • config
      • ServletConfig  
    • page
      • jsp翻译成的java类的实例对象
    • exception
      • Throwable  

    EL表达式

    简化在jsp中写的Java代码

    格式:${表达式}

    如果从作用域中取值,先从小的作用域开始取,如果没有,就去下一个作用域取,如果四个作用域都没有,就不显示

    取作用域中的值

    1.作用域中值是普通的String,基本属性等

    <body>
        <%
            pageContext.setAttribute("name", "page");
            request.setAttribute("name", "request");
            session.setAttribute("name", "session");
            application.setAttribute("name", "application");
        %>
       	 取出四个作用域中的值<br>
        <%=pageContext.getAttribute("name")%>
        <%=request.getAttribute("name")%>
        <%=session.getAttribute("name")%>
        <%=application.getAttribute("name")%>
        <br>
        
        EL表达式取值:<br>
        ${pageScope.name }
        ${requestScope.name }
        ${sessionScope.name }
        ${applicationScope.name }
    </body>

    浏览器输出

    2.作用域中的值是数组

    <body>
        <%
        	String[] names = {"name1","name2","name3"};
            pageContext.setAttribute("names", names);
        %>
        <br>
        EL表达式取值:<br>
        ${names[0] }
        ${names[1] }
        ${names[2] }
    </body>

    浏览器输出

    3.作用域中的值是集合

    <body>
        <%
        	List<String> names = new ArrayList<String>();
        	names.add("name1");
        	names.add("name2");
        	names.add("name3");
            pageContext.setAttribute("names", names);
        %>
        <br>
        EL表达式取值:<br>
        ${names[0] }
        ${names[1] }
        ${names[2] }
    </body> 

    浏览器输出

    4.作用域中的值是map

    <body>
        <%
        	Map map = new HashMap();
        	map.put("name", "wxf");
        	map.put("age", "21");
            pageContext.setAttribute("map", map);
        %>
        <br>
        EL表达式取值:<br>
        name:${map.name }<br>
        age:${map.age }
    </body> 

    浏览器输出

    总结:

    • 从域中取值,必须先存值
    • 直接指定取哪个作用域取值:${pageScope.name}
    • 未指定取哪个作用域取值:${name},先从page里找,再去request中找,再去session中找,最后再去application中找
    • 如果作用域中的值是有下标的,直接使用[]的方式获取:${names[0]},这里names说的是setAttribute(name,value)中的name
    • 如果作用域中的值是没有下标的,直接使用.的方式获取:${user.name},${user.age},${map.name}

    EL表达式的11个内置对象

    ${ 对象名.成员 }

    作用域相关对象 :pageScope ,requestScope ,sessionScope ,applicationScope

    头信息相关对象 :header ,headerValues

    参数信息相关对象:param , paramValues

    pageContext

    cookie 全局初始化参数

    initParam

    JSTL

    JSP Standard Tag Library jsp标准标签库,简化jsp编写,替换<%%>写法,一般与EL表达式配合

    使用

    1. 导入jar,WebContent/WEB-INF/lib,jstl.jar和standard.jar
    2. 在jsp页面,使用taglib指令引入标签库
    3. 如果想要使用EL表达式,引入的标签库必须选择1.1版本,1.0版本不支持EL表达式
      • <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>  

    常用标签

    <body>
    	<!-- 声明一个变量name,值是wxf,存储到session中,默认是page -->
        <c:set var="name" value="wxf" scope="session"></c:set>
        ${sessionScope.name }
        <br>   
        <!-- 判断test里面的表达式是否满足,如果满足,就执行c:if标签中的输出 , c:if 是没有else的  -->
        <c:set var="age" value="21"></c:set>
        <c:if test="${age>18 }">
        	已成年
        </c:if>
        <br>
        <!-- 从1 开始遍历到8 ,得到的结果 ,赋值给 i ,并且会存储到page域中, step , 增幅为2 -->
        <c:forEach begin="1" end="8" step="2" var="i">
        	${i }
        </c:forEach>
        <br>
        <!-- items : 表示遍历哪一个对象,注意,这里必须写EL表达式。 var: 遍历出来的每一个元素用user 去接收。 -->
        <%
        	List<String> list = new ArrayList<String>();
        	list.add("str1");
        	list.add("str2");
        	list.add("str3");
        	pageContext.setAttribute("list", list);
        %>
    	<c:forEach var="str" items="${list }">
    	    ${str }
    	</c:forEach>
        
    </body>

    浏览器输出 

  • 相关阅读:
    命令拷屏之网络工具
    PHP 设计模式 笔记与总结(1)命名空间 与 类的自动载入
    Java实现 计蒜客 1251 仙岛求药
    Java实现 计蒜客 1251 仙岛求药
    Java实现 计蒜客 1251 仙岛求药
    Java实现 蓝桥杯 算法训练 字符串合并
    Java实现 蓝桥杯 算法训练 字符串合并
    Java实现 蓝桥杯 算法训练 字符串合并
    Java实现 LeetCode 143 重排链表
    Java实现 LeetCode 143 重排链表
  • 原文地址:https://www.cnblogs.com/qf123/p/10072199.html
Copyright © 2011-2022 走看看