首页 > IT职业 > IT职场 > Java EE (JSP 入门)
问题提出?
Servlet 生成动态页面太麻烦了,其实大部分静态内容都是一行一行的输出
解决方案:
Java EE 提供了新的动态页面组件 JSP,可以更加便捷的生成动态网页
一个标准的 JSP 页面如下
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <!--前面两行是 Java 代码能够写在 HTML 中的特定格式,也是 JSP 中的指令格式。这里是 JSP 的指令格式 -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
这里就是 JSP 的静态文本结构,比Servlet 简单多
<% System.out.println("Hello World")%> <!--这里是专门写 Java 代码的地方,用于实现 HTML 不方便实现的功能,但是 JavaScript同样也可以实现 -->
</body>
</html>
特别强调,在 JSP 中, 动态部分是写 Java 代码为主<%%> 为脚本片段,<%=%> 为输出表达式
JSP 的执行流程主要分为三个部分:
首先我们编写好了一个 index.jsp 文件是打开游览器运行,这时候进行了如下过程
.metadata.pluginsorg.eclipse.wst.server.coretmp0workCatalinalocalhost
我们可以在 生成的 index_jsp.java 文件中下的 _jspService 文件下可以看到一行行我们在 HTML 中编写的代码,全部都在这个文件中变成了 out.println(xxx)。静态内容都是用 out 输出,和 Servlet中输出的是一样的,而且
所有的 Java代码都直接翻译到相对应的位置。
总结一句话,JSP 的本质就是一个 Servlet,不过是服务器翻译生成了 Java 类,不用我们编写而已。但是也并不是 Servlet 没有任何用了,它还可以用来写一些后台逻辑等问题
答:Servlet 生成动态页面比较繁琐,使用 JSP生成动态页面比较便捷,其中静态内容可以使用 HTML 生成
答:JSP 的执行过程 翻译—>编译—>实例化—>提供服务
JSP 的本质就是 Servlet,不过服务器是将 JSP 进行了翻译和编译,可以说 JSP 也是Java 类
知识点:
<%System.out.println("我是脚本元素")%>
<%=request.getRemoteAddr() %> 获取当前的端口
out.write("您的IP地址:");
out.print(request.getRemoteAddr() );
<%!
private String path="WEB-INF";
public void readPropertiesFile(){
}
public int max(int x,int y)
{
return a>b?a:b;
}
%>
这样在 jsp 其他页面中就可以直接通过方法名调用我们写的方法
<%=request.getRemoteAddr()%>中的 request 就是内置对象
问题1:不用声明,对象从哪里来的?
答1:服务器在翻译编译 JSP 时默认声明创建的,都在 JSPService 方法的参数和方法体内。
问题2:为什么可以直接使用呢(直接使用 request 方法)?
答2:我们所编写的 JSP 的所有内容,都被服务器翻译在内置对象声明创建后,因此可以直接用
问题3:有哪些内置对象?
答3:有 9个,比如 request、response、out、session等等。查看 JSP 翻译成的 Java 文件就很清楚了
问题一:
JSP 中的 Java 代码都可以直接写到脚本元素 <%%> 中
如果要向游览器输出动态内容,可以使用表达式元素 <%=%>
问题二:
JSP中有三种注释,分别是JSP注释、HTML注释、Java注释;
问题三:
<%!%>声明元素只能用来编写声明代码,翻译到Java类中,而不是_jspService方法中;
问题四:
内置对象指的是服务器已经声明并赋值的对象,可以直接使用
| 方法声明 | 方法描述 |
|---|---|
| void sendRedirect(java.lang.String location) | 响应重定向到location,相当于客户端重新请求location所在的资源; |
请求转发后,页面会重新加载到 显示的 jsp 页面
| 方法声明 | 方法描述 |
|---|---|
| forward(ServletRequest request, ServletResponse response) | 响应重定向到location,相当于客户端重新请求location所在的资源; |
| 方法声明 | 方法描述 |
|---|---|
| RequestDispatcher getRequestDispatcher(java.lang.String path) | |
| 使用path返回一个RequestDispatcher 对象 | |
| 方法声明 | 方法描述 |
|---|---|
| void setAttribute(java.lang.String name, java.lang.Object o) | 将任意类型对象设置为请求的属性,指定一个名字; |
| java.lang.Object getAttribute(java.lang.String name) | 通过属性的名字,获取属性的值; |
| void removeAttribute(java.lang.String name) | 通过属性的名字,删除属性; |
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/912/viewspace-2824042/ ,如需转载,请注明出处,否则将追究法律责任。