Java Web:Jsp用法

一、page指令

用来设置转译成servlet文件时的参数:

  • contentType:表示浏览器解析响应信息的时候使用的编码和解析格式。
  • language:表示jsp要转译成的文件类型。
  • import:导入需要的jar包,多个包使用逗号分隔。
  • pageEncoding:设置页面的编码格式。
  • session:用来控制servlet中是否有session对象。
  • errorPage:当页面发生逻辑错误的时候,跳转的页面。
  • extends:要转译的servlet类继承的父类(包名+类名)
<%@ page contentType="text/html;charset=UTF-8" language="java" import="java.util.*" pageEncoding="utf-8" %>
<%@ page session="false" %>
<%@ page errorPage="1.jsp" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

</body>
</html>

看一下对应的源代码:
在这里插入图片描述

二、jsp页面嵌入java代码

1、局部代码块

可以将java代码跟页面展示的标签写入到一个jsp页面中,java代码转译成的servlet文件中,java代码跟输出是存在service方法中的。

缺点:代码可读性比较差,开发比较麻烦,一般不这样写

<%@ page contentType="text/html;charset=UTF-8" language="java" import="java.util.*"%>
<html>
<head>
    <title>Title</title>
</head>
<body>
<% int i = new Random().nextInt(10);
    if (i > 5) {
%>
我是大于5:<%=i%>
<%} else { %>
我是小于或等于5:<%=i%>
<% }%>
</body>
</html>

源码文件:
在这里插入图片描述

运行结果:
在这里插入图片描述

2、全局代码块

定义公共的方法的时候需要使用全局代码块使用<%! %>,生成的代码在servlet类中,调用的时候需要使用局部代码块。

<%@ page contentType="text/html;charset=UTF-8" language="java" import="java.util.*" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%!
    public void test() {
        System.out.println("全局代码块调用");
    }
%>
<% test();%>
</body>
</html>

对应的servlet源码:
在这里插入图片描述
在这里插入图片描述
输出结果:
在这里插入图片描述

3、脚本调用方式

使用<%= 直接调用变量和方法(必须有返回值)%>,注意:不能在变量或方法的后面添加“;”符号。

<%@ page contentType="text/html;charset=UTF-8" language="java" import="java.util.*" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%!
    String a = "我的";

    public String test() {
        return "全局代码块调用";
    }
%>
<%=a%>
<%=test()%>
</body>
</html>

编译生成的servlet源码:
在这里插入图片描述
在这里插入图片描述
输出结果:
在这里插入图片描述

三、include页面导入

1、静态导入

<%@ include file=“staticImport.jsp”%> file中填写的是java文件的相对路径,不会将静态导入的页面生成一个新的servlet文件,而是将两个文件合并。
优点:运行效率高
缺点:两个页面会耦合到一起,不利于维护,两个页面中不能存在相同名称的变量

staticImport.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
我是静态导入页面
</body>
</html>

page.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" import="java.util.*" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
我是原页面
<%@ include file="staticImport.jsp"%>
</body>
</html>

看一下生成的servlet源文件
在这里插入图片描述
两个文件合并了

接下来看一下运行效果:
在这里插入图片描述

2、动态导入

<jsp:include page=“dynamicImport.jsp”></jsp:include>,两个页面不会进行合并,分别生成自己的servlet文件,但是页面在最终展示的时候是合并在一起的。
有点:没有耦合,可以存在相同变量。

dynamicImport.jsp页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
我是动态导入页面
</body>
</html>

page.jsp页面

<%@ page contentType="text/html;charset=UTF-8" language="java" import="java.util.*" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
我是原页面
<jsp:include page="dynamicImport.jsp"></jsp:include>
</body>
</html>

看一下生成对应的servlet文件:
在这里插入图片描述
在这里插入图片描述
可以看到生成了两个独立的servlet文件。

运行效果:
在这里插入图片描述

四、forward请求转发

page.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" import="java.util.*" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
我是原页面
<jsp:forward page="foward.jsp">
    <jsp:param name="bobo" value="beijing"/>
</jsp:forward>
</body>
</html>

forward.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
我是转发的forward页面
<%=request.getParameter("bobo")%>
</body>
</html>

看一下运行效果:
在这里插入图片描述
注意:请求转发是服务器的转发,客户端的地址并不会改变。

五、九大内置对象

jsp页面在转译成其对应的servlet文件的时候,会自动声明一些对象,在jsp页面中可以直接使用。
注意:内置对象是在jsp页面中使用的,可以在局部代码中使用,但是不能在全局代码块中使用。

为什么不能在全局代码块中使用呢?

我们来看一下转译的servlet对象
在这里插入图片描述
可以看到,内置对象都是局部变量,当然不能在全局使用了。

  1. pageContext:表示页面的上下文的对象,封存了其它的内置对象,封存了当前页面的运行信息。注意:每一个页面都有一个对应的pageContext对象,伴随着当前页面的结束而结束。
  2. request:封装当前请求的数据,由tomcat创建,一次请求对应一个request对象。
  3. session:用来封装同一个用户的不同请求的共享数据,一次会话对应一个session对象。
  4. application:相当于ServletContext对象,一个web项目中只有一个对象,存储着所有用户的共享数据,从服务器启动到服务器结束。
  5. response:响应对象,用来响应请求数据,将处理结果返回给浏览器,可以进行重定向。
  6. page:代表当前jsp对象,跟java中的this指针类似。
  7. exception:异常对象,存储着当前运行的异常信息,必须在page指令中添加属性isErrorPage=true。
  8. config:相当于servletConfig对象,用来获取web.xnl中配置的数据,完成servlet的初始化操作。
  9. out:响应对象,jsp内部使用,带有缓存区的响应对象,效率更高于response。
发布了79 篇原创文章 · 获赞 147 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/u013277209/article/details/104918487