zoukankan      html  css  js  c++  java
  • Servlet

    Servlet:是在服务器端运行的Java程序,可以接收客户端请求并做出响应

    是可以动态生成HTML内容对客户端进行响应

    Servlet与JSP的关系

    初识Servlet

    示例

    import  java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
    public class HelloServletTest   extends HttpServlet {
    //extends HttpServlet 继承javax.servlet.http.HttpServlet类
          public void doGet ( HttpServletRequest request,    
                                              HttpServletResponse response )
                                        throws ServletException,IOException { //Servlet输出HTML标签和内容                                       response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
    out.println("<html>");
    out.println(" <head><title>Servlet</title></head>");
    out.println(" <body>");
    out.println("你好,欢迎来到Servlet世界");
    out.println(" </body>");
    out.println("</html>");
    out.close();
          }
    }

    GenericServlet抽象类

    提供了Servlet与ServletConfig接口方法的默认实现(service()方法除外)

    方法名称 功能描述
    public void init ( ServletConfig config ) 对Servlet接口中init()方法的实现,对ServletConfig实例进行了保存。此方法还有一个无参的重载方法,可用于子类中重写
    public String getInitParameter ( String name ) 返回web.xml中名称为name的初始化参数的值
    public ServletContext getServletContext ( ) 返回ServletContext对象的引用

    HttpServlet抽象类

    1.继承自GenericServlet

    2.处理HTTP协议的请求和响应

    方法名称 功能描述
    public void service ( ServletRequest req, ServletResponse res ) 对GenericServlet类中service()方法的实现,将请求分发给protected void service (HttpServletRequest req, HttpServletResponse res )
    protected void service ( HttpServletRequest req, HttpServletResponse res ) 接收HTTP 请求,并将它们分发给此类中定义的 doXXX( ) 方法
    protected void doXXX ( HttpServletRequest req, HttpServletResponse res ) 根据请求方式的不同分别调用的相应处理方法,如doGet()、doPost()等

    ServletConfig接口

    1.在Servlet初始化过程中获取配置信息

    2.一个Servlet只有一个ServletConfig对象

    方法名称 功能描述
    String getInitParameter ( String name ) 获取web.xml中设置的以name命名的初始化参数值
    ServletContext getServletContext( ) 返回Servlet的上下文对象引用

    ServletContext接口

    获取Web应用上下文,与Servlet容器进行通信

    方法名称 功能描述
    String getInitParameter ( String name ) 获取名为name的系统范围的初始化参数值,系统范围的初始化参数可在部署描述符中使用<context-param>元素定义
    void setAttribute ( String name, Object object ) 设置名称为name的属性
    Object getAttribute ( String name ) 获取名称为name的属性
    String getRealPath ( String path ) 返回参数所代表目录的真实路径
    void log ( String message ) 记录一般日志信息

    ServletRequest接口

    获取客户端请求的数据

    方法名称 功能描述
    Object getAttribute ( String name ) 获取名称为name的属性值
    void setAttribute ( String name, Object object ) 在请求中保存名称为name的 属性
    void removeAttribute (String name) 清除请求中名字为name的属性
    String getCharacterEncoding ( ) 返回请求体所使用的字符编码
    void setCharacterEncoding ( String charset ) 设置请求体的字符编码
    String getParameter ( String name ) 返回指定请求参数的值
    String[ ] getParameterValues ( String name ) 返回指定请求参数的全部值
    RequestDispatcher getRequestDispatcher( String path ) 返回指向指定路径的请求分发 对象

    HttpServletRequest接口

    除了继承ServletRequest接口中的方法,还增加了一些用于读取HTTP请求信息的方法

    方法名称 功能描述
    String getContextPath( ) 返回请求URI中表示请求上下文的路径,上下文路径是请求URI的开始部分
    Cookie[ ] getCookies( ) 返回客户端在此次请求中发送的所有cookie对象
    HttpSession getSession( ) 返回和此次请求相关联的session,如果没有给客户端分配session,则创建一个新的session
    String getMethod( ) 返回此次请求所使用的HTTP方法的名字,如GET、POST

    ServletResponse接口

    设置响应参数和向客户端发送响应数据

    方法名称 功能描述
    PrintWriter getWriter ( ) 返回PrintWriter对象,用于向客户端发送文本
    String getCharacterEncoding ( ) 返回在响应中发送的正文所使用的字符编码
    void setCharacterEncoding ( String charset ) 设置响应的字符编码
    void setContentType ( String type ) 设置发送到客户端的响应的内容类型,此时响应的状态属于尚未提交

    HttpServletResponse接口

    除了继承ServletResponse接口中的方法,还增加了适用于HTTP响应的新方法

    方法名称 功能描述
    void addCookie ( Cookie cookie ) 增加一个cookie到响应中,这个方法可多次调用,设置多个cookie
    void addHeader ( String name, String value ) 将一个名称为name,值为value的响应报头添加到响应中
    void sendRedirect(String location) 发送一个临时的重定向响应到客户端,以便客户端访问新的URL
    void encodeURL ( String url ) 使用session ID对用于重定向的URL进行编码

    Servlet的应用

    创建Servlet

    继承HttpServlet

    重写doPost()或doGet()方法

    部署Servlet

    编译Servlet到/WEB-INF/classes目录

    编辑部署描述文件web.xml

    1.<servlet>

    2.<servlet-mapping>

    <url-pattern>

    启动Tomcat,访问Servlet

    使用Servlet实现控制器

    示例


    public class TopicServlet extends HttpServlet {
      public void service( HttpServletRequest request, HttpServletResponse
              response ) throws ServletException, IOException {
    ... ...
    String opr = request.getParameter( "opr" );
    TopicsService topicsService = new TopicsServiceImpl();
    String contextPath = request.getContextPath();
    if ("list".equals(opr) ) { //查找所有主题
        List<Topic> list = topicsService.getAllTopics();
        request.setAttribute( "list", list );
        request.getRequestDispatcher (
                                contextPath + "/newspages/topic_list.jsp" )
                              .forward( request, response );
    }  
            … …
      }
    }



    <div id="opt_list">
      <ul>
          <li><a href="<%=basePath%>util/news_control.jsp?opr=findTopics">添加新闻</a></li>
          <li><a href=“${pageContext.request.contextPath}/util/news_control.jsp?opr=list">编辑新闻</a></li>
          <li><a href="../newspages/topic_add.jsp">添加主题</a></li>
          <li><a href="../util/topics?opr=list">编辑主题</a></li>
      </ul>
    </div>

    JSTL+EL完成修改功能

    示例

    JSTL+EL显示列表功能

    示例

    Servlet的生命周期

    生命周期的各个阶段

    实例化 Servlet 容器创建 Servlet 的实例
    初始化 该容器调用 init ( ServletConfig ) 方法
    服务 如果请求 Servlet,则容器调用 service() 方法
    销毁 销毁实例之前调用 destroy()方法

    获取Servlet初始化参数1

    Servlet初始化参数配置


    <web-app>
      <servlet>
          <servlet-name>HelloServlet</servlet-name>
          <servlet-class>demo.servlet.HelloServlet</servlet-class>
          <init-param>
              <param-name>initParam</param-name>
              <param-value>Hello Servlet</param-value>
          </init-param>
      </servlet>
      <servlet-mapping>
          <servlet-name>HelloServlet</servlet-name>
          <url-pattern>/HelloServlet</url-pattern>
      </servlet-mapping>
    </web-app>

    获取Servlet初始化参数2

    获取初始化参数


    public void doGet ( HttpServletRequest request,
                        HttpServletResponse response )
                        throws ServletException, IOException {
          System.out.println("处理请求时,doGet()方法被调用。");
          String initParam = getInitParameter( "initParam" );
          System.out.println(initParam);
    //根据参数名称进行读取  

    获取Servlet上下文参数1

    配置Servlet上下文


    <web-app>
      <context-param>
          <param-name>contextParam</param-name>//初始化参数的名字

          <param-value>Hello Servlet</param-value>//初始化参数的值

      </context-param>
      <!--省略其他配置-->
    </web-app>

    获取Servlet上下文参数2

    读取Servlet上下文


    public class HelloServlet extends HttpServlet {
    // …省略其他代码
    public void doGet ( HttpServletRequest request,
    HttpServletResponse response )
    throws ServletException, IOException {
    System.out.println("处理请求时,doGet()方法被调用。");
    String initParam = getInitParameter( "initParam" );
    String contextParam =
    this.getServletContext().getInitParameter( "contextParam" ); System.out.println("Servlet初始化参数" + initParam);
    System.out.println("系统初始化参数" + contextParam);
    }
    }
    //根据参数名称进行读取  



  • 相关阅读:
    System.Runtime.InteropServices.COMException (0x800706BA) 解决方法
    Win7 不能安装 msi 解决办法
    note 1 对象和数据类型
    note 0 Python介绍及Python IDE环境安装 Spyder with Anaconda
    无法获得锁 /var/lib/dpkg/lock
    keil5 MDK 链接报错 Error: L6410W 解决
    手动卸载CAD 删除残留文件 清理遗留的文件
    keil5 MDK warning:registered ARM compiler version not found in path
    干掉hao123劫持浏览器主页
    Win7 无法访问Installer服务
  • 原文地址:https://www.cnblogs.com/1314szh/p/13193029.html
Copyright © 2011-2022 走看看