没有合适的资源?快使用搜索试试~ 我知道了~
一、开发模式介绍 模式在开发过程中总结出的“套路”,总结出的一套约定俗成的设计模式。 Servlet是JavaEE开发中一种动态web资源开发技术 ,但是在做输出响应页面时及其繁琐 。 从软件工程的层面来看,开发一个系统,不仅是为了要完成业务目标。同时,还应该关注实现的 过程和在实现过程中所采用的方式方法。 关注点分离与分层 高内聚、低耦合 可维护性、可扩展性、可重用性 二、JSP动态网页开发模式 1、JSP介绍 JSP(Java Server Pages)是一种动态网页开发技术。JSP 文件就是在传统的 HTML 文件中插入 Java 代 码和 JSP 标签,后缀名为 .jsp 。 JSP 与 PHP、ASP、ASP.NET 等语言类似,都运行在服务端。通常返回给客户端的就是一个 HTML 文 件,因此只要有浏览器就能查看 JSP 页面。 JSP 使用 JSP 标签在 HTML 网页中插入 Java 代码,标签通常以 <% 开头,以 %> 结束。JSP 标签有多种 功能,比如访问数据库和 JavaBean 组件等,还可以在不同的网页之间传递和共享信息。 JSP 是 Servlet 的
资源推荐
资源详情
资源评论
一、开发模式介绍
模式在开发过程中总结出的“套路”,总结出的一套约定俗成的设计模式。
Servlet是JavaEE开发中一种动态web资源开发技术 ,但是在做输出响应页面时及其繁琐 。
从软件工程的层面来看,开发一个系统,不仅是为了要完成业务目标。同时,还应该关注实现的
过程和在实现过程中所采用的方式方法。
关注点分离与分层
高内聚、低耦合
可维护性、可扩展性、可重用性
二、JSP动态网页开发模式
1、JSP介绍
JSP(Java Server Pages)是一种动态网页开发技术。JSP 文件就是在传统的 HTML 文件中插入 Java 代
码和 JSP 标签,后缀名为
.jsp
。
JSP 与 PHP、ASP、ASP.NET 等语言类似,都运行在服务端。通常返回给客户端的就是一个 HTML 文
件,因此只要有浏览器就能查看 JSP 页面。
JSP 使用 JSP 标签在 HTML 网页中插入 Java 代码,标签通常以
<%
开头,以
%>
结束。JSP 标签有多种
功能,比如访问数据库和 JavaBean 组件等,还可以在不同的网页之间传递和共享信息。
JSP 是 Servlet 的扩展,我们可以在 JSP 中使用 Servlet 的所有功能。另外,JSP 还提供了一些其他功
能,例如 EL 表达式、自定义标签等。
JSP 依赖于 Servlet,用户访问 JSP 页面时,JSP 代码会被翻译成 Servlet 代码,最终,以字符串的形式
向外输出 HTML 代码。所以,JSP 只是在 Servlet 的基础上做了进一步封装。
JSP 通过表单获取用户输入的数据、访问数据库或其它数据源生成动态的 Web 内容。
JSP 具有以下特点:
JSP 具有 Servlet 的所有优点,例如 JSP 文件跨平台,即一次编写,处处运行。
JSP 比 CGI 性能更加优越,因为 JSP 可以直接在 HTML 中嵌入标签,而 CGI 需要单独引用 CGI 文
件。
JSP 比 Servlet 更易于维护,JSP 将业务逻辑与网页设计分离,使其更加灵活。
使用 JSP,Web 开发人员可以更注重于网页设计,Java 开发人员可以更注重于逻辑处理。
2、JSP优点
易于维护
相对于 Servlet 来说,JSP 更易于管理。在 JSP 中,我们可以轻松地将业务逻辑与网页设计分开,
而在 Servlet 技术中,它们是混合在一起的。
快速开发:无需重新编译和部署
JSP 页面被修改后,不需要重新编译和部署项目。而 Servlet 被修改后,需要重新编译和部署。
代码简洁
在 JSP 中,我们可以使用 EL、JSTL、自定义标签、隐式对象等,能够有效的减少代码。
3、运行原理
浏览器向服务器发请求,不管访问的是什么资源,其实都是在访问Servlet,所以当访问一个jsp页面
时,其实也是在访问一个Servlet,服务器在执行jsp的时候,首先把jsp翻译成一个Servlet,所以我们访
问jsp时,其实不是在访问jsp,而是在访问jsp翻译过后的那个Servlet。
例如下面的代码:index.jsp
当我们通过浏览器访问index.jsp时,服务器首先将index.jsp翻译成一个index_jsp.class,在Tomcat服
务器的
work\Catalina\localhost\
项
目
名
\org\apache\jsp
目录下可以看到index_jsp.class的源代
码文件index_jsp.java。代码如下:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>查询页面</title>
</head>
<body>
<h1>计算结果:<%=1 + 2%></h1>
<%
for (int i = 0; i < 10; i++) {
%>
<h2>序号:<%=i%></h2>
<%
}
%>
</body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/*
* Generated by the Jasper component of Apache Tomcat
* Version: Apache Tomcat/9.0.43
* Generated at: 2022-04-09 19:09:51 UTC
* Note: The last modified time of this file was set to
* the last modified time of the source file after
* generation to assist with modification tracking.
*/
package org.apache.jsp;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
public final class index_jsp extends org.apache.jasper.runtime.HttpJspBase
implements org.apache.jasper.runtime.JspSourceDependent,
org.apache.jasper.runtime.JspSourceImports {
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
private static final javax.servlet.jsp.JspFactory _jspxFactory =
javax.servlet.jsp.JspFactory.getDefaultFactory();
private static java.util.Map<java.lang.String,java.lang.Long>
_jspx_dependants;
private static final java.util.Set<java.lang.String>
_jspx_imports_packages;
private static final java.util.Set<java.lang.String>
_jspx_imports_classes;
static {
_jspx_imports_packages = new java.util.HashSet<>();
_jspx_imports_packages.add("javax.servlet");
_jspx_imports_packages.add("javax.servlet.http");
_jspx_imports_packages.add("javax.servlet.jsp");
_jspx_imports_classes = null;
}
private volatile javax.el.ExpressionFactory _el_expressionfactory;
private volatile org.apache.tomcat.InstanceManager _jsp_instancemanager;
public java.util.Map<java.lang.String,java.lang.Long> getDependants() {
return _jspx_dependants;
}
public java.util.Set<java.lang.String> getPackageImports() {
return _jspx_imports_packages;
}
public java.util.Set<java.lang.String> getClassImports() {
return _jspx_imports_classes;
}
public javax.el.ExpressionFactory _jsp_getExpressionFactory() {
if (_el_expressionfactory == null) {
synchronized (this) {
if (_el_expressionfactory == null) {
_el_expressionfactory =
_jspxFactory.getJspApplicationContext(getServletConfig().getServletContext
()).getExpressionFactory();
}
}
}
return _el_expressionfactory;
}
public org.apache.tomcat.InstanceManager _jsp_getInstanceManager() {
if (_jsp_instancemanager == null) {
synchronized (this) {
if (_jsp_instancemanager == null) {
_jsp_instancemanager =
org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager(getSer
vletConfig());
}
}
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
}
return _jsp_instancemanager;
}
public void _jspInit() {
}
public void _jspDestroy() {
}
public void _jspService(final javax.servlet.http.HttpServletRequest
request, final javax.servlet.http.HttpServletResponse response)
throws java.io.IOException, javax.servlet.ServletException {
if
(!javax.servlet.DispatcherType.ERROR.equals(request.getDispatcherType()))
{
final java.lang.String _jspx_method = request.getMethod();
if ("OPTIONS".equals(_jspx_method)) {
response.setHeader("Allow","GET, HEAD, POST, OPTIONS");
return;
}
if (!"GET".equals(_jspx_method) && !"POST".equals(_jspx_method) &&
!"HEAD".equals(_jspx_method)) {
response.setHeader("Allow","GET, HEAD, POST, OPTIONS");
response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, "JSP
只允许 GET、POST 或 HEAD。Jasper 还允许 OPTIONS");
return;
}
}
final javax.servlet.jsp.PageContext pageContext;
javax.servlet.http.HttpSession session = null;
final javax.servlet.ServletContext application;
final javax.servlet.ServletConfig config;
javax.servlet.jsp.JspWriter out = null;
final java.lang.Object page = this;
javax.servlet.jsp.JspWriter _jspx_out = null;
javax.servlet.jsp.PageContext _jspx_page_context = null;
try {
response.setContentType("text/html; charset=utf-8");
pageContext = _jspxFactory.getPageContext(this, request, response,
null, true, 8192, true);
_jspx_page_context = pageContext;
application = pageContext.getServletContext();
config = pageContext.getServletConfig();
session = pageContext.getSession();
out = pageContext.getOut();
_jspx_out = out;
out.write("\r\n");
out.write("<!DOCTYPE html>\r\n");
out.write("<html>\r\n");
out.write("<head>\r\n");
out.write("<meta charset=\"utf-8\">\r\n");
out.write("<title>查询页面</title>\r\n");
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
从上面的代码可以发现index_jsp是继承org.apache.jasper.runtime.HttpJspBase的,但是这个类其
实是继承HttpServlet的,所以其本质上访问index.jsp还是在访问servlet。
运行流程:
1. 浏览器对服务器发送请求,请求是动态的。连接器将请求交给Servlet容器处理,
2. servlet容器查找要执行的.jsp文件
3. 将jsp转为.java,
4. 在编译为.class,
5. 最终服务器要加载这个class文件,最后调用这个servlet实例。
注意:第二次执行的时候,如果内容没有发生变化,则直接执行原来的class文件。
4、JSP脚本
out.write("</head>\r\n");
out.write("<body>\r\n");
out.write("\t<h1>计算结果:");
out.print(1 + 2);
out.write("</h1>\r\n");
out.write("\t");
for (int i = 0; i < 10; i++) {
out.write("\r\n");
out.write("\t<h2>序号:");
out.print(i);
out.write("</h2>\r\n");
out.write("\t");
}
out.write("\r\n");
out.write("</body>\r\n");
out.write("</html>");
} catch (java.lang.Throwable t) {
if (!(t instanceof javax.servlet.jsp.SkipPageException)){
out = _jspx_out;
if (out != null && out.getBufferSize() != 0)
try {
if (response.isCommitted()) {
out.flush();
} else {
out.clearBuffer();
}
} catch (java.io.IOException e) {}
if (_jspx_page_context != null)
_jspx_page_context.handlePageException(t);
else throw new ServletException(t);
}
} finally {
_jspxFactory.releasePageContext(_jspx_page_context);
}
}
}
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
剩余75页未读,继续阅读
资源评论
都来学
- 粉丝: 8
- 资源: 165
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功