求解request读取数据的原理

wnba1983 2007-08-01 05:53:05
大家都知道servlet存在于服务器端,同样jsp/html也存在于服务器端,比如说我们要登录一个论坛,那么我们首先要在在IE地址栏中输入首页地址,接着在网页中的文本框中输入登录的性息,那么servlet request 是如何得到我们输入的性息的呢,
(是不是我们在访问第一个页面的时候,服务器已经把它转化成了servlet才发送给我们,我们得到的只是一个静态的html,如果是这样,当多个页面一起提交数据的时候,request读到的又是什么呢)
同样我在servlet doPost方法中定义了一个form并提交个doGet,request对象也能读到该表单的数据,这是什么原理啊?代码如下:
package test;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;


public class movie extends HttpServlet{

public void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException{
String movies[] = req.getParameterValues("movies");
HttpSession session = req.getSession(true);
if(session != null){
session.setAttribute("movies", movies);
}
res.setContentType("text/html; charset=GBK");
PrintWriter out = res.getWriter();
out.println("<html>");
out.println("<head><title>武昆Session Servlet</title></head>");
out.println("<body>");
out.println("<h2>Contents of Shopping Cart</h2>");
for(int x = 0; x < movies.length; x++){
out.println(movies[x] + "<br>");
}
out.println("<form action = movie method = get>");
out.println("<input type = \"test\" name = \"test\" value = \"ddddd\">");
out.println("<input type = \"submit\" name = \"add\" value = \"Prpceed to Checkout \"></form>");
out.println("</body></html>");
out.close();
}

public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException{
String[] movies = null;
String test = req.getParameter("test");
HttpSession session = req.getSession(true);
if(session != null){
movies = (String[])session.getAttribute("movies");
}

res.setContentType("text/html; charset=GB2312");
PrintWriter out = res.getWriter();
out.println("<html>");
out.println("<head><title>Session Servlet</title></head>");
out.println("<body>");
for(int x= 0; x < movies.length; x++){
out.println(new String(movies[x].getBytes("iso-8859-1"), "gbk") + "<br>");
}
out.println(new String(test.getBytes("iso-8859-1"), "gbk"));
out.println("</body></html>");
out.close();
}
}

那位高手能解释一下request的工作原理啊,不胜感激!!!
...全文
227 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
树成 2007-08-02
  • 打赏
  • 举报
回复
你向服务器发送一个请求,请求里面包含了各种信息,例如你机器的IP地址,你用的什么浏览器,你以什么方式访问的服务器(FTP,HTTP),你请求的是什么东西,等等都会在请求里面,服务器知道这些难道不能吧页面发给你?
你上面写的那个servlet里面的out输出流都是向客户端发送信息,很明显,你的out是从response里面获得的,response是响应不是请求。
你从客户端获得的信息是request.etParameterValues这个方法中获得的。
这个servlet不仅仅获得表单提交的值,同样也向客户端发送了一个页面。
wnba1983 2007-08-02
  • 打赏
  • 举报
回复
我写的这个页面是第一个页面,比如说我在地址栏中输入http:localhost:8000/sessionMovie/movie.html
在我的页面接收到显示信息之前,web服务器是如何如何得到并把页面发送给我的呢?
我上面写的servlet只是接收这个页面的信息,并在控制台打印,那么,我将如何得到第一个页面呢?
树成 2007-08-01
  • 打赏
  • 举报
回复
其实我理解的也不是很深,说得也有可能不对。
request其实是一次请求,而servlet是一个服务器处理你请求的应用程序。当你像服务器发送一个请求的时候,会对你的请求打包成一个数据包发送到服务器,服务器接受到你的数据包以后交给服务器应用程序(servlet)进行处理,处理完成以后并给于响应(response),其实你给与了请求服务器就一定会响应(如果这个服务器存在的话),只是看它怎么响应而已。
就如同你上面写的这个servlet,首先你输入地址访问这个servlet(其实不是访问servlet,而是访问那个地址),服务器接受到你的请求就交给servlet进行处理。servlet处理完,然后响应一个字符流给你(这个字符流就是你编写的那个html文本),你访问到的那个页面其实就是服务器发送给你的一个字符流。你的浏览器解析这个字符流得到一个html的页面。这个字符流以某种形式保存在你的本机上(客户端)。如果你受到的html文本是一个表单,这个表单不是在服务器上,而是在你本机上,它是服务其发给你的。当你填写表单信息并按提交按钮的时候,这又是一次请求了,这次请求吧你的请求信息再次打包,包括表单里面填写的那些信息一起打包并提交。服务器再次解析他们并交给服务器应用程序(servlet)进行处理,处理完以后并且响应。
大概全过程就是如此
wnba1983 2007-08-01
  • 打赏
  • 举报
回复

<html>
<head>
<title>movie</title>

<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="this is my page">
<meta http-equiv="content-type" content="text/html; charset=GB2312">

<!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
</head>
<body>
<h2>select from available movies</h2>
<form action = movie method = post>
<select name = "movies" size = "5" multiple>
<option> air force </option>
<option> happy gilmore </option>
<option> so i married an axe murderer</option>
<option> austin powers </option>
<option> pure luck </option>
</select><br>
<input type = "submit" name = "add" value = "add movies">
</form>
</body>
</html>

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧