JSP/Servlet相关技术详解--那些已恍惚的根本知识

来源:互联网 浏览:- 2020-03-30 10:57:40
《爱读书系列》,自己会把技术学习中浏览过的册本经由过程条记和总结的体例与粉丝分享,此系列是在原著根本上
收录和总结而来,希望年夜家获得更多的支撑。

本书柬介

书名为《轻量级JavaEE企业利用实战》,是自己在学习JavaEE框架的时候浏览的第一本书,本书对框架及相关根本知识报告的比较详细和浅近,适合初学者和需求全面部会JavaEE知识的人群。

本文内容为第二章的第1部分内容

WEB利用和web.xml

1.构建WEB利用

利用IDE建立项目?当然可以。但我们明天来学学不消IDE若何建立一个WEB利用。步调以下:

(1)在肆意目次下新建一个文件夹作为利用根目次,笔者以webDemo文件夹建立一个web利用

(2)在利用根目次下建立一个WEB-INF文件夹(辨别年夜小写)

(3)进入Tomcat中找就任何一个默许WEB利用,将其WEB-INF下的web.xml文件复制到本身所建立的对应文件夹下

(4)建设web.xml文件(PS:相关建设我会另写文章讲授)

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1" metadata-complete="true">
</web-app>

(5)在WEB-INF目次下,新建两个文件夹:classes和lib,这两个文件夹都是用于保存WEB利用所需的Java类文件,辨别是classes保存单个class文件;lib保存打包后的JAR文件

(6)现已建立了一个空WEB利用。将该利用复制到Tomcat的webapps途径下

(7)将JSP文件放在WEB利用的根途径下,便可以经由过程浏览器来拜候这些页面了,URL途径:http://localhost:port/webDemo/*.jsp

如上所述,WEB利用的目次布局以下:
<webDemo>
|--WEB-INF
| |--classes
| |--lib
| |--web.xml
|--*.jsp

2.建设描述符web.xml

web.xml文件被称为建设描述符,在Servlet2.5之前,WEB利用必须包含一个web.xml文件,且必须放在WEB-INF途径下。WEB-INF是个特别的文件夹,WEB容器会包含该文件夹下的内容,但浏览器无法拜候WEB-INF下的任何内容。

PS:对Servlet3.0标准而言,web.xml不再是必须的,凡是是还是建议保存

web.xml可以实现以下的所有建设服从

(1)建设JSP

(2)建设Servlet

(3)建设Listener

(4)建设Filter

(5)建设标签库

(6)建设JSP属性

(7)建设JAAS受权认证

(8)建设资本援引

(9)建设WEB利用首页

JSP基来源根底理


  • JSP文件必须在JSP办事器内运行
  • JSP文件必老天生Servlet才气履行
  • 每个JSP页面的第一个拜候者速率很慢,因为必须等候JSP编译成Servlet
  • JSP页面的拜候者不必装置任何客户端,乃至不需求可以运行Java的运行环境,因为JSP页面运送到客户端的是标准HTML页面
  • JSP页面内容包含两个部分:静态部分(HTML标签及静态内容)、静态部分(受Java法度节制的内容)
  • JSP页面会被Tomcat在work编译成两个文件:*_jsp.java,*_jsp.class。此文件是一个标准Servlet类
  • JSP注释

    JSP注释不会输入到客户端,格局以下:

    <%-- 注释内容 --%>

    JSP声明

    JSP声明用于声明变量和体例

    <%! 声明部分 %>

    JSP输入

    <%=表达式%>

    PS: 表达式后不克不及有分号,结果同即是out.println

    JSP脚本

    <% 代码 %>

    PS:JSP脚本中的内容,将作为Servlet中service体例的体例体。是以在此中声明的变量为部分变量,并且不成以在脚本中定义体例

    JSP的编译指令(3个)

    编译指令格局以下

    <%@ 编译指令 属性名="属性值"...%>

    1.page:是针对以后页面的指令,位于页面顶端

    属性申明:

    language:声明JSP页面利用的脚本说话,默许java
    extends:指定JSP编译后的类所继承的父类或接口
    import:用来导入包,默许导入的包有:java.lang.*,javax.servlet.*,javax.servlet.jsp.*,javax.serlvet.http.*
    session:设置以后页面是不是需求session
    buffer:指定输入缓冲区年夜小。输入缓冲区用于JSP外部工具out,默许8KB
    autoFlush:当输入缓冲区即将溢出时,是不是需求强迫输入缓冲区的内容。true一般输入,false产生异常
    info:设置JSP法度申明,经由过程Servlet.getServletInfo()获得该值
    errorPage:指定错误措置页面。如果页面报错,且未做异常措置,则跳转错误措置页面
    isErrorPage:设置本JSP页面是不是为错误措置页面
    contentType:用于设置页面的文件格局和编码字符集。默许MIME范例为text/html;默许字符集为:ISO-8859-1
    pageEncoding:设置页面的编码字符集

    2.include:指定包含另外一个页面

    语法以下:

    <%@include file="相对途径"%>

    include指令可以将外部文件嵌入以后页面,这是静态include语句,它会把目标页面的其他编译指令也包含出去。即先把目标页面的代码融入以后页面后再编译。

    PS:如果被包含的页面需求常常改变,建议利用<jsp:include>,它是静态include语句

    3.taglib:用户定义和拜候自定义标签

    JSP的行动指令(7个)

    jsp:forward:履行页面转向,将请求转发到下一个页面
    jsp:param:用于通报参数,必须与其他支撑参数的标签一路利用
    jsp:include:静态导入JSP页面
    jsp:plugin:用于下载JavaBean或Applet到客户端履行
    jsp:userBean:建立JavaBean实例
    jsp:setProperty:设置JavaBean实例的属性值
    jsp:getProperty:获得JavaBean实例的属性值

    1.forward指令

    用于页面转发,可转发到静态页面、静态页面或Servlet。转发后的请求参数不会丧失。

    语法以下:

    <jsp:forward page="相对途径">
    <jsp:param name="key" value="value"/>
    </jsp:forward>

    转发时可经由过程param指令通报参数,并经由过程以下体例获得值:

    <%=request.getParameter("key")%>

    2.include指令

    静态的页面导入号令,它不会导入被包含页面的编译指令,仅将被导入页面的body内容拔出本页。

    语法以下:

    <jsp:include page="相对途径" flush="true">
    <jsp:param name="key" value="value"/>
    </jsp:include>

    flush属性设置输入缓存是不是转移到被导入文件中,true则包含在被导入文件中,false则包含在原文件中。

    静态导入和静态导入的辨别
    (1)静态导入是将被导入页面的代码完整融入,两个页面畅通领悟成一个Servlet;而静态导入则在Servlet中利用include体例来引入被导入页面的内容
    (2)静态导入时被导入页面的编译指令会起感化;而静态导入时被导入页面的编译指令则落空感化
    (3)静态导入可以通报分外的参数

    3.useBean、setProperty、getProperty指令

    这三个指令都是JavaBean相关指令。在我们将反复代码定义成Java类的体例后,这三个指令可用于调用。

    useBean语法以下:

    <jsp:userBean id="name" class="classname" scope="page|request|session|application"/>
    id:是JavaBean的实例名
    class:指定JavaBean的实现类
    scope:指定JavaBean实例的感化范围,page(以后页面有效)、request(本主请求有效)、session(本次会话有效)、application(以后利用一向有效)

    setProperty语法以下:

    <jsp:setProperty name="BeanName" property="propertyName" value="value"/>

    getProperty语法以下:

    <jsp:getProperty name="BeanName" property="propertyName"/>

    举个例子,以下图:

    4.param指令

    param指令无法伶仃利用,可以与以下指令连络利用:

    (1)jsp:include

    (2)jsp:forward

    (3)jsp:plugin

    JSP内置工具(9个)

    application:ServletContext实例,代表所属WEB利用本身
    config:ServletConfig实例,代表利用建设信息
    exception:Throwable实例,代表其他页面的异常,只需以后页面是错误措置页面时可用
    out:JspWriter实例,代表页面输入流,用于输入内容
    page:代表页面本身,及天生的Servlet类
    pageContext:PageContext实例,代表页面上下文,可拜候页面的共享数据
    request:HttpServletRequest实例,该工具封装了一主要乞降请求参数
    response:HttpServletResponse实例,代表办事器呼应
    session:HttpSession实例,代表一次会话。当浏览器与站点建立连接时,会话开端;封闭浏览器时会话结束

    PS:JSP内置工具要么是Servlet体例的部分变量,要么是体例的形参,所以我们可以直接在脚本中调用他们。

    1.application工具

    application两个感化

    • 在全部WEB利用中让多个JSP、Servlet之间共享数据(利用setAttribute,getAttribute)
    • 拜候WEB利用的建设参数(利用getInitParameter)

    2.config工具

    用于Servlet获得建设参数(利用getInitParameter)

    3.exception工具

    exception工具仅在异常措置页面有效

    4.pageContext工具

    利用pageContext可以拜候page、request、session、application范围的变量

    getAttribute(String name):获得page范围内的属性
    getAttribute(String name, int scope):获得指定范围内的属性,
    scope包含PageContext.PAGE_SCOPE、PageContext.REQUEST_SCOPE、PageContext.SESSION_SCOPE、PageContext.APPLICATION_SCOPE
    setAttribute(String name, String value):设置page范围内的属性
    setAttribute(String name, String value, int scope):获得制定范围内的属性

    利用pageContext可以获得其他内置工具

    getRequest():获得request工具
    getResponse():获得response工具
    getServletConfig():获得config工具
    getServletContext():获得application工具
    getSession():获得session工具

    5.request工具

    (1)获得请求头/请求参数

    getParameter(String paramName):获得请求参数的值
    getParameterMap():获得所有请求参数名和值构成的Map工具
    getparameterValues(String name):获得请求参数多个值时所构成的数组
    getHeader(String name):获得指定的请求头的值

    GET与POST

    GET体例的请求:GET请求会将请求参数的名和值转换成字符串,并附加在原URL以后,URL和参数之间以"?"分开,多个参数之间以"&"分开,且请求传送的数据量较小,一般不年夜于2KB

    POST体例的请求:POST请求参数的年夜小不受限定,常常取决于办事器的限定,POST传输的数据量比GET传输的数据量年夜,且请求参数放在HTTP HEADER中传输,宁静性相对较高

    PS:

    (1)不是每个表单域都会天生请求参数,只需带有name属性的表单域才行

    (2)每个有name属性的表单域对应一个请求参数

    (3)如果有对个表单域有不异的name属性,则多个表单域只天生一个请求参数,且该参数有多个值

    (4)表单域的name属性为请求参数名,value属性为请求参数值

    如果表单域设置了disabled="disabled"属性,则不会天生请求参数

    (2)操纵request范围的属性

    setAttribute(String name, Object value):设置request范围属性
    getAttribute(String name):获得request范围属性

    (3)履行forward或include

    getRequestDispatcher(String path).forward(request, response):跳转页面
    getRequestDispatcher(String path).include(request, response):包含页面

    6.response工具

    (1)response呼应天生非字符呼应

    getOutputStream():获得输入流

    (2)重定向

    sendRedirect("path"):重定向,重定向会丧失所有请求参数

    forward与redirect对比

    (3)增加cookie

    addCookie(Cookie cookie):增加cookie
    getCookies():获得cookie数组

    7.session工具

    seesion代表一次用户会话,即客户端浏览器连接办事器开端,到封闭浏览器结束。session属性可在一次会话内涵多个页面间共享数据。session属性值必须是可序列化的Java工具。

    setAttribute(String attName, Object attValue):设置session属性值
    getAttribute(String attName):获得session属性值

    争议与思虑

    我们平常开辟常常利用浏览器来拜候WEB利用,IE、360、火狐、谷歌你感觉哪个浏览器最好用?为甚么呢?评论区留言吧!

    保举浏览:都城热线

    <ins id='ZVLCPZgI'><l></l></ins><xmp id='Tlg'><bdo></bdo></xmp><ol id='hoTxTr'><label></label></ol><marquee id='wShZ'><samp></samp></marquee>
    <strike></strike>
      <code id='FfTSywv'><strong></strong></code><sup id='uK'><font></font></sup><sup id='sOTe'><bdo></bdo></sup><thead id='TAtCcinO'><small></small></thead><cite id='IKIvVe'><tt></tt></cite>
        <dfn id='rjbGT'><thead></thead></dfn><center id='pKls'><xmp></xmp></center>
        <cite id='oXyRqpNi'><big></big></cite>
          <base id='OEtJC'><u></u></base>
            <listing id='QRNcs'><pre></pre></listing><sup id='BjoBibv'><code></code></sup>
              <option id='kmQZ'><sup></sup></option><b id='gXraVLN'><basefont></basefont></b><dir></dir>