- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章servlet转发、包含详解(七)由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
本文为大家介绍了servlet转发、servlet包含,供大家参考,具体内容如下 。
1.什么是servlet转发?
servlet将用户的请求通过一组servlet来处理,每个servlet都有自己特定的职责,当该servlet完成自己的工作后将请求转发到下一个servlet来处理,这种通过不同servelet相互转发请求来完成对某个请求的处理过程就叫做servlet转发.
2.什么是servlet包含?
servlet包含就是源servlet将其他web组件(servlet,html,jsp),生成的结果包含到自己的结果中.
3.为什么需要servlet转发和包含?
servlet对象是由Servlet容器创建,Servlet对象的Service()方法是由servlet容器调用,servlet之间是不允许相互调用(servlet API 2.1以前版本可以)。但是我们又需要通过多个servlet组件协调完成任务,同时方便代码维护管理,提高开发效率。这样就可以需要servlet转发和包含的技术支持.
4、转发和包含的相同点 。
(1)都是对同一个请求对象处理,源组件和目标组件共享同一个ServletRequest对象和ServletResponse对象.
(2)目标组件都可以是servlet,jsp,html.
(3)都依赖javax,servlet.RequestDispatcher 接口.
5.RequestDIspatcher 对象 。
该接口表示请求分发器 。
(1)获取RequestDispatcher对象方法 。
调用ServletContext的getRequestDispather(String path)方法获得.
调用ServletRequest的getRequestDispather(String path)方法获得.
(2)两种方法的区别 。
ServletContext调用方法的参数必须为绝对路径,而ServletRequest调用方法参数可以是绝对路径也可以是相对路径.
6.请求转发案例 。
CheckServlet 类用于处理用户请求参数.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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
|
package
com.learn;
import
javax.servlet.RequestDispatcher;
import
javax.servlet.ServletException;
import
javax.servlet.http.HttpServlet;
import
javax.servlet.http.HttpServletRequest;
import
javax.servlet.http.HttpServletResponse;
import
java.io.IOException;
import
java.io.PrintWriter;
/**
* Created by Administrator on 2017/09/26.
*/
public
class
CheckServlet
extends
HttpServlet{
@Override
protected
void
doGet(HttpServletRequest req, HttpServletResponse resp)
throws
ServletException, IOException {
String userName = req.getParameter(
"name"
);
String message =
""
;
if
(userName ==
null
){
message =
"please input your name"
;
}
else
{
message = userName;
}
req.setAttribute(
"mess"
,message);
RequestDispatcher requestDispatcher = getServletContext().getRequestDispatcher(
"/out"
);
PrintWriter out = resp.getWriter();
out.print(
"before forward "
);
System.out.println(
"before forward"
);
requestDispatcher.forward(req,resp);
out.print(
"after forward"
);
System.out.println(
"after forward"
);
out.close();
}
}
|
OutServlet 用于输出处理结果 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
package
com.learn;
import
org.json.HTTP;
import
javax.servlet.ServletException;
import
javax.servlet.http.HttpServlet;
import
javax.servlet.http.HttpServletRequest;
import
javax.servlet.http.HttpServletResponse;
import
java.io.IOException;
import
java.io.PrintWriter;
/**
* Created by Administrator on 2017/09/26.
*/
public
class
OutServlet
extends
HttpServlet {
@Override
protected
void
doGet(HttpServletRequest req, HttpServletResponse resp)
throws
ServletException, IOException {
String message = (String) req.getAttribute(
"mess"
);
PrintWriter printWriter = resp.getWriter();
printWriter.print(message);
printWriter.close();
}
}
|
注意: 1.在转发之前不要提交响应结果.
2.转发过程中,源组件的响应结果不会返回,只会返回目标组件的响应结果。 。
web.xml配置 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
<
servlet
>
<
servlet-name
>check</
servlet-name
>
<
servlet-class
>com.learn.CheckServlet</
servlet-class
>
</
servlet
>
<
servlet-mapping
>
<
servlet-name
>check</
servlet-name
>
<
url-pattern
>/check</
url-pattern
>
</
servlet-mapping
>
<
servlet
>
<
servlet-name
>out</
servlet-name
>
<
servlet-class
>com.learn.OutServlet</
servlet-class
>
</
servlet
>
<
servlet-mapping
>
<
servlet-name
>out</
servlet-name
>
<
url-pattern
>/out</
url-pattern
>
</
servlet-mapping
>
|
7.包含(include)案例 。
MainServlet 用于包含其他组件,并返回响应结果 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
package
com.learn;
import
javax.servlet.RequestDispatcher;
import
javax.servlet.Servlet;
import
javax.servlet.ServletContext;
import
javax.servlet.ServletException;
import
javax.servlet.http.HttpServlet;
import
javax.servlet.http.HttpServletRequest;
import
javax.servlet.http.HttpServletResponse;
import
java.io.IOException;
import
java.io.PrintWriter;
/**
* Created by Administrator on 2017/09/26.
*/
public
class
MainServlet
extends
HttpServlet {
@Override
protected
void
doGet(HttpServletRequest req, HttpServletResponse resp)
throws
ServletException, IOException {
resp.setContentType(
"text/html"
);
PrintWriter out = resp.getWriter();
out.println(
"<html><head><title>mainServlet</title></head>"
);
out.println(
"<body>"
);
ServletContext servletContext = getServletContext();
RequestDispatcher headDisPatcher = servletContext.getRequestDispatcher(
"/header.html"
);
RequestDispatcher greetDisPatcher = servletContext.getRequestDispatcher(
"/greet"
);
RequestDispatcher footeDisPatcher = servletContext.getRequestDispatcher(
"/footer.html"
);
headDisPatcher.include(req,resp);
greetDisPatcher.include(req,resp);
footeDisPatcher.include(req,resp);
out.print(
"</body></html>"
);
out.close();
}
}
|
header.html 。
1
2
3
4
5
6
7
8
9
10
|
<!DOCTYPE html>
<
html
lang
=
"en"
>
<
head
>
<
meta
charset
=
"UTF-8"
>
<
title
>header</
title
>
</
head
>
<
body
>
<
font
size
=
"6"
>Welcome to ab</
font
>
</
body
>
</
html
>
|
GreetServlet 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
package
com.learn;
import
javax.servlet.ServletException;
import
javax.servlet.http.HttpServlet;
import
javax.servlet.http.HttpServletRequest;
import
javax.servlet.http.HttpServletResponse;
import
java.io.IOException;
import
java.io.PrintWriter;
/**
* Created by Administrator on 2017/09/26.
*/
public
class
GreetServlet
extends
HttpServlet {
@Override
protected
void
doGet(HttpServletRequest req, HttpServletResponse resp)
throws
ServletException, IOException {
PrintWriter out = resp.getWriter();
out.print(
"hi! "
+req.getParameter(
"name"
)+
", <p>"
);
out.close();
}
}
|
footer.html 。
1
2
3
4
5
6
7
8
9
10
|
<!DOCTYPE html>
<
html
lang
=
"en"
>
<
head
>
<
meta
charset
=
"UTF-8"
>
<
title
>footer</
title
>
</
head
>
<
body
>
<
span
>Thanks for stopping</
span
>
</
body
>
</
html
>
|
web.xm配置 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
<
servlet
>
<
servlet-name
>main</
servlet-name
>
<
servlet-class
>com.learn.MainServlet</
servlet-class
>
</
servlet
>
<
servlet-mapping
>
<
servlet-name
>main</
servlet-name
>
<
url-pattern
>/main</
url-pattern
>
</
servlet-mapping
>
<
servlet
>
<
servlet-name
>greet</
servlet-name
>
<
servlet-class
>com.learn.GreetServlet</
servlet-class
>
</
servlet
>
<
servlet-mapping
>
<
servlet-name
>greet</
servlet-name
>
<
url-pattern
>/greet</
url-pattern
>
</
servlet-mapping
>
|
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.
原文链接:http://www.cnblogs.com/wwyx-xi/p/7599237.html 。
最后此篇关于servlet转发、包含详解(七)的文章就讲到这里了,如果你想了解更多关于servlet转发、包含详解(七)的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我有一个类似于以下的结构。 class A { string title; List bItem; } class B { int pric
本地流 和 远程流 两者都是“媒体流列表 ”。 本地流 包含“本地媒体流 ” 对象 但是,远程流 包含“媒体流 ” 对象 为什么差别这么大? 当我使用“本地流 “- 这个对我有用: localVide
我正在尝试将 8 列虚拟变量转换为 8 级排名的一列。 我试图用这个公式来做到这一点: =IF(OR(A1="1");"1";IF(OR(B1="1");"2";IF(OR(C1="1");"3";I
我正在使用面向对象编程在 Python 中创建一个有点复杂的棋盘游戏的实现。 我的问题是,许多这些对象应该能够与其他对象交互,即使它们不包含在其中。 例如Game是一个对象,其中包含PointTrac
有没有办法获取与 contains 语句匹配的最深元素? 基本上,如果我有嵌套的 div,我想要最后一个元素而不是父元素: Needle $("div:contains('Needle')")
出于某种原因,我无法在 Google 上找到答案!但是使用 SQL contains 函数我怎么能告诉它从字符串的开头开始,即我正在寻找等同于的全文 喜欢 'some_term%'。 我知道我可以使用
我正在尝试创建一个正则表达式来匹配具有 3 个或更多元音的字符串。 我试过这个: [aeiou]{3,} 但它仅在元音按顺序排列时才有效。有什么建议吗? 例如: 塞缪尔 -> 有效 琼 -> 无效 S
嘿所以我遇到了这样的情况,我从数据库中拉回一个客户,并通过包含的方式包含所有案例研究 return (from c in db.Clients.Include("CaseStudies")
如果关键字是子字符串,我无法弄清楚为什么这个函数不返回结果。 const string = 'cake'; const substring = 'cak'; console.log(string.in
我正在尝试将包含特定文本字符串的任何元素更改为红色。在我的示例中,我可以将子元素变为蓝色,但是我编写“替换我”行的方式有些不正确;红色不会发生变化。我注意到“contains”方法通常写为 :cont
我想问一下我是否可以要求/包含一个语法错误的文件,如果不能,则require/include返回一个值,这样我就知道所需/包含的文件存在语法错误并且不能被要求/包含? file.php语法错误 inc
我想为所有包含youtube链接的链接添加一个rel。 这就是我正在使用的东西-但它没有用。有任何想法吗? $('a [href:contains(“youtube.com”)]')。attr('re
我正在尝试在 Elasticsearch 中查询。除搜索中出现“/”外,此功能均正常运行。查询如下所示 GET styling_rules/product_line_filters/_search {
我正在开发名为eBookRepository的ASP.NET MVC应用程序,其中包含在线图书。 电子书具有自己的标题,作者等。因此,现在我正在尝试实现搜索机制。我必须使用Elasticsearch作
我已阅读Firebase Documentation并且不明白什么是 .contains()。 以下是文档中 Firebase 数据库的示例规则: { "rules": { "rooms"
我的问题是我可以给出条件[ 'BookTitleMaster.id' => $xtitid, ] 如下所示 $bbookinfs = $this->BookStockin->BookIssue->fi
我需要能够使用 | 检查模式在他们中。例如,对于像“dtest|test”这样的字符串,像 d*|*t 这样的表达式应该返回 true。 我不是正则表达式英雄,所以我只是尝试了一些事情,例如: Reg
我想创建一个正则表达式来不匹配某些单词... 我的字符:var test = "é123rr;and;ià456;or;456543" 我的正则表达式:test.match(\((?!and)(?!o
我在 XSLT 中有一个名为 variable_name 的变量,如果相关产品具有名称为 A 或 B 或两者均为 A & 的属性,我将尝试将其设置为 1 B.
您好,我想让接待员和经理能够查看工作类型和费率并随后进行更新。但是技术人员只能查看不能更新。该图是否有效? 我读到扩展用例是由发起基本用例的参与者发起的。我应该如何区分技术人员只能启动基本案例而不能启
我是一名优秀的程序员,十分优秀!