zoukankan      html  css  js  c++  java
  • JavaWeb-----JSP详解

       JSP简介

         JSP全名为Java Server Pages,其根本是一个简化的Servlet设计,是一种动态网页技术标准

    它实现了Html语法中的java扩展(以 <%, %>形式),JSP与Servlet一样,是在服务器端执行的

       3个指令

         include指令

         在JSP中,可以使用include指令来包含其他jsp文件

         include的指令的语法如下:<%@ include file="文件路径"%>

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
        <h1>这是一个表头</h1>
    </body>
    </html>
    
    
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
        <%@ include file="header.jsp" %>
        <h1>这是一个主体部分</h1>
    </body>
    </html>

    page指令  主要用来设置页面的属性,比如导入包、指明输出的页面类型、控制session等

    <%@page import="java.util.Date"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
        <%
            Date date = new Date();
            System.out.println(date);
        %>
    
        <form action="${pageContext.request.contextPath}/login" method="post">
            <span>用户名:</span><input type="text" name="userName"> <span>密码:</span><input
                type="text" name="userPwd"> <input type="submit" value="提交">
        </form>
    </body>
    </html>

    taglib指令  用来引用标签库并设置标签库的前缀

    <%@page import="java.util.ArrayList"%>
    <%@page import="java.util.List"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
        <%
            List<String> list = new ArrayList<>();
            list.add("AA");
            list.add("BB");
            request.getSession().setAttribute("list", list);
        %>
        <c:forEach var="str" items="${list}">
            <table>
                <tr>
                    <td>${str}</td>
                </tr>
            </table>
        </c:forEach>
    </body>
    </html>

       4大作用域

    • pageContext  页面域,页面作用域仅限于当前页面对象
    • request  请求域,请求作用域是同一个请求之内,在页面跳转时,如果通过forward方式跳转,则forward目标页面仍然可以拿到request中的属性值
    • session  会话域,会话作用域是在一个会话的生命周期内,会话失效,则session中的数据也随之丢失
    • application  应用域,应用作用域是最大的,只要服务器不停止,则application对象就一直存在,并且为所有会话所共享
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
        <%
            pageContext.setAttribute("pageContext", "pageContext作用域");
            request.setAttribute("request", "request作用域");
            session.setAttribute("session", "session作用域");
            application.setAttribute("application", "application作用域");
            request.getRequestDispatcher("target.jsp").forward(request, response);
        %>
    </body>
    </html>
    
    
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
        <%
            out.println(pageContext.getAttribute("pageContext")+"<br>");
            out.println(request.getAttribute("request")+"<br>");
            out.println(session.getAttribute("session")+"<br>");
            out.println(application.getAttribute("application"));
        %>
    </body>
    </html>

       6个动作

         JSP中的六个动作:

    • <jsp:include > 动态包含
    • <jsp:forward> 请求转发
    • <jsp:param> 设置请求参数  
    • <jsp:useBean> 创建一个对象
    • <jsp:setProperty> 给指定的对象属性赋值
    • <jsp:getProperty> 取出指定对象的属性值

       9大内置对象

         JSP共有以下9大内置对象:

    • out  主要用来向客户端输出数据
    • request  来自客户端的请求经Servlet容器处理后,由request对象进行封装
    • response  它封闭了JSP 的响应,然后被发送到客户端以响应客户的请求
    • session  表示一个会话,用来保存用户信息,以便跟踪每个用户的状态
    • pageContext  本JSP的页面上下文
    • application  从servlet配置对象获得的servlet上下文
    • config  取得指定名称的初始化参数内容
    • page  指向当前jsp页面本身
    • exception  本JSP页面的异常对象。只有配置<%@page isErrorPage="true"%> 后才能使用

         配置Web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://xmlns.jcp.org/xml/ns/javaee"
        xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
        id="WebApp_ID" version="3.1">
        <display-name>JSP_Practise</display-name>
        <welcome-file-list>
            <welcome-file>index.jsp</welcome-file>
        </welcome-file-list>
        <servlet>
            <servlet-name>implicitServlet</servlet-name>
            <!--指定哪一个JSP页面配置成Servlet -->
            <jsp-file>/implicit.jsp</jsp-file>
    
            <init-param>
                <param-name>userName</param-name>
                <param-value>jtx</param-value>
            </init-param>
    
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>implicitServlet</servlet-name>
            <url-pattern>/implicitServlet.do</url-pattern>
        </servlet-mapping>
    </web-app>

         JSP页面

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
        <a
            href="${pageContext.request.contextPath}/implicitServlet.do?userPwd=123456">跳转测试九个内置对象</a>
    </body>
    </html>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@page isErrorPage="true"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
        <%
            out.println("out内置对象" + "<br>");
            request.setAttribute("request", "request内置对象");
            out.println(request.getAttribute("request") + "<br>");
    
            response.setCharacterEncoding("UTF-8");
            session.setAttribute("session", "session内置对象");
            out.println(session.getAttribute("session") + "<br>");
    
            application.setAttribute("application", "application内置对象");
            out.println(application.getAttribute("application") + "<br>");
    
            pageContext.setAttribute("pageContext", "pageContext内置对象");
            out.println(pageContext.getAttribute("pageContext") + "<br>");
    
            String userName = config.getInitParameter("userName");
        %>
        <h3><%=userName%></h3>
        <h3><%=request.getParameter("userPwd")%></h3>
    </body>
    </html>
  • 相关阅读:
    双camera景深计算
    解决单反出片发灰难题 教你让照片变得通透
    增强画面纵深感的几个小技巧
    双目视觉算法简介
    Android系统源代码的下载与编译
    android 7.0 (nougat)的编译优化-ninja
    神奇的图像处理算法
    【老戴说镜头】浅谈双摄镜头技术
    [Android编程心得] Camera(OpenCV)自动对焦和触摸对焦的实现
    关于DLL模块导出函数
  • 原文地址:https://www.cnblogs.com/fengfuwanliu/p/10523416.html
Copyright © 2011-2022 走看看