前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Jsp技术介绍

Jsp技术介绍

作者头像
roobtyan
发布2018-06-04 17:48:49
1.4K0
发布2018-06-04 17:48:49
举报

前言

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

Jsp的原理

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

Jsp的基本内容

  • Jsp注释 注释语法:
代码语言:javascript
复制
<%--这里写注释内容--%>
  • Jsp声明 语法:
代码语言:javascript
复制
<%!声明的内容%>

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

  • Jsp输出 输出语法:
代码语言:javascript
复制
<%=输出的内容%>

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

  • Jsp脚本 所谓的jsp脚本,其实就是将java语言写在<%%>这条语法中,来操作数据而已。
代码语言:javascript
复制
<%
        //注册数据库
        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指令
代码语言:javascript
复制
<%@ page 属性=""%>

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

代码语言:javascript
复制
<%@ include file=""%>

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

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

Jsp的动作指令

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

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

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

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

  • plugin指令 :下载javaBean到页面执行 基本上已经不再使用了,这里就不介绍了。
  • useBean指令:实例化javaBean 语法格式:
代码语言:javascript
复制
<jsp:useBean id="name" class="className" scope="page"/>

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

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

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

  • getProperty指令 :获取javaBean实例属性值
代码语言:javascript
复制
<jsp:getProperty name="name" property="id"/>

Jsp的内置对象

  • application对象:web应用本身 作用:
代码语言:javascript
复制
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对象
代码语言:javascript
复制
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对象 这个对象就是用来输出内容的,和输出语法类似。
代码语言:javascript
复制
<%
    out.println("哈哈哈");
%>
  • pageContext对象 这个对象代表的是页面上下文,用于访问jsp页面间的共享数据。 这个对象又两个常用的方法:
代码语言:javascript
复制
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对象
代码语言:javascript
复制
常用方法:
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对象 作用如下
代码语言:javascript
复制
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对象依然是使用键值对的方式存储的。
代码语言:javascript
复制
//存储方法
session.setAttribute("name",roobtyan);
//获取方法
session.getAttribute("name");

结语

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

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

微信公众号:进击的程序狗 邮箱:roobtyan@outlook.com 个人博客:http://roobtyan.cn

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年03月25日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • Jsp的原理
  • Jsp的基本内容
  • Jsp编译命令
  • Jsp的动作指令
  • Jsp的内置对象
  • 结语
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档