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



http://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.如果是插入数据,更新数据,删除数据以后到结果页面应该采用重定向的方式。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值