欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JSP学习笔记(1)——Jsp指令、动作元素和内置对象

程序员文章站 2022-04-09 20:06:59
简单来说,javaweb技术就是让服务器端能够执行Java代码,之后返回数据给客户端(浏览器)让客户端显示数据 jsp页面中可以嵌套java代码(java小脚本)和嵌套Web前端(html,css,js)来显示数据。 服务器解析一个jsp,其实就是把jsp中的java代码编译并执行,之后再返回一个S ......

简单来说,javaweb技术就是让服务器端能够执行java代码,之后返回数据给客户端(浏览器)让客户端显示数据

jsp页面中可以嵌套java代码(java小脚本)和嵌套web前端(html,css,js)来显示数据。

服务器解析一个jsp,其实就是把jsp中的java代码编译并执行,之后再返回一个string,string包含着html等web前端数据,浏览器(客户端)就可以像平常打开静态网页一样,接受静态网页数据(html),解析并显示给用户。

  1. 指令 <%@ %>
  2. 脚本 <% %>
  3. 声明 <%! %>
  4. 表达式 <%= %>
  5. 注释 <%-- --%> 服务器端才能看见,客户端看不见
<%
    //这里面可以写java代码
%>

<%!
    //这里面只能写变量申明,不能写java代码
%>

//一般这里与html标签联用,输出数据
<%= %>

指令:

page指令

page指令,主要用于jsp页面的设置

属性 描述
contenttype 编码(设置为utf-8,防止中文出现乱码显示)
language 定义语言(java)
errorpage="xx.jsp" 当前页面出现异常,跳转到处理异常的jsp页面
iserrorpage="true" true,即为当前的页面是处理错误的页面,可以使用隐式对象获取到信息excetion.getmessage()

下面的代码,就是index.jsp页面出现错误之后,就会跳转到处理异常的界面catch_error.jsp

index.jsp

<%@ page contenttype="text/html;charset=utf-8" language="java" errorpage="catch_error.jsp" %>
<html>
  <head>
    <title>fitsr jsp</title>
  </head>
  <body>
<%
  int a=10;
  int result = a/0;
  out.write("<h1>"+result+"</h1>");
%>
  </body>
</html>
<%@ page contenttype="text/html;charset=utf-8" language="java" iserrorpage="true" %>
<html>
<head>
    <title>处理异常</title>
</head>
<body>
<%
    string message = exception.getmessage();
    out.write("<h1>错误信息:" + message + "</h1>");
%>
</body>
</html>

include指令

包含其他文件,如引入一个jsp页面或者是html页面

target指令

用来引入标签库的定义(jstl标签),后面补充。

jsp动作元素(jsp行为)

说明

本质上,就是定义的一些函数。
jsp行为标签使用xml语法结构来控制servlet引擎。它能够动态插入一个文件,重用javabean组件,引导用户去另一个页面,为java插件产生相关的html等等.

格式

<jsp:action_name attribute="value" />

常用

语法 描述
jsp:include 用于在当前页面中包含静态或动态资源
jsp:usebean 寻找和初始化一个javabean组件
jsp:setproperty 设置 javabean组件的值
jsp:getproperty 将 javabean组件的值插入到 output中
jsp:forward 从一个jsp文件向另一个文件传递一个包含用户请求的request对象
jsp:plugin 用于在生成的html页面中包含applet和javabean对象
jsp:element 动态创建一个xml元素
jsp:attribute 定义动态创建的xml元素的属性
jsp:body 定义动态创建的xml元素的主体
jsp:text 用于封装模板数据

参考地址 菜鸟 jsp动作元素

jsp:userbean
创建一个bean实例,如果存在就不会创建

<jsp:userbean id="" class="" scope="">
</jsp:userbean>

之后可以在java脚本中,使用定义的bean,id就是变量名

<jsp:setproperty name="" property="" value="" >
</jsp:setproperty>

name是变量名(上面jsp:userbean标签的id),value中的数值会自动转型为属性对应的类型

<!-- 相当于请求转发 -->
<jsp:forword page="">
</jsp:forword>
<!-- 传参-->
<jsp:forword page="">
    <jsp:param name="" value=""/>
</jsp:forword>

jsp:include 和指令<% @include 的区别

指令<% @include 的jsp页面不会被单独的转译成java文件和编译成class文件,不允许存在相同的变量
jsp:include 的jsp页面会被单独地转译成java文件和编译成class文件,允许存在相同的变量

内置对象(隐式对象)

九大隐式对象

对象 描述
request httpservletrequest类的实例
response httpservletresponse类的实例
out printwriter类的实例,用于把结果输出至网页上
session httpsession类的实例
application servletcontext类的实例,与应用上下文有关
config servletconfig类的实例
pagecontext pagecontext类的实例,提供对jsp页面所有对象以及命名空间的访问
page 类似于java类中的this关键字
exception exception类的对象,代表发生错误的jsp页面中对应的异常对象

这里面九大隐式对象,常用的就是前四个。可以直接在jsp中的脚本,声明和表达式中使用(<% %> <%= %>)

request对象

(浏览器)客户端发出请求,就会创建一个request对象

request对象是javax.servlet.http.httpservletrequest 类的实例

每当客户端请求一个jsp页面时,jsp引擎就会制造一个新的request对象来代表这个请求。

request对象提供了一系列方法来获取http头信息,cookies,http方法等等。

rquest还可以获得表单提交之后传来的参数值

//获得表单中的name="username"的标签内容
string name = request.getparameter("username");
//设置编码,防止出现中文乱码
request.setcharacterencoding("utf-8");

参考链接 jsp 客户端请求

response对象

response对象是javax.servlet.http.httpservletresponse类的实例。

当服务器创建request对象时会同时创建用于响应这个客户端的response对象。

response对象也定义了处理http头模块的接口。通过这个对象,开发者们可以添加新的cookies,时间戳,http状态码等等。

out对象

out对象是 javax.servlet.jsp.jspwriter 类的实例,用来在response对象中写入内容或者是当前页面直接输出内容

某个jsp文件,下面的代码就是表示该jsp文件打开之后,浏览器会显示hello world

<%
    out.print("hello world");
    //输出一级标题
    out.print("<h1>hello</h1>");
    //实现换行
    out.print("hello<br>");
%>

虽然有println方法,但是换行在输出后面使用<br>标签

服务端可以使用out对象的write或者是print方法,向客户端返回数据

session对象

每当创建一个会话(即浏览器访问当前网站,不关闭浏览器就是一个会话),就会产生一个session对象

一般存放用户登录信息,重定向之后的session存放的数据不会丢失

web.xml中设置session的有效时长,默认是30分钟

<session-config>
    <timeout>单位为9分钟
</session-config>
//session过期,就会新建,否则,就返回存在的session
getsenssion(true)

作用域

pagecontext,request,session,application都可以通过setattribute和getattribute方法来存放和取出数据

pagecontetxt表示数据只能存放在当前页面,打开了新页面就无法获得之前存放的数据

request比pagecontext的范围稍大一些,可以在新页面获取之前的存放的数据,不过,只能是请求转发的新页面才能获得。

session和application范围较大,存放的数据几乎全部页面都可以取出来。

request.setattribute("user",user);
object o = request.getattribute("user");//取出来需要强制转型