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>

    浏览器输出 

  • 相关阅读:
    微信开发生成带参数的二维码的讲解
    C#利用最新版的WPS实现导入导出
    【模版消息】C#推送微信模版消息(Senparc.Weixin.MP.dll)
    Photoshop的辅助线
    Newtonsoft.Json 两个Attribute含义
    VUE2.0 饿了吗视频学习笔记(二):新版本添加路由和显示Header
    VUE2.0 饿了吗视频学习笔记(一):VUE示例data.json
    Windows句柄数限制
    The CLI moved into a separate package: webpack-cli.解决办法
    Winform窗体设计工具源码
  • 原文地址:https://www.cnblogs.com/qf123/p/10072199.html
Copyright © 2011-2022 走看看