java web 之servlet

来源:互联网 发布:u3d教程js 编辑:程序博客网 时间:2024/06/04 18:25
<!--
URL:统一资源定位符,请求的是服务器上的资源。资源是一个抽象的概念,指存放在服务器上的能够被客户端访问到的所有类型的文件(比如:文本、图片、音频、视频等)。
比如: http://www.itu.org/home/index.html
首先 浏览器向  DNS 服务器询问 www.baidu.com 的服务器ip  
等待 DNS 回复 ip 为 156.106.192.163
浏览器与 156.106.192.163 的8080 端口 创建一个 TCP 连接
浏览器发送一个请求,要求获取文件 /home/index.html
服务器发送 页面到浏览器 
TCP 连接被释放了 并且浏览器显示出 /home/index.html 的页面


Http 访问服务器的方式:
    1:URL 地址 
    2:表单提交
-->
    <form name="formManage" method="get" action="login.jsp">
    <font size="3",color="990000">
    <label>用户名</label>
    <input type="text" name="UserName"><br>
    <label>密&nbsp;&nbsp;码</label>
    <input type="password" name="PassWord"><br>
    <input type="submit" value="登陆"/>      <!-- 点击登陆后,会自动跳转到 login.jsp 这个页面  -->
    </font>
    </form>
    <!--  
          相当于 http://localhost:8080/myapp/login.jsp?UserName=tom 
         
    3: get 和 post 区别
        get 方法 通过URL 来传值, 如上面所示,用户在地址栏可见,如果是传递密码的话不安全,而且通过 url 传值 不能超过 255个字符
        post 通过 请求的body 传递参数 ,用户在客户端不可见,比较安全并且没有长度限制


web 容器
具体的 web 程序执行的环境,一般由服务器程序实现
主要功能:1:生成并管理相关对象,供servlet 使用
  2: 管理servlet 生命周期,提供其运行环境
  3:充当 web 服务器和 servlet 之间的桥梁     --将请求从web 服务器转发到servlet  将响应从servlet 转发到web服务器


servlet
1:服务端的java 程序 可以生成动态的Web页面。它担当客户请求(Web浏览器或其他HTTP客户程序)与服务器响应(HTTP服务器上的数据库或应用程序)的中间层。
Servlet是位于Web 服务器内部的服务器端的Java应用程序,与传统的从命令行启动的Java应用程序不同,Servlet由Web服务器进行加载,
该Web服务器必须包含支持Servlet的Java虚拟机
2: servlet 中,修改 web.xml servlet 类 都需要重启服务器

3:创建对象和生命周期
对象: servlet 是java程序,必须有对象,这个对象由读取web.xml  服务器来创建
创建时间: 1- 服务器启动,检测web.xml 看到 <servlet-class> 自动创建对象放入内存
    2- 用户第一次访问一个服务器上的新的servlet时创建      一共两次
                       生命周期:servlet 对象从服务器创建到内容,然后调用,最后销毁的过程
              1 实例化:档客户端通过URL 请求的时候,web服务器 根据 web.xml 来自动调用该 servlet 的构造方法,实例化对象
              2 初始化:通过该servlet 对象 调用 init() 方法,读取web.xml 中该servlet 配置信息为service() 方法提供数据
              3 服务: 通过该对象调用 service() 方法,如果继承HttpServlet  根据请求头信息中的请求方法来调用 doGet() 或 doPost()
              4 销毁: 并非在service() 方法调用后销毁,而是由 JVM 来决定
              
     4: servlet 中的 常用对象
      4.1 Interface:javax.servlet.Servlet
      init(ServletConfig config)
      service(ServletRequest req,ServletResponse res)
      destroy() 
      public ServletConfig getServletConfig();//得到 web.xml 中的配置信息
     
      4.2  abstract Class:
      1:javax.servlet.GenericServlet   //重写父接口中的所有方法
      2:HttpServlet:  doXXXX()  
      4.3  HttpServletRequest  实现了ServletRequest接口           **********************************比较重要
      用户请求的资源  用户提交的数据  均可以获得
      还可以获得session 对象 request.getSession();
      可以修改编码   request.setCharacterEncoding("gb2312");
     
      http://localhost:8080/servlet/index.jsp
     
    http:         request.getScheme();
    localhost:     request.getServerName();
    8080:          request.getServerPort();
    /servlet:      request.getContextPath();
    /index.jsp     request.getServletPath();
    /servlet/index.jsp: request.getRequestURI();
    完整请求路径: request.getRequestURL();
    IP 地址:      request.getLocalAddr();
   
    获得用户的数据信息:  request.getParameter("name") // 获取名为 name 的参数值
                 request.getParameterValue("name") // 获得同名 name 的一组参数值 返回为 String[] -->
                 <form name="formManage" method="post" action="loginAction" >
                                              姓名 <input type="text" name="name"><br>
                                              爱好  <input type="checkbox" name="favor" value="1"/>听音乐
                     <input type="checkbox" name="favor" value="2"/>打篮球
                     <input type="checkbox" name="favor" value="3"/>跑步
                   <br>
                   <input type="submit" value="登陆"/>
     </form>
<!--     在上面的action 中 request.getParameter("name")  获得用户输入的姓名
     request.getParameterValues("favor")   获得用户的所有爱好 
   
    4.4  HttpServletResponse 实现了servletResponse 接口
    -------  代表服务器向浏览器返回的响应直接输出内容到浏览器  使用Servlet输出HTML页面  
    PrintWriter out = response.getWriter();
        out.print("Hello :"); 
        首先设置响应头部  response.setContentType("text/html; charset=UTF-8");  // 设置响应内容的类型
        获得输出对象: PrintWriter out = response.getWriter();  // 文本
           ServletOutputStream out = response.getOutputStream()  // 二进制
        构造输出内容:out.println(" ... ");
        提交输出:        out.flush()   
        关闭 out
       
        例如:  response.setContentType("text/html; charset=UTF-8");
        PrintWriter out = response.getWriter();
        out.println("<HTML>");
        out.println("<HEAD><TITLE> 我的servlet </TITLE></HEAD>");
        out.println(<BODY> hello world </BODY>);
        out.println("/HTML");
        out.flush();
        out.close();
       
        HTML 状态码: 100-199:临时状态码
        200-299:请求成功
        300-399:重定向
        400-499:客户端错误
        500-599:服务器端错误
        设置状态码:response.setStatus(int id);
        发送错误信息:response.setError(404,"您所查找的网页不存在");
       
        重定向: 两个功能 - 1:设置状态码   设置响应头  response.setHeader("Location","http://www.baidu.com")
        2: 跳转页面  response.sendRedirect("http://www.baidu.com");
注意:使用 response 跳转可以跳转到项目外的 URL 资源 
   使用 request 跳转 只能在本项目资源中跳转
   request.getRequestDispatcher(“url”).forward(request,response);  
页面缓存:
response.setHeader("Cache-control","no-cache"); 不需要缓存
response.setHeader("pragma","no-cache")

response.setIntHeader("Refresh",10) 页面每隔10秒刷新一次

response.setCharacterEncoding("UTF-8");不管什么沙子,全部运到后,再用机器筛成需要的大小
request.setCharacterEncoding("UTF-8"); 先按照要求,筛好后运到工地

4.5 javax.servlet.RequestDispatcher   --对请求响应进行补充的一个接口 request.getRequestDispatcher() 获得
 主要有两个功能: 1: 跳转  
 disp.forward(ServletRequest,ServletResponse);
 例如:request.getRequestDispatcher("login_ok.jsp").forward(request,response); 
        2:包含
        disp.include(ServletRequest,ServletResponse);
       
        4.6 Cookie : 保留在浏览器的一部分数据   可以被包含在请求对象中传递给服务器 
        Set-Cookie:CustomerID=1234;domain=abc.com;path=/sales
         新建 Cookie:   Cookie cik = new Cookie("name",value);
           cik.setMaxAge(秒); //设置cookie的生存期  不设置或者设置为0,则此cookie是瞬时的
          cik.setPath("/test/test2"); 
          response.addCookie(cik);   //设置 Cookie,在响应中加入cookie
         读取Cookie :Cookie[] cks = request.getCookies()
         for(int i=0;i<cks.length;i++){
Cookie temp = cks[i];
if("name".equals(temp.getName())){
                String value = temp.getValue();
            }
         }
         
         删除 cookie:  ck.setMaxAge(0);   但是 --- 能够保存的数据很少,字符格式,不超过4kb;受浏览器本身影响,不一定能够一直有效
       
    4.7 HttpSession:是在服务器端保存数据最常见的方式   只能保存 object 类型
    session 会话: 一段活动时间内,该对象可以完成一定的操作  范围仅限于当前应用程序 -- ServletContext
    所以存储在一个上下文中的数据在另一个上下文不是可见的。
    作用:   (1)帮助服务器,识别不同的浏览器
  (2)帮助服务器传递数据到不同的Servlet或JSP页面
(3)能够人工控制连续的时间段的长短。
 
常用方法: 1 创建  HttpSession session = request.getSession(true);// 这里为false 是从已有session中取一个
HttpSession session = request.getSession(); 没有要求,服务器自动创建
  2 浏览器识别: 需要id来匹配-- String id = session.getId();


  3 传递数据   session.setAttribute("name",Object);  // 数据存入session
  Object obj  = session.getAttribute("name"); 在其他servlet 或 jsp 页面取出数据
  4 设置有效时间    默认为 30分钟
  session.setMaxInactiveInterval(60*60*24秒);  //设置单个session对象的最长有效时间
  <session-config>
<session-timeout>20000</session-timeout>  //设置整个工程中所有session的有效时间
    </session-config>
   
      5 清除数据  session.removeAttribute("name");
      6 设置session 失效   session.invalidate();
      
      ----session 最好的作用就是  存储数据 --------
      
    4.8 ServletContext 定义了一个servlet环境对象 提供了访问web 程序背景信息 相当于 jsp 的 application
ServletContext对象能够访问web项目的初始化参数、存储在ServletContext中的对象、web项目中的资源文件、日志;
ServletContext就是Servlet容器,提供的方法可以在同一个web应用下的所有Servlet中使用


4.9 ServletConfig
ServletConfig封装了web.xml文件中的配置信息,可以在每个servlet的初始化方法中得到并且使用该对象。
注意:  一个 ServletConfig 对象 只能在一个 servlet 中使用



过滤器  filter
1 过滤器:是一个可插拔的Web组件,从Servlet 2.3之后出现,提供了一个接口,用于开发Servlet中的过滤器---Filter,是一个独立的程序,
由一段Java代码和一段配置信息组成。通过不同规格的滤网,在过滤过程中,这些滤网可以组合使用。我们在 Servlet 中,可以通过实现Filter接口,
创建不同规格的滤网,再通过web.xml文件配置,把上述多个过滤器组合在一起
与Servlet相似,过滤器是一些web应用程序组件,可以绑定到一个web应用程序档案中。但是与其他web应用程序组件不同的是,
过滤器是“链”在容器的处理过程中。这就意味着它们会在Servlet处理器之前访问一个进入的请求,并且在触发的响应信息返回到客户端前访问这些响应信息,
这种访问使得过滤器可以检查并修改请求和响应的内容

     2 生命周期
      (1)实例化:由Tomcat调用过滤器类的构造方法,创建对象在服务器启动时创建
      (2)初始化:由Tomcat调用过滤器对象中的init(XXXXConfig)
      (3)过滤:由Tomcat调用doFilter(request,response)
      (4)销毁:destroy()
     
     3 创建过程
       (1)创建普通类,实现javax.servlet.Filter接口
       (2)在doFilter()方法中截取request/response对象,进行请求或响应的过滤
 (3)在web.xml文件中进行配置,使它能够在整个web工程中生效。剩下的都交给服务器。
 
4  过滤配置
 (1)过滤服务器上所有的资源
<filter-mapping>
<filter-name>charSet</filter-name>
<url-pattern>/*</url-pattern>  *.jsp--所有 jsp 页面       /folder/*--指定目录   
</filter-mapping> 

 (2)过滤指定servlet
  <filter-mapping>
        <filter-name>loginFilter</filter-name>
        <servlet-name>loginServlet</servlet-name>
</filter-mapping>
<servlet-mapping>
<servlet-name>loginServlet</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>


 5 过滤器的通用功能
  ⑴拦截请求头:安全认证、日志
⑵数据转换:加密、解密
⑶抢占特殊资源的服务:缓存
⑥filter的接口
⑴javax.servlet.Filter
⑵javax.servlet.FilterChain
⑶javax.servlet.FilterConfig
⑦过滤字符编码的实例代码












-->
   









0 0
原创粉丝点击