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就可查看,免费的呦!
这里写图片描述

转载于:https://www.cnblogs.com/roobtyan/p/9576706.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值