servlet+重定向+转发+数据传递

  • 1,最简单的servlet使用

 i,写一个类,类名以Servlet结束(不强制)
   清单:src/servlet/TestServlet.java
   TestServlet extends HttpServlet
   override method:
 //页面form中的method以post方式发送调用该方法
 doPost(HttpServletRequest req,HttpServletResponse resp)
 //页面form中的method以get方式发送调用该方法
 doGet(HttpServletRequest req,HttpServletResponse resp)
 
ii,配置servlet
  清单:/WebRoot/WEB-INF/web.xml
  //配置servlet在程序中对应的类
  <servlet>
       //指定servlet名字,用于在servlet-mapping中进行对应
        <servlet-name>test</servlet-name>
        //指定servlet对应的class
        <servlet-class>servlet.TestServlet</servlet-class>
   </servlet>
  <servlet-mapping>
        //对应servlet名字
        <servlet-name>test</servlet-name>
        //在页面的form中的action为test时匹配该mapping(action中不需要带'/')
        <url-pattern>/test</url-pattern>
   </servlet-mapping>

 iii,写界面
   <form action="test" method="get/post">
       //elements
      <input type="submit" value="submit"/>
   </form>

流程:
 用户访问,提交请求,服务器读取web.xml,匹配请求对应的servlet-mapping,
 进而匹配servlet对应的class,根据请求执行对应的doGet/doPost,doGet/doPost中
 处理完数据进行重定向或者转发到另一个页面。在这期间,可以进行数据传递


重定向(redirect):客户端的要求当前服务器无法达到,请求别的服务器帮助,当前服务器相当于代理
 servlet中
        response.sendRedirect("URL");
 jsp中
        <%response.sendRedirect("URL")%>
        i,可以是任何一个地址,也可以是jpg,png,avi等文件
        ii,改变了浏览器的访问地址
 
  
转发(forward):属于服务端的动作,有一系列完整的客户端请求响应动作,无需别的服务器帮助
 servlet中
        request.getRequestDispatcher("本工程路径[默认为WebRoot]").forward();
 jsp中
        <jsp:forward page="本工程路径[默认为WebRoot]"/>
     i,只能是本工程的文件,不能是servlet等类
     ii,不改变浏览器的访问地址

数据传递
 i,jsp的隐式对象(9个)容器
  request(客户端每一次请求都将生成一个request,请求结束request被销毁)
      servlet传值
                request.setAttribute("attName","attValue");
      jsp拿值
          i,<%request.getAttribute("attName")%> // 使用隐式对象拿值
          ii,${attName} //使用El拿值


  cookie(客户端所携带的信息,由request获得,由客户清空信息)
      servlet中拿值
          request.getCookies() return Cookie[]


  session(客户端访问服务端的整个过程[认为是在交谈所以称为会话],
    浏览器关闭丢失sessionId,随后服务将销毁session)
      servlet传值
          session.setAttribute("attName","attValue");
      jsp拿值
          i,session.getAttribute("attName");
          ii,${attName}
  application(服务器开启对象被生成,关闭被销毁)
   application实际对应的是ServletContext
      servlet传值
          this.getServletContext().setAttribute("attName","attValue");
      jsp拿值
          i,<%application.getAttribute("attname')%>
          ii,${attName}
  
  request,response,cookie,session和application解释
   学生和老师交谈,学生问一句,老师答一句,
   request表示学生问的信息
   response表示老师答的信息
   cookie表示学生本身携带的信息,例如学生的名字。
   session表示整个交谈都一直存在的信息,例如学生一直围绕一道题而产生很多的问题,
    那么这道题可以理解为session,其他的题可以理解为request。
   application表示所有学生在与老师交谈中都可以拿到的信息,可以理解成在javaSE中的
   static修饰后的效果,每个方法为一个学生。每个客户访问都共享一个application对象。
 

ii,url传值
  xx.jsp?parameterName = parameterValue & parameterName1 = parameterValue1
  获得值
   request.getParameter(parameterName);
  (EL无法获得参数内容)
 
 iii,form传值(相当于request.setAttribute("attName","attValue"))
  前提:可携带值的元素(text,hidden,,,)带有name属性
  servlet拿值
        request.getAttribute("name");