• Jsp技术介绍


    前言

    虽然在前后端分离的大潮流中,jsp技术已经是很少被使用了,其中一个重要的原因是jsp展示页面的时候过慢。但是,作为sun官方推出的技术,其中的思想和今天的前端技术十分的相似,很多前端框架都是基于这些思想的。所以,学习一下jsp还是十分有必要的。

    Jsp的原理

    简单来讲,使用jsp技术,可以将java的代码使用<%%>标签嵌入到html页面当中。
    但是,为什么可以这样用呢?
    比如说,现在有个页面叫做a.jsp。当你访问它的时候,服务器就会作出相应的响应,将jsp页面编译成Servlet实例,你不知道Servlet也没有什么关系,这玩意其实就是一个服务器的逻辑处理部分,能够把前端传过来的值进行处理并作出相应的响应。早期的web开发都是用的这个,但是这东西开发起来有些麻烦,已经渐渐使用的少了,但是作为基本内容,同样是十分的重要。
    注意:只有当客户端第一次访问服务器的时候才会进行编译,第二次再访问的时候,客户端就可以直接获取到生成后的页面了。

    Jsp的基本内容

    • Jsp注释
      注释语法:
    <%--这里写注释内容--%>
    • Jsp声明
      语法:
    <%!声明的内容%>

    请注意,声明中的内容最终会被转换成Servlet的成员变量和成员方法,所以在声明变量的时候就可以使用public、private等修饰符号,但是绝对不能使用abstract进行修饰,因为这样会导致Servlet也变成抽象类,就会造成无法实例化的情况。这样是绝对需要避免的。

    • Jsp输出
      输出语法:
    <%=输出的内容%>

    其实这条语句同样可以用out.println方法进行作为替换,但还是这样简单的一条语法较为简单。但是还有一点,使用输出语法的时候,java代码的末尾不需要加分号,其他的就需要加分号了。

    • Jsp脚本
      所谓的jsp脚本,其实就是将java语言写在<%%>这条语法中,来操作数据而已。
    <%
            //注册数据库
            Class.forName("com.mysql.jdbc.Driver");
            //获取连接
            Connection connection = DriverManager.getConnection(
                    "jdbc:mysql://localhost:3306/keyan","root","root");
            //创建一个语句
            Statement statement = connection.createStatement();
            //创建一个查询语句
            String sql = "SELECT * FROM e_person";
            //使用查询
            ResultSet rs = statement.executeQuery(sql);
            while(rs.next()){
    
    %>
        <table border="1" bgcolor="#ffd700" width="250px">
            <tr>
               <td>工号:<%rs.getString(1);%></td>
                <td>姓名:<%rs.getString(2);%></td>
            </tr>
        </table>
    
        <%}%>
    

    上面这段jsp脚本,其实就是常规的用java链接数据库的操作。
    注意:jsp脚本中的内容都是使用servlet中的方法进行输出的,所以,很显然在jsp脚本中是不能定义方法的。

    Jsp编译命令

    所谓的jsp编译命令,就是在通知服务器的jsp引擎,我需要什么东西、我有什么东西、、我是什么格式等等内容。
    比如说导入一个java包,设置一些属性等等操作。

    • page指令
    <%@ page 属性=""%>

    page指令又如下的属性,使用page指令就是操作这些属性而已。
    具体的属性以及操作,可以参考这篇博客:jsp中page的各个属性介绍
    还有一点,Jsp内建了异常处理机制,所以在脚本中就不需要对异常进行处理了。
    - include指令

    <%@ include file=""%>

    这个指令可以将另外一个文件加载到当前的页面之中。

    • taglib指令
      这条指令暂时不做介绍。

    Jsp的动作指令

    • forward指令:将页面转发到另外一个页面
    <jsp:forward page="roobtyan.jsp">
        <jsp:param name="roobtyan" value="go"/>
    </jsp:forward>

    访问当前网址的时候,会转发到roobtyan.jsp这个页面。并将参数name和他的值传到这个页面。

    • param指令 :用于传递参数,需要和支持参数的标签一起使用
      使用的方法如上面的例子所示。
    • include指令 :动态引入一个jsp页面
    <jsp:include page="roobtyan.jsp">
        <jsp:param />
    </jsp:include>

    请注意这里的include不同于编译指令中的include。这里的include是动态的导入,而之前的是静态导入。动态导入后,被导入的jsp页面的编译指令失去作用;而静态导入则不会出现这种情况。
    还有一点,使用这个引入的时候,也是可以加入参数的。

    • plugin指令 :下载javaBean到页面执行
      基本上已经不再使用了,这里就不介绍了。

    • useBean指令:实例化javaBean
      语法格式:

    <jsp:useBean id="name" class="className" scope="page"/>

    id是实例化的名称,class是javaBean(类)的名称,scope是可用范围,这个后面会介绍。

    • setProperty指令:设置javaBean实例属性值
      实例化的方式:
    <jsp:setProperty name="name" property="id" value="01"/>

    name是实力的名字,property为属性名称,value自然就是值了。

    • getProperty指令 :获取javaBean实例属性值
    <jsp:getProperty name="name" property="id"/>

    Jsp的内置对象

    • application对象:web应用本身
      作用:
    1.共享数据:将某个需要共享的值放到application中,就可以在可用范围内进行使用
    <%
        //设置参数
        application.setAttribute("name","roobtyan");
        //获取参数
        String name = application.getAttribute("name");
    %>
    
    2.获得web应用配置参数
    比如说,当前的xml文件中有如下配置参数,我要获取到它
    <context-param>
        <param-name>name</param-name>
        <param-value>roobtyan</value>
    </context-param>
    使用的方法如下
    String name = application.getInitParameter("name");
    • config对象
    web.xml配置文件如下:
    <servlet>
        <init-param>
            <param-name>name</param-name>
            <param-value>roobtyan</param-value>
        </init-param>
    </servlet>
    
    获取方法
    String name = config.getInitParameter("name")
    • exception对象
      注意:exception对象只有在errorPage中才起作用,也就是说这个对象只有在异常处理页面中才能起作用。虽然jsp脚本中的java代码无需做异常处理,但是在jsp声明中的代码必须做异常处理。
    • out对象
      这个对象就是用来输出内容的,和输出语法类似。
    <%
        out.println("哈哈哈");
    %>
    • pageContext对象
      这个对象代表的是页面上下文,用于访问jsp页面间的共享数据。
      这个对象又两个常用的方法:
    getAttribute(String name):取得page范围内的name属性
    getAttribute(String name,int scope):取得指定范围内的属性值,scope有如下常量
        PageContext.PAGE_SCOPE:page内(值:1)
        PageContext.SESSION_SCOPE:session内(值:3)
        PageContext.REQUEST_SCOPE:request内(值:2)
        PageContext.APPLICATION_SCOPE:application内(值:4//将变量放入指定内容内
    setAttribute(String name,value,scope)
    //默认存放在page中
    setAttribute(String name,value)
    • request对象
    常用方法:
    String getParameter(String paramName):获取请求参数的值
    Map getParameter():获取所有请求参数的名称和值
    Enumeration getParameterNames():获取所有请求参数名称组成的对象
    String[] getParameterValues(String name):获取name的所有值,如果又多个值的话
    
    //请求头相关的方法
    String getHeader(String name):获取请求头的值
    Enumeration<String> getHeaderNames():获取所有请求头的鸣横
    Enumeration<String> getHeaders(String name):获取指定请求头的多个值
    int getIntHeader(String name):获取指定请求头的值,并转换成整数值
    • response对象
      作用如下
    1.生成非字符响应:使用相关的类生成一张图片等
    2.重定向:
        response.sendRedirect("roobtyan.jsp");
        将页面重定向到roobtyan.jsp中
    注意:重定向和转发是有一定的区别的-->
        转发操作依然是一次请求,而重定向是二次请求
        转发操作所有的原页面的数据、参数等都存在,而重定向这些参数都会消失
        转发地址栏的URL不变,而重定向连URL都会改变
    3.增加Cookie
    //增加Cookie
    Cookie c = new Cookie("name","roobtyan");
    c.setMaxAge(24*3600);//设置Cookie存在的周期,不设置的话,关闭浏览器cookie就没了
    reponse.addCookie(c);
    
    //获取Cookie
    Cookie[] cookies = request.getCookie();
    • session对象
      通过我上面的介绍,可以看到,不论是request还是response、page等,都有可能会无法使用,而session解决了这个问题:在多个页面使用同一个变量
      session对象依然是使用键值对的方式存储的。
    //存储方法
    session.setAttribute("name",roobtyan);
    //获取方法
    session.getAttribute("name");

    结语

    我这一节要介绍的部分就这么多,其实JSP中还有一部分内容叫做自定义标签,由于现阶段并不怎么用,所以这部分内容就暂时不介绍了,有兴趣的小伙伴可以搜索一下。当然,还有一个使用jsp过程中常用的标签库,就是sun公司推出的jstl,这套库非常的强大,应该是属于必学的内容,就是一个简单的使用,教程链接在这里:https://www.yiibai.com/jsp/jstl.html

    感谢您的阅读,欢迎指正博客中存在的问题,也可以跟我联系,一起进步,一起交流!

    微信公众号:进击的程序狗
    邮箱:roobtyan@outlook.com
    个人博客:http://roobtyan.cn
    扫描下面的二维码关注我吧,你将收获到意想不到的东西哟……
    给大家准备了一份非常棒的JAVA的视频教程,从JAVA基础一直到JAVAWEB,还有非常强大的项目实战。
    就在我的微信公众号里,回复java就可查看,免费的呦!
    这里写图片描述

  • 相关阅读:
    寒假Day31:CSU1508地图的四着色bfs+dfs
    寒假Day32:链式前向星
    寒假Day30:HDU4507吉哥系列故事恨7不成妻数位dp
    寒假Day35:HTML表格+图像+超链接
    寒假Day35:2018蓝桥杯 B组
    寒假Day33:HTML入门
    寒假Day30:二叉树的遍历相关题型(求先序或后序、搜索树的判断)
    POJ 1177 Picture (线段树+离散化+扫描线) 详解
    MFC对话框中文出现乱码的解决方法
    如何枚举系统COM串口
  • 原文地址:https://www.cnblogs.com/roobtyan/p/9576706.html
Copyright © 2020-2023  润新知