javaWeb02-Servlet

导读:本篇文章讲解 javaWeb02-Servlet,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

本文参考了这篇博客:Servlet、Servlet容器等内容讲解 – 江清澜静 – 博客园 (cnblogs.com)

一. Servlet的创建

  1. Servlet接口的定义

  Servlet接口,GenericServlet实现类, HttpServlet实现类的关系如图所示

javaWeb02-Servlet

 

vip

   GenericServlet实现了Servlet接口,HttpServlet继承了GenericServlet。

  2. Servlet接口的实现

  HelloServlet实现Servlet接口,声明如下

public class HelloServlet implements Servlet {
    public HelloServlet() {
        System.out.println("构造器方法 HelloServlet");
    }

    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("初始化方法 init");
    }

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

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("处理请求 service");
    }

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

    @Override
    public void destroy() {
        System.out.println("销毁 destroy");

    }
}

  注意:需要在web.xml文件中配置相关信息。

  web.xml文件声明如下

    <servlet>
        <servlet-name>Hello</servlet-name>
        <servlet-class>com.hsp.servlet.HelloServlet</servlet-class>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>Hello</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>

  <servlet>标签中:<servlet-class>标签是需要访问的servlet程序的位置【包名 . 类名】;<servlet-name>标签是给这个servlet程序起一个别名

  <servlet-mapping>标签:建立 url 和 servlet程序的映射关系

           <servlet-name>标签 即 在<servlet>标签中的<servlet-name>给servlet程序取的别名;

           <url-pattern>标签 就是 加上了一截其他的字符串,实际上通过浏览器翻出请求后,Tomcat将应用上下文路径截掉只剩下一个字符串作为servlet的映射匹配。

           url-pattern的理解:参看这篇博客(229条消息) 理解servlet的url-pattern_ApplauseWow的博客-CSDN博客

           上下文路径的理解:参看这篇博客(229条消息) 理解上下文路径问题_零零JA的博客-CSDN博客_上下文路径

  具体映射流程如下:

    当用户通过浏览器直接访问:localhost:8080/javaWeb01/hello后,

vip

    tomcat服务器做了如下操作

vip

    运行结果如下

构造器方法 HelloServlet
初始化方法 init
处理请求 service

    当关闭web项目时,才会打印销毁 destroy。

   3. HelloServlet处理请求

  3.1 在web目录下创建pages文件夹,并在pages目录下,创建test.html

javaWeb02-Servlet

   test.html【POST请求】声明如下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

    <form action="http://localhost:8080/javaWeb01/hello" method="POST">
        用户: <input type="text" name="username"/><br/>
        密码: <input type="text" name="password"/><br/>
        <input type="submit" value="提交">
    </form>

</body>
</html>

  test.html【GET请求】声明如下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

    <form action="http://localhost:8080/javaWeb01/hello" method="GET">
        用户: <input type="text" name="username"/><br/>
        密码: <input type="text" name="password"/><br/>
        <input type="submit" value="提交">
    </form>

</body>
</html>

  HelloServlet实现类通过service()方法处理请求,service()方法声明如下

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("处理请求 service");
        servletRequest.setCharacterEncoding("utf-8");
        String username = servletRequest.getParameter("username");
        String password = servletRequest.getParameter("password");
        System.out.println(username + ", " + password);
    }

  两次请求得到的结果:

处理请求 service
Tom, 123
处理请求 service
Tom, 123

  问题:如何区分这两种不同的请求呢?

   将 ServletRequest  servletRequest 对象强转成 HttpServletRequest类型,调用HttpServletRequest的getMethod()方法

  此时service()方法声明如下

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("处理请求 service");
        servletRequest.setCharacterEncoding("utf-8");
        HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
        String method = httpServletRequest.getMethod();
        if(method.equals("GET")){
            // 处理GET请求
            doGet();
        }else if(method.equals("POST")){
            // 处理POST请求
            doPost();
        }

    }

    // 处理GET请求
    public void doGet(){
        System.out.println("这是一个get请求");
    }

    // 处理POST请求
    public void doPost(){
        System.out.println("这是一个post请求");
    }

  分别处理这两种不同的请求,运行结果如下

处理请求 service
这是一个get请求
处理请求 service
这是一个post请求

  目前,编写servlet程序,最常用的就是继承HttpServlet实现类

  如HelloServlet2声明如下

public class HelloServlet2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("get请求:");
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        System.out.println(username + "," + password);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("post请求:");
        req.setCharacterEncoding("utf-8");
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        System.out.println(username + "," + password);
    }
}

 二. Servlet的作用

  javaWeb02-Servlet

 

 

 

 

 

 

 

 

 

  

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/98929.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!