• JSP学习


    JSP学习
    JSP:运行在服务器端的语音,Java Server Pages
    可以响应客户端请求,可以动态生成HTML,XML或其他文档的web网页技术标准
    以java语音作为脚本语言的,jsp网页为整个服务器端的java库单元提供一个接口来服务HTTP的应用程序
    jsp文件的后缀名为:*.jsp,跨平台的,linux和windows均可运行
    动态网页开发技术,使用jsp标签在HTML网页中插入java代码
    标签通常以<%代码%>的形式
    jsp是一种java servlet,主要用于实现java web程序的用户界面部分
    jsp通过网页表单获取用户输入的数据,访问数据库及其他数据源,然后动态的创建网页
    Tomcat文件目录介绍:
    1)bin:二进制文件,tomcat的启动与关闭
    2)config:配置文件,最重要的是server.xml,更改端口号
    3)lib:库文件,tomcat所需要的jab包
    4)logs;日志文件
    5)temp:临时文件
    6)webapps:web应用程序,web应用放到此目录下浏览器可以直接访问
    7)work:编译后的class文件

    java工程文件结构:
    deployment descriptor:部署的描述
    web app libs:自己加的包可以放到里面
    build:编译之后的文件
    WebContent:放进写入的页面

    JSP处理:WEB服务器如何用jsp创建网页
    1):浏览器发送HTTP请求
    2):web识别到是一个jsp请求,并将该引擎传递给jsp引擎,通过URL或者.JSP文件来完成
    3):jsp引擎从磁盘中载入jsp文件,将他们转换为servlet,转化就是简单地将所有的模板文本改用print()语句,并将所有的jsp元素转化为java代码
    4):jsp引擎将servlet编译成可执行类,并将原始请求传递给servlet引擎
    5):web服务器的某个组件会调用servlet引擎,然后载入并执行servlet类。servlet产生HTML格式的输出,并将其内嵌于HTTP response中上交给web服务器
    6):web服务器以静态HTML的形式将HTTP response返回到浏览器中
    7):web浏览器处理HTTP response返回的HTML网页,就好象处理静态网页一样

    JSP生命周期,从创建到销毁的整个过程:编译、初始化、执行、销毁
    1)jsp编译:当浏览器发送jsp请求时,jsp引擎要检测是否需要编译文件。包括:解析jsp文件,将jsp转为servlet,编译servlet

    JSP语法
    脚本程序包含任意的java变量,表达式等
    <%%>
    或者
    <jsp:scriptlet>
    </jsp:scriptlet>

    任何文本,html标签,jsp元素必须写在脚本程序的外面

    JSP声明的语法格式:<%! 声明 %> 或者 <jsp:declaration></jsp:declaration>
    在jsp中必须先声明变量或方法之后才能使用

    JSP表达式:<%= 表达式 %> 或者<jsp:expression>表达式</jsp:expression>
    先被转化为字符串,然后插入到表达式出现的地方

    JSP注释:<%-- --%>

    JSP指令用来设置与整个jsp页面相关的属性,键值对的形式存在,并用逗号隔开
    指令的语法格式:<%@ directive attribute="true" %>
    三种指令标签
    1)<%@ page attribute="true"%>:定义页面的依赖属性,比如脚本语言,error页面,缓存需求。提供当前页面的使用说明
    buffer 指定out对象使用缓冲区的大小
    autoFlush 控制out对象的 缓存区
    contentType 指定当前JSP页面的MIME类型和字符编码
    errorPage 指定当JSP页面发生异常时需要转向的错误处理页面
    isErrorPage 指定当前页面是否可以作为另一个JSP页面的错误处理页面
    extends 指定servlet从哪一个类继承
    import 导入要使用的Java类
    info 定义JSP页面的描述信息
    isThreadSafe 指定对JSP页面的访问是否为线程安全
    language 定义JSP页面所用的脚本语言,默认是Java
    session 指定JSP页面是否使用session
    isELIgnored 指定是否执行EL表达式
    isScriptingEnabled 确定脚本元素能否被使用

    2)<%@ include file='文件相对的url地址' %>:包含其他文件,包含的文件类型可以是jsp文件,文本文件,xml文件

    3)<%@ taglib %>:引入标签库的定义

    JSP行为,动作元素,在请求阶段起作用
    JSP行为标签使用xml语法结构控制servlet引擎。他能够动态插入一个文件,重用JavaBean组件,引导用户去另一个页面等。严格遵守xml标准
    只有一种定义语法格式:
    <jsp:action_name attribute="true"/>
    javaBean是MVC模型中的model,在一般的模型中称数据层,用来设置数据的属性和行为,主要用来处理数据库和servlet之间的数据传输
    jsp:include 在当前页面中包含一些静态或动态资源,把指定文件插入正在生成的页面.与include指令在转换为servlet时引入文件;而动作指令是在页面被请求时加载文件
    <jsp:include page='file url' flush='true'/>

    jsp:useBean 寻找或初始化一个javaBean组件,用来加载将在jsp页面中使用的javabean.在类载入后,我们既可以通过 jsp:setProperty 和 jsp:getProperty 动作来修改和检索bean的属性。
    语法:<jsp:useBean id='name' class='package.class'/>
    class 指定Bean的完整包名。
    type 指定将引用该对象变量的类型。
    beanName 通过 java.beans.Beans 的 instantiate() 方法指定Bean的名字。


    jsp:setProperty 设置javaBean组件的值
    语法:
    <jsp:useBean id='myName' class='package.class'>
    <jsp:setProperty name='myName' property='someProperty>


    jsp:getProperty 将javaBean组件的值插入到output中
    jsp:forward 从一个jsp文件向另一个文件传递包含用户请求的request对象
    语法:<jsp:forward page='相对url地址'/>
    jsp:elemnet 动态创建一个xml元素
    jsp:attribute 定义动态创建的xml的属性
    jsp:body 定义动态创建的xml的主体
    jsp:text 用于封装模板数据
    常见的动作属性:
    id属性:动作元素的唯一标识符,可以在jsp页面中引用。动作元素创建的id值可以通过PageContext来调用
    scope属性:识别动作元素的生命周期,定义了相关联id对象的寿命,a:page,b:request,c:session,d:application

    JSP隐含对象
    requset:HTTPServletRequest类的实例,javax.servlet.http.HttpServletRequest 类的实例
    每当客户端请求一个jsp页面时,jsp引擎就会制造一个新的request对象来代表这个请求。提供了一系列方法获取HTTP请求头,cookies,HTTP请求方法等
    使用HTTPServeletRequest的getParameterNames()方法获得请求提交的所有参数名字,即获得所有变量的名称,该方法返回一个枚举
    一旦有了这个Enumeration,可以调用hasMoreElements()方法确定是否还有元素,以及使用nextElement()方法获得每个参数的名称
    使用getParameter(paramName)获得参数值

    response:HTTPServletResponse类的实例,javax.servlet.http.HttpServletResponse类的实例
    服务器在创建request对象时同时会创建用于响应这个客户端的response对象,处理HTTP头模块的接口,添加时间戳,添加新的cookies,状态码等

    out:PrintWriter类的实力,javax.servlet.jsp.JspWriter 类的实例,用于将结果输出的网页上,在response对象中写入内容

    session:HttpSession类的实例,javax.servlet.http.HttpSession 类的实例,跟踪各个客户端请求间的会话

    application:ServletContext类的实例,与应用上下文有关。这个对象在整个jsp页面的整个生存周期中都代表着这个jsp页面。通过向application添加属性,所有组成web应用的jsp页面都能访问这个属性

    config:ServletConfig类的实例
    pageContext:PageContext类的实例,提供对jsp页面所有对象以及命名空间的访问。javax.servlet.jsp.PageContext 类的实例,用来代表整个jsp页面。主要用来访问页面信息,过滤掉大部分实现细节。
    page:类似于java类中的this关键字
    exception:Exception类的对象,代表发送错误的jsp页面中对应的异常对象

    JSP字面量
    1):布尔值:false or true
    2):整形int:与java一样
    3):浮点型float:与java一样
    4):字符串String:单引号或双引号
    5):NUll

    JSP过滤器
    JSP和Servlet中的过滤器都是Java类
    过滤器可以动态的拦截请求和响应,以变换或使用包含在请求或响应中的信息
    过滤器是可以用于Servlet编程的Java类,可以实现的目的:
    1)在客户端的请求访问后端资源之前,拦截这些请求
    2)服务器的响应发送到客户端之前,处理这些响应
    各种类型的过滤器:
    身份验证过滤器
    数据压缩过滤器
    加密过滤器
    触发资源访问事件过滤器
    图像转换过滤器
    日志记录和审核过滤器
    MIME-TYPE链过滤器
    标记化过滤器

    过滤器通过web部署描述符(web.xml)的xml标签来声明,然后映射到您的应用程序的部署描述符中的Servlet名称或URL模式
    当web容器启动web应用程序时,它会为您在部署描述符中声明的每一个过滤器创建一个实例
    Filter的执行顺序和web.xml配置文件的配置顺序一致,一般把filter配置在所有servlet之前

    Servlet过滤器
    过滤器实现了javax.servlet.Filter接口的java类,定义了三个方法
    1.public void doFilter(ServletRequest, ServletResponse, FilterChain)
    完成实际的过滤操作,当客户端请求方法与过滤器设置匹配的URL时,Servlet首先调用过滤器的doFilter方法,FilterChain用户访问的后续过滤器
    2.public void init(FilterConfig filterConfig)
    web服务器启动时,web应用程序创建Filter的实例对象,并调用其init()方法,读取web.xml配置,完成初始化工作,为后续的用户请求做好拦截的准备工作
    3.public void destory()
    Servlet容器在销毁过滤器前调用该方法,释放资源

    FilterConfig的使用
    Filter的init方法中定义了一个filterConfig实例对象
    web.xml的配置信息如下:
    <filter>
    <filter-name>LoginFilter</filter-name>
    <filter-class>com.run.test.LoginFilter</filter-class>
    <init-para>
    <para-name>site</para-name>
    <para-value>book</para-value>
    </init-para>
    </filter>

    在init方法中使用FilterConfig对象获取参数:
    public void init(FilterConfig config){
    // 获取初始化参数
    String site= config.getInitParameter("site");

    }


    关于servlet的@WebServlet注解
    @WebServlet注解用于标注在一个继承了HttpServlet类之上,属于类级别的注解。
    用法形如:
    @WebServlet("/DisplayHeader1")


    // 扩展 HttpServlet 类
    public class DisplayHeader extends HttpServlet {


    // 处理 GET 方法请求的方法
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    其中 /DisplayHeader1 表示访问该servlet的 url 映射(地址)(此处为相对路径,即 “项目名称/DisplayHeader1” )。

    该注解的作用等价于 在web.xml中配置的该servlet的<servlet-mapping>元素中<url-pattern>的配置,比如:
    <servlet>
    <!-- 类名 -->
    <servlet-name>DisplayHeader</servlet-name>
    <!-- 所在的包 -->
    <servlet-class>test.DisplayHeader</servlet-class>
    </servlet>
    <servlet-mapping>
    <servlet-name>DisplayHeader</servlet-name>
    <!-- 访问的网址 -->
    <url-pattern>/DisplayHeader2</url-pattern>
    </servlet-mapping>
    此时,访问如下两个路径的效果是一样的,不互斥:
    http://localhost:8080/test/DisplayHeader1

    http://localhost:8080/test/DisplayHeader2
    此为在本机上进行的测试,其中test为项目名称。

    JSP过滤器实例,Servlet过滤器的实例,输出网站名和地址

    ————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
    // 导入必须的java库
    import javax.servlet.*;
    import java.util.*;

    //实现Filter类
    public class LoginFilter implements Filter{
    public void init(FilterConfig config) throws ServletException{
    // 获取初始化参数
    String site= config.getInitParameter("site");
    // 输出网站名称
    System.out.println("网站:wwww.baidu.com");
    }

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws java.io.IOException, ServletException {
    // 输出站点名称
    System.out.println("www.baidu.con");
    // 把请求传回过滤链
    chain.doFilter(request, response);
    }
    }

    ——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

    DisplayHeader.java的文件:
    //导入必需的 java 库
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.Enumeration;

    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    @WebServlet("/DisplayHeader")

    // 扩展HttpServlet
    public class DisplayHeader extends HttpServlet{
    // 处理get请求方法
    public void doGet(HttpServletRequest request, HttpServletResponse response){
    // 设置响应内容类型
    response.setContentType("text/html;charset=UTF-8");
    // 获得一只笔,在网页上画你想画的东西
    PrintWriter out = response.getWriter();
    String title = "Header";
    String docType =
    "<!DOCTYPE html> ";
    out.println(docType +
    "<html> " +
    "<head><meta charset="utf-8"><title>" + title + "</title></head> "+
    "<body bgcolor="#f0f0f0"> " +
    "<h1 align="center">" + title + "</h1> " +
    "<table width="100%" border="1" align="center"> " +
    "<tr bgcolor="#949494"> " +
    "<th>Header 名称</th><th>Header 值</th> "+
    "</tr> ");

    // 获取请求头参数名,得到一个枚举
    Enumeration headerNames = request.getHeaderNames();
    // 对枚举进行迭代
    while(headerNames.hasMorElements()){
    String paraName = (String)headerNames.nextElement();
    out.print("<tr><td>"+paraName+"</td> ");
    String paraValue = request.getHeader(paraName);
    out.print("<td>"+paraName+"</td></tr> ");
    }
    out.println("</table> </body></html>");
    }

    // 处理post方法请求
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
    doGet(request, resopnse);
    }
    }


    _______________________________________________________________________________________________________________________

    部署描述符web.xml的Servlet过滤器映射(Servlet Filter Mapping)
    定义一个过滤器,然后映射一个URL或Servlet。这与定义Servlet,然后映射到一个URL模式相同,例如:
    <web-app>
    <filter>
    <!-- 类名-->
    <filter-name>LoginFilter</filter-name>
    <!-- 包名-->
    <filter-class>com.runoob.test.LoginFilter</filter-class>
    <init>
    <para-name>site</para-name>
    <para-value>"网址"</para-value>
    </init>
    </filter>
    <filter-mapping>
    <filter-name>LoginFilter</filter-name>
    <!-- 拦截的网址, 拦截所有的servlet-->
    <url-pattern>/*</url-pattern>
    </filter-mapping>

    <servlet>
    <!-- 类名-->
    <servlet-name>DisplayHeader</servlet-name>
    <!-- 包名-->
    <servlet-class>com.runoob.test.DisplayHeader</servlet-class>
    </servlet>
    <servlet-mapping>
    <!-- 类名-->
    <servlet-name>DisplayHeader</servlet-name>
    <!-- 要访问的地址-->
    <url-pattern>/TomcatTest/Displayheader</url-pattern>
    </servlet-mapping>
    </web-app>

    web.xml配置各节点说明
    <filter>指定一个过滤器。
    <filter-name>用于为过滤器指定一个名字,该元素的内容不能为空。
    <filter-class>元素用于指定过滤器的完整的限定类名。
    <init-param>元素用于为过滤器指定初始化参数,它的子元素<param-name>指定参数的名字,<param-value>指定参数的值。
    在过滤器中,可以使用FilterConfig接口对象来访问初始化参数。
    <filter-mapping>元素用于设置一个 Filter 所负责拦截的资源。一个Filter拦截的资源可通过两种方式来指定:Servlet 名称和资源访问的请求路径
    <filter-name>子元素用于设置filter的注册名称。该值必须是在<filter>元素中声明过的过滤器的名字
    <url-pattern>设置 filter 所拦截的请求路径(过滤器关联的URL样式)
    <servlet-name>指定过滤器所拦截的Servlet名称。
    <dispatcher>指定过滤器所拦截的资源被 Servlet 容器调用的方式,可以是REQUEST,INCLUDE,FORWARD和ERROR之一,默认REQUEST。用户可以设置多个<dispatcher>子元素用来指定 Filter 对资源的多种调用方式进行拦截。
    <dispatcher>子元素可以设置的值及其意义
    REQUEST:当用户直接访问页面时,Web容器将会调用过滤器。如果目标资源是通过RequestDispatcher的include()或forward()方法访问时,那么该过滤器就不会被调用。
    INCLUDE:如果目标资源是通过RequestDispatcher的include()方法访问时,那么该过滤器将被调用。除此之外,该过滤器不会被调用。
    FORWARD:如果目标资源是通过RequestDispatcher的forward()方法访问时,那么该过滤器将被调用,除此之外,该过滤器不会被调用。
    ERROR:如果目标资源是通过声明式异常处理机制调用时,那么该过滤器将被调用。除此之外,过滤器不会被调用。

  • 相关阅读:
    【转】性能测试分享---java vuser协议(2)---LoadRunner篇
    【转】性能测试分享---java协议(1)------jemter篇
    windows下怎么修改mysql密码
    linux下怎么修改mysql的字符集编码默认分类
    java使用Redis2--保存对象
    java使用Redis1--安装与简单使用
    java实现hash一致性算法
    Redis Sentinel初体验
    Redis持久化实践及灾难恢复模拟
    Redis学习笔记
  • 原文地址:https://www.cnblogs.com/demo-deng/p/8027948.html
Copyright © 2020-2023  润新知