⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 0012.htm

📁 JspServlet教程专栏 对javaservlet讲述的非常详细
💻 HTM
字号:
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<style>
<!--
body, table {font-size: 9pt; font-family: 宋体}
a {text-decoration:none}
a:hover {color: red;text-decoration:underline}
.1  {background-color: rgb(245,245,245)}
-->
</style>
<title>网络新时代,软件教程:操作系统 主页制作 服务器 设计软件 网络技术 编程语言 文字编辑</title>
</head>

<body>

<p align="center"><script src="../../1.js"></script> </p>

<p align="center"><big><strong>第四篇:Servlets编程[参考原作]</strong></big></p>

<p>  Servlets 执行 javax.servlet.Servlet interface. 当servlet编写者可以通过直接implement 
interface开发servlet, 但这样通常没有必要. 因为大多数servlet是针对用HTTP协议的web服务器, 
这样最通用开发servlet办法是用 javax.servlet.http.HttpServlet 内. </p>

<p>  HttpServlet 类通过extend GenericServlet基类执行 Servlet interface, 
提供了处理HTTP协议的功能. 他的service方法支持标准HTTP/1.1请求. </p>

<p>  一般地, 用HttpServlet指定的类编写的servlets可以多线程地并发运行 
service方法. </p>

<p><b>与客户端的交互性</b> </p>

<p>  Servlet编写者注意HttpServlet类有几个欠缺的方法,你可以自己定义方法中内容,但是必须使用这些方法名称以使servlet知道你想做什么, 
</p>

<p>doGet, 用于处理 GET、有条件的GET 和头部 HEAD请求 </p>

<p>doPost, 用户处理 POST 请求 </p>

<p>doPut, 用于处理 PUT 请求 </p>

<p>doDelete, 用于处理 DELETE请求 </p>

<p>  HttpServlet的service方法, 一般地, 当它接收到一个OPTIONS请求时,会调用doOptions 
方法, 当接收一个TRACE请求是调用doTrace . doOptions缺省执行方式是自动决定什么样的HTTP被选择并且返回哪个信息. 
</p>

<p>  在你使用这些方法时,必须带两个阐述. 
第一个包含来自客户端的数据 HttpServletRequest. 
第二个参数包含客户端的响应HttpServletResponse. 在下例中是这样的情况. 
</p>

<p>  一个HttpServletRequest对象提供到达HTTP 头部数据, 
也允许你获取客户端的数据. 怎样获取这些数据取决于HTTP端请求方法. 
</p>

<p>  不管任何HTTP方式, 你可以用 getParameterValues 方法, 
这个用来返回特定名称的参数值. 对于用 HTTP GET 请求的方式, 这个 
getQueryString 方法将会返回一个可以用来解剖分析的. </p>

<p>  对于用HTTP POST, PUT, 和 DELETE请求的方式, 
你有两种方法可以选择. 如果是文本数据,你能通过getReader方法用BufferedReader获取 
; 如果是二进制数据, 能通过getReader 方法用 ServletInputStream获取. </p>

<p>  为了响应客户端, 一个HttpServletResponse对象提供返回数据给用户的两个方法. 
你可以用getWriter 方法返回,或者 getOutputStream 方法以输出流返回. 
你应该用getWriter返回文本数据,而用getOutputStream返回二进制数据. </p>

<p>  在使用Writer 或 OutputStream之前, HTTP 头部应该先被设置. 
HttpServletResponse内提供这样一个方法,之后可以用writer 或 outputstream 
将响应主体部分发回用户. 完成后要关闭 writer 或 output stream以便让服务器知道响应已经完毕. 
</p>

<p><b>一个HTTP Servlet处理GET和HEAD方法的例子</b> <br>
public class SimpleServlet extends HttpServlet { <br>
public void doGet(HttpServletRequest req, HttpServletResponse res)<br>
throws ServletException, IOException<br>
   {<br>
   // 首先设置头部<br>
   res.setContentType(&quot;text/html&quot;);<br>
   // 用 writer方法返回响应数据<br>
   PrintWriter out = res.getWriter();<br>
   out.println(&quot;&lt;HEAD&gt;&lt;TITLE&gt; SimpleServlet 
Output&lt;/TITLE&gt;&lt;/HEAD&gt;&lt;BODY&gt;&quot;);<br>
   out.println(&quot;&lt;h1&gt; SimpleServlet Output &lt;/h1&gt;&quot;);<br>
   out.println(&quot;&lt;P&gt;This is output is from SimpleServlet.&quot;);<br>
  out.println(&quot;&lt;/BODY&gt;&quot;);<br>
  out.close();<br>
  }<br>
<br>
  public String getServletInfo() {<br>
  return &quot;A simple servlet&quot;;<br>
  }<br>
<br>
}<br>
这个例子完整地现实了一个servlet. </p>

<p><b>一个HTTP Servlet处理POST方式的例子</b> </p>

<p>这里是个用HTML带POST表单的例子:<br>
&lt;html&gt;<br>
&lt;head&gt;&lt;title&gt;JdcSurvey&lt;/title&gt;&lt;/head&gt;<br>
&lt;body&gt;<br>
&lt;form action=http://demo:8080/servlet/survey method=POST&gt;<br>
&lt;input type=hidden name=survey value=Survey01Results&gt;<br>
<br>
&lt;BR&gt;&lt;BR&gt;How Many Employees in your Company?&lt;BR&gt;<br>
&lt;BR&gt;1-100&lt;input type=radio name=employee value=1-100&gt;<br>
&lt;BR&gt;100-200&lt;input type=radio name=employee value=100-200&gt;<br>
&lt;BR&gt;200-300&lt;input type=radio name=employee value=200-300&gt;<br>
&lt;BR&gt;300-400&lt;input type=radio name=employee value=300-400&gt;<br>
&lt;BR&gt;500-more&lt;input type=radio name=employee value=500-more&gt;<br>
<br>
&lt;BR&gt;&lt;BR&gt;General Comments?&lt;BR&gt;<br>
&lt;BR&gt;&lt;input type=text name=comment&gt;<br>
<br>
&lt;BR&gt;&lt;BR&gt;What IDEs do you use?&lt;BR&gt;<br>
&lt;BR&gt;JavaWorkShop&lt;input type=checkbox name=ide value=JavaWorkShop&gt;<br>
&lt;BR&gt;J++&lt;input type=checkbox name=ide value=J++&gt;<br>
&lt;BR&gt;Cafe'&lt;input type=checkbox name=ide value=Cafe'&gt;<br>
<br>
&lt;BR&gt;&lt;BR&gt;&lt;input type=submit&gt;&lt;input type=reset&gt;<br>
&lt;/form&gt;<br>
&lt;/body&gt;<br>
&lt;/html&gt;<br>
<br>
</p>

<p>这里的servlet将表单数据写入一个文件,并且用一个thank you信息响应用户. 
这里servlet的方法,如下例: <br>
<br>
public void doPost(HttpServletRequest req, HttpServletResponse res)<br>
throws ServletException, IOException<br>
{<br>
// 首先设置响应的 &quot;content type&quot; 头部<br>
res.setContentType(&quot;text/html&quot;);<br>
<br>
//得到响应的 PrintWriter以返回文本给客户端.<br>
PrintWriter toClient = res.getWriter();<br>
<br>
try {<br>
//打开一个文件写入Survey的结果.<br>
String surveyName = req.getParameterValues(&quot;survey&quot;)[0];<br>
FileWriter resultsFile = new FileWriter(resultsDir<br>
+ System.getProperty(&quot;file.separator&quot;)<br>
+ surveyName + &quot;.txt&quot;, true);<br>
PrintWriter toFile = new PrintWriter(resultsFile);<br>
<br>
// 从客户端得到表单数据 &amp; 存贮在这个文件中<br>
toFile.println(&quot;<BEGIN>&quot;);<br>
Enumeration values = req.getParameterNames();<br>
while(values.hasMoreElements()) {<br>
String name = (String)values.nextElement();<br>
String value = req.getParameterValues(name)[0];<br>
if(name.compareTo(&quot;submit&quot;) != 0) {<br>
toFile.println(name + &quot;: &quot; + value);<br>
}<br>
}<br>
toFile.println(&quot;<END>&quot;);<br>
<br>
//关闭文件.<br>
resultsFile.close();<br>
<br>
// 用一个thank you返回客户端<br>
toClient.println(&quot;&quot;);<br>
toClient.println(&quot;&quot;);<br>
toClient.println(&quot;Thank you for participating&quot;);<br>
toClient.println(&quot;&quot;);<br>
<br>
} catch(IOException e) {<br>
e.printStackTrace();<br>
toClient.println(<br>
&quot;A problem occured while recording your answers. &quot;<br>
+ &quot;Please try again.&quot;);<br>
}<br>
<br>
// 关闭writer; 响应完成.<br>
toClient.close();<br>
}<br>
</p>

<p>  这个doPost方法是用getParameterNames和getParameterValues方法来从表单中获取数据的. 
因为它返回文本给客户端, doPost 将调用 getWriter 方法. 
在写入响应主体部分之前,它设置了响应头部字段的设置, 
但响应完成后,关闭. </p>

<p><br>
<br>
                [未完待续] </p>

<p align="center"><script src="../../2.js"></script> </p>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -