java Web复习整理(Servlet)

servlet

做java有一段时间了,发现大多数时间都是在机械式的,条件反射一般的开发功能,慢慢的忘了一些底层的原理,最近抽时间总结一下基础的知识。

什么是Servlet

说的java web 开发就不得不提到servlet,那么什么是servlet呢?

  1. servlet是JavaEE的规范,规范就是接口。
  2. servlet是javaWeb的三个核心组件之一,三大核心组件分别是Servlet,Filter过滤器和Listener监听器。
  3. servlet接收客户端发送的请求,并且返回数据给客户端。

手动实现servlet程序

手动实现servlet程序,实现前端的请求发送到后台需要如下操作

  1. 新建一个MyServlet类实现Servlet 接口
  2. 实现Servlet接口的方法,对service 方法做修改
  3. 在web.xml中配置创建的MyServlet

```java
public class MyServlet implements Servlet {
    
    
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
    
    

    }

    @Override
    public ServletConfig getServletConfig() {
    
    
        return null;
    }

    @Override
    //客户端根据请求地址发送请求后,进入后台的service方法
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
    
    
        System.out.println("myservlet 进入到service方法");
    }

    @Override
    public String getServletInfo() {
    
    
        return null;
    }

    @Override
    public void destroy() {
    
    

    }
}

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <servlet>
    	<!--起一个名称-->
        <servlet-name>myServlet</servlet-name>
        <!--自己手动创建的servelt类-->
        <servlet-class>com.myTest.MyServlet</servlet-class>
    </servlet>
     <!--配置拦截客户端发过来的请求路径-->
    <servlet-mapping>
        <!--使用哪个servlet拦截这个路径,对应上面的servlet-name-->
        <servlet-name>myServlet</servlet-name>
        <!--该servlet拦截的路径-->
        <url-pattern>/</url-pattern>
        <!-- /  拦截的请求对应的是http://ip:port/工程名   下的所有的请求-->
        <url-pattern>/myservlet</url-pattern>
         <!-- /  拦截的请求对应的是http://ip:port/工程名/myservlet   下的所有的请求-->
    </servlet-mapping>
<!--一般来说一个端口下只有一个正在运行的程序-->
</web-app>

请求路径:
在这里插入图片描述
运行结果:
在这里插入图片描述
表明客户端通过请求被 myServlet接收对了请求,然后进入到service方法中了。

servlet生存周期

1.构造方法
2.执行init方法 ----第一二步当创建servlet时会调用
3.执行service方法 -----每次接收到请求的时候调用
4执行destory方法 ----web工程停止的时候调用

servlet处理post和get请求

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
 <form action="http://localhost:8080/Servlet01/myservlet" method="post">
   姓名<input type="text" name="name" value="张三">
   爱好<input type="text" name="hobby" value="篮球">
   <input type="submit" name="提交">
 </form>
  </body>
</html>
 public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
    
    
        System.out.println("myservlet 进入到service方法");
        //servletRequest请求没有getMethod方法,所以要强转一下
        HttpServletRequest req=(HttpServletRequest)servletRequest;
        String method=req.getMethod();
        System.out.println("method"+method);
        if(method.equals("post")){
    
    
            System.out.println("当前请求是"+method+"请求");
        }else{
    
    
            System.out.println("当前请求是"+method+"请求");
        }
    }

servlet 接收并处理不同的请求,本质就是根据方法获取请求的类型,然后进行不同的操作。但是在实际业务中并不是这么用的实际开发 中使用HttpServlet更多一些

Servlet的类的继承关系

在这里插入图片描述
在上面的GenericServlet中提到了ServletConfig类,下面对ServletConfig进行讲解

什么是ServletConfig

ServletConfig是由tomcat创建的,当每次由请求到达tomcat 服务器的时候,tomcat创建Servlet程序,Servlet程序创建时,回生成一个ServletConfig,来让我们对Servlet的一些配置信息进行操作

ServletConfig的作用

1.获取servlet的名称,即标签中的属性
2.获取servlet的初始化参数,即标签中的属性的值
3.获取ServletContext

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <context-param>
        <param-name>userName</param-name>
        <param-value>zhangsan</param-value>
    </context-param>
    <servlet>
        <servlet-name>myServlet</servlet-name>
        <servlet-class>com.myTest.MyServlet</servlet-class>
        <init-param>
            <param-name>student</param-name>
            <param-value>name</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>myServlet</servlet-name>
        <url-pattern>/myservlet</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>TestHttpServlet</servlet-name>
        <servlet-class>com.myTest.TestHttpServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>TestHttpServlet</servlet-name>
        <url-pattern>/a</url-pattern>
    </servlet-mapping>
</web-app>
public class MyServlet implements Servlet {
    
    
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
    
    
        ;
        ;
        System.out.println("servletname="+servletConfig.getServletName());
        System.out.println("servletname="+servletConfig.getInitParameter("student"));
        System.out.println("servletname="+servletConfig.getServletContext());
    }

    @Override
    public ServletConfig getServletConfig() {
    
    
        return null;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
    
    
        System.out.println("myservlet 进入到service方法");
        HttpServletRequest req=(HttpServletRequest)servletRequest;
    String method=req.getMethod();
        System.out.println("method"+method);
        if(method.equals("post")){
    
    
        System.out.println("当前请求是"+method+"请求");
    }else{
    
    
        System.out.println("当前请求是"+method+"请求");
    }
}

    @Override
    public String getServletInfo() {
    
    
        return null;
    }

    @Override
    public void destroy() {
    
    

    }
}

在这里插入图片描述

什么是 ServletContext

1.ServletContext是一个接口,表示一个工程的上下文对象
2.一个工程只有一个ServletContext上下文对象,只有一个ServletContext对象实例,所有servlet共享
3.servletContext是一个域对象
4.servletContext对象在工程启动是创建,工程地址是销毁

什么是域对象
1.域对象可以像Map一样存取数据
2.这个域对象的范围就是整个工程

                                 存                             取                               删除
   Map						get()  						put()                           remove()
  域对象				    getAttribute()			    setAttribute()                removeSetAttribute()

ServletContext的作用

1.获取web.xml中的context-param参数的值
2.获取当前的工程路径
3.获取项目部署在服务器上的绝对路径
4.像Map一样存取数据

public class ContextServlet extends HttpServlet {
    
    
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
    
        getServletConfig();
        ServletContext context=getServletContext();
        System.out.println("获取context-param的值"+context.getInitParameter("userName"));
        System.out.println("获取context-param的值"+context.getInitParameter("password"));
        System.out.println("获取项目的工程路径"+context.getContextPath());
        System.out.println("获取项目部署在服务器上的绝对路径"+context.getRealPath("/index.jsp"));
        //往ServletContext中存值
        context.setAttribute("key","key1");
    }

}
public class ContextServlet2 extends HttpServlet {
    
    
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
    
        ServletContext context = getServletContext();
        //先要请求context1
        System.out.println(context.getAttribute("key")); ;
    }
}


  <context-param>
        <param-name>userName</param-name>
        <param-value>zhangsan</param-value>
    </context-param>
    <context-param>
        <param-name>password</param-name>
        <param-value>root</param-value>
    </context-param>
    <servlet>
        <servlet-name>ContextServlet</servlet-name>
        <servlet-class>com.myTest.ContextServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>ContextServlet</servlet-name>
        <url-pattern>/context1</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>ContextServlet2</servlet-name>
        <servlet-class>com.myTest.ContextServlet2</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>ContextServlet2</servlet-name>
        <url-pattern>/context2</url-pattern>
    </servlet-mapping>

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Insect_boy/article/details/110058912