servlet小結 請求轉發和重定向的區別
servlet小結
package com;
class AA extends HttpServlet{
public void doGet(HttpServletRequest request,HttpServletResponse) throws IOException,ServletException
{
PrintWriter out = response.getWriter();
out.println("<html></html>");
}
doPost
}
|----web.xml
在web.xml中配置servlet
<servlet>
<servlet-name>AA</servlet-name><servlet-class>com.AA</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>AA</servlet-name>
<url-pattern>/Hello.do</url-pattern>
</servlet-mapping>
服務器的操作方法
catalina.bat start||stop
初始化,服務,銷毀
inti service destroy
flag = true;
while(flag){
Sockcet s = socket.accept();
s.getWriter();
HTTP數據包中的數據
String method = "get";
String uri = "/Hello.do";
查找web.xml配置文件,找到要訪問的Servlet的信息
String className = "com.AA";
//AA a = new AA();
Object(Servlet/HttpServlet) obj = Class.forName(className).newInstance();
HttpServletRequest request = new HttpServletRequest();
//把HTTP數據包中,的用戶提交的數據和瀏覽器的附加信息等封裝到request
HttpServletResponse response = new HttpServletResponse();
//在response中封裝請求客戶端的流對象
Runnable st = new St(obj,method,request,response);
Thread t = new Thread(st);
t.start();
}
class St implements Runnable
{
private Servlet s;
private String method;
private HttpServletRequest request;
private HttpServletResponse response;
public St(Servlet s,method,request,response)
{
this.s = s;
this.method = method;
this.request = request;
this.response = response;
}
public void run()
{
if("get".equalsInca(method))
{
s.doGet(request,response);
}
else
{
s.doPost(request,response);
}
}
}
class AA
{
static
{
}
}
1.獲取用戶提交的數據
2 獲取客戶端附件的信息
3.處理數據(存儲到數據庫中,)
4.給用戶一個新的響應
5.在響應中添加附加信息。
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
String str = request.getParameter("key");
String[] str = request.getParameterValues("key");
修改server.xml
<connector URIEncoding="utf-8"
String h = request.getHeader("key");
Enumeration e = request.getHeaderNames();
練習一:
編寫一個Servlet,用FireFox來訪問這個Servlet,顯示出你好,火狐!如果是使用IE瀏覽器來訪問Servlet,顯示出你好,微軟!如果是其它牌子的瀏覽器訪問這個Servlet,顯示出我不認識
你!
練習二:
編寫一個Servlet,如果客戶端瀏覽器的語言設置為en-US,那麼顯示出Hello,美國佬!
如果瀏覽器的語言是中文的話,顯示你好,聰明的中國人!如果是日文的話,顯示XXXXXX
關於Servlet線程安全性的問題!
練習三:
編寫一個Servlet,用來完成計數功能。(線程安全)
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="file"/>
</form>
byte[]
流方式獲取字節方式的數據。
響應:
//設置響應類型
字符型的響應
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("<html></html>");
response.sendError(500,"fdsafafdsa");
字節型響應
response.setContentType(MIME類型);
OutputStream os = response.getOutputStream();
os.write();
練習四:
編寫一個Servlet,客戶端訪問這個Servlet的時候,將服務器端C:\的一個1.pdf的文件返回給客戶端瀏覽器,並且客戶端瀏覽器可以用查看pdf文件的軟件來查看相應。
文件的下載:
response.setContentType("bin");
//在響應中添加了附加的信息
response.addHeader("Content-Disposition", "attachment;filename=\""
+ "aa.jpg" + "\"");
練習五:
編寫一個HTML頁麵,
1.doc下載
aa.jpg下載
bb.mp3下載
重定向和請求轉發的區別:
Servlet中利用響應完成重定向的工作:
response.sendRedirect(URL);
1.轉發一次請求/響應的過程,而重定向是兩次請求/響應的過程
2.轉發地址欄的地址不變化,而重定向地址會發生變化。
3.轉發方式可以利用request對象來傳遞數據,而重定向不能利用request傳遞數據。
4.如果是插入數據,更新數據,刪除數據以後到結果頁麵應該采用重定向的方式。
最後更新:2017-04-03 15:21:51