閱讀198 返回首頁    go 阿裏雲 go 技術社區[雲棲]


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
}



javac -classpath"servlet-api.jar" AA.java



webapps----project----WEB-INF----classes---com
                 |----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>


服務器的操作方法

startup.bat           shutdown.bat
catalina.bat          start||stop



https://localhost:8888/project/Hello.do



Servlet的生命周期:
初始化,服務,銷毀
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
   {
     
   }
}




在servlet中做什麼工作?
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

  上一篇:go Java麵向對象高級--繼承的進一步研究
  下一篇:go ServletContext(Servlet上下文對象)作用 生命周期