zoukankan      html  css  js  c++  java
  • servlet

    /**
    Model1:
    jsp  ---> 显示页面  业务逻辑
    javaBean
    
    
    Model2
    jsp-->页面显示
    servlet -->业务逻辑
    javaBean
    
    
    
    servlet:
    01.实现类servlet接口的类 就是 servlet  !  我们常认为的!
    02.就是一个servlet接口!
    
    实现servlet的三种方式
    01.实现Servlet接口
    02.继承GenericServlet
    03.继承 HttpServlet    常用的
    
    HttpServlet--》继承GenericServlet--》实现Servlet接口
    
    
    servlet的生命周期:
    1.客户端发送请求---》servlet
    2.根据用户的请求 查询对应的servlet
    3.加载servlet到内存中
    4.servlet实例化--》调用init()初始化servlet
    5.根据用户的请求方式,service()来派发到不同的方法处理(doGet(),doPost())
    6.服务器关闭,执行destroy()销毁servlet
    
    */

     sevlet的功能:

     01.接收用户的请求   post   get  文件上传  下载

     02.处理请求  取得前台的值  调用后台service层的代码

     03.返回响应   重定向   转发  错误界面

    /*
     * 实现servlet的三种方式
     * 01.实现Servlet接口
     * 02.继承GenericServlet抽象类
     * 03.继承HttpServlet抽象类   常用的方式
     * 
     * HttpServlet     继承  GenericServlet  
     * GenericServlet  实现   Servlet 接口
     * 
     * 
     * HttpServletRequest   继承了 ServletRequest
     * HttpServletResponse  继承了 ServletResponse
     */
    public class MyServlet extends HttpServlet { //常用的方式
        @Override
        public void init(ServletConfig config) throws ServletException {
            System.out.println("初始化信息  Init   项目启动的时候不会初始化  " +
                    "用户访问servlet的时候实例化 只被 执行一次");
        }
    
        @Override
        public void service(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
        System.out.println("派发器 用户每请求一次,就会执行一次,接收用户的请求时get还是post");
           super.service(request, response);  //必须是 调用 父类的service方法 否则 死循环!
        }
        
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            System.out.println("这是一个DoGet请求  只要是get请求 每次都执行");
        }
    
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            System.out.println("这是一个DoPost请求 ");
        }
    
        @Override
        public void destroy() {
            System.out.println("关闭服务器的时候 销毁  destroy  只被 执行一次");
        }
    }
    创建一个MyServlet
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="3.0" 
        xmlns="http://java.sun.com/xml/ns/javaee" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
        http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
        
        <!--配置servlet -->
        <servlet> <!-- 定义servlet -->
          <servlet-name>myServlet</servlet-name>
          <servlet-class>cn.bdqn.servlet.MyServlet</servlet-class>
        </servlet>
        
        <servlet-mapping>
          <servlet-name>myServlet</servlet-name>
          <url-pattern>/myServlet</url-pattern>  <!-- 控制用户的请求路径 -->
        </servlet-mapping>
        
        
      <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
    </web-app>
    web.xml文件的配置

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <base href="<%=basePath%>">
        
        <title>My JSP 'index.jsp' starting page</title>
        <meta http-equiv="pragma" content="no-cache">
        <meta http-equiv="cache-control" content="no-cache">
        <meta http-equiv="expires" content="0">    
        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
        <meta http-equiv="description" content="This is my page">
        <!--
        <link rel="stylesheet" type="text/css" href="styles.css">
        -->
      </head>
      
      <body>
      
    <form action="myServlet" method="post">
       <button type="submit">提交</button>
    </form>
      </body>
    </html>
    创建一个jsp页面

    运行之后后台的输出结果

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="3.0" 
        xmlns="http://java.sun.com/xml/ns/javaee" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
        http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
        
        <!--配置servlet -->
        <servlet> <!-- 定义servlet -->
          <servlet-name>myServlet</servlet-name>
          <servlet-class>cn.bdqn.servlet.MyServlet</servlet-class>
        </servlet>
        
        <servlet-mapping>
          <servlet-name>myServlet</servlet-name>
          <url-pattern>/jsp/</url-pattern>  <!-- 控制用户的请求路径 -->
        </servlet-mapping>
        <!-- 
        url-pattern的四种匹配模式       / 代表项目的根目录
        01.精确匹配               /myServlet   ==>  localhost:8080/项目名/myServlet
        02.全局匹配  /*   匹配到项目下的 所有请求
           localhost:8080/项目名/sasasa  能匹配
           localhost:8080/项目名/1234  能匹配
        03.后缀匹配      *.do  前面不管输入的是什么,但是必须有.do
        04.目录匹配   /jsp/*    ===》localhost:8080/项目名/jsp/随便输入
         -->
        
      <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
    </web-app>
    web.xml文件中设置url-pattern的匹配模式
     <!--配置servlet -->
        <servlet> <!-- 定义servlet -->
          <servlet-name>myServlet</servlet-name>
          <servlet-class>cn.bdqn.servlet.MyServlet</servlet-class>
          <!--初始化需要的参数信息  -->
          <init-param>
           <param-name>name</param-name>
           <param-value>小黑</param-value>
          </init-param>
        </servlet>
        
        <servlet-mapping>
          <servlet-name>myServlet</servlet-name>
          <url-pattern>/MyServlet</url-pattern>  <!-- 控制用户的请求路径 -->
        </servlet-mapping>
    初始化参数的配置web.xml文件
     @Override
        public void init(ServletConfig config) throws ServletException {
            String initParameter = config.getInitParameter("name");
            System.out.println("初始化的参数是:"+initParameter);
            System.out.println("初始化信息  Init   项目启动的时候不会初始化  " +
                    "用户访问servlet的时候实例化 只被 执行一次");
        }
    修改对应的MyServlet文件中的init方法

    现在我们在MyServlet中可以访问初始化的参数了!

    但是如果后续我又创建了其他的Servlet,我还想用到初始化参数,而且初始化参数都是一致的! 怎么办?难道在每个servlet节点下面都创建init-param吗?

    不需要  我们只需要 配置 context-param节点

    <!--初始化ServletContex的参数信息   所有的servlet共享的参数 -->
        <context-param>
        <param-name>name</param-name>
        <param-value>小黑</param-value>
        </context-param>
    web.xml文件中新增
    public class MyServlet2 extends HttpServlet {
        /*
         * ServletContext:多个servlet共享的资源!
         * 如果我们把每一个Servlet当成一个局部变量,
         * 那么ServletContext就是一个全局的!
         */
        @Override
        public void init(ServletConfig config) throws ServletException {
            String initParameter = config.getServletContext().getInitParameter("name");
            System.out.println("MyServlet2初始化的参数是:"+initParameter);
        }
    
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            String initParameter =request.getServletContext().getInitParameter("name");
            System.out.println("MyServlet2初始化的参数是:"+initParameter);
            System.out.println("这是一个DoGet请求  只要是get请求 每次都执行");
        }
    }
    创建一个新的Servlet获取公共的初始化参数,必须要在web.xml文件中配置新创建的servlet节点
    @Override
        public void init(ServletConfig config) throws ServletException {
             String initParameter =config.getServletContext().getInitParameter("name");
            System.out.println("MyServlet初始化的参数是:" + initParameter);
            System.out.println("MyServlet初始化信息  Init   项目启动的时候不会初始化  "
                    + "用户访问servlet的时候实例化 只被 执行一次");
        }
    修改之前的Servlet中的init方法

    在浏览器中 分别输入两个servlet的地址,查看效果 都会获得初始化的参数

     

     

  • 相关阅读:
    大前端的自动化工厂(1)——Yeoman
    推荐两个漂亮的编程字体
    javascript基础修炼(3)—What's this(下)
    javascript基础修炼(2)——What's this(上)
    javascript基础修炼(1)——一道十面埋伏的原型链面试题
    2018年8月中级前端开发推荐书籍
    React组件方法中为什么要绑定this
    Angularjs进阶笔记(2)-自定义指令中的数据绑定
    Angularjs1.X进阶笔记(1)—两种不同的双向数据绑定
    mysql多表查询
  • 原文地址:https://www.cnblogs.com/xtdxs/p/7094831.html
Copyright © 2011-2022 走看看