[javaweb]javaweb中servlet的使用详解

servlet

sun公司提供两种实现类:

1.实现servlet接口

2.继承Httpservlet

  • sun公司用来开发动态web的一门技术
  • sun在这些API中提供了一个接口叫servlet,如果你想开发一个servlet程序,只需要完成两个小步骤。
    • 编写一个类,实现servlet类接口
    • 把开发好的java类部署到web服务器中

把实现了servlet接口的程序叫做servlet

创建一个helloservlet

导入maven依赖:

<dependencies>
  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
    <scope>test</scope>
  </dependency>

  <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
  <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>

  </dependency>

  <dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>javax.servlet.jsp-api</artifactId>
    <version>2.3.2-b01</version>
  </dependency>
</dependencies>

敲一个servlet

package com.javaweb;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

/**
 * @author panglili
 * @create 2022-07-19-8:18
 */
public class HelloServlet extends HttpServlet {
    //由于get和post只是请求的方式不一样,因此只需要实现一个,在另一个里面调用
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("******doget");
        PrintWriter writer = resp.getWriter();
        writer.print("hello,servlet");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

注册在web上

<servlet>
  <servlet-name>hello</servlet-name>
  <servlet-class>com.javaweb.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>hello</servlet-name>
  <url-pattern>/add</url-pattern>
</servlet-mapping>

6.servletContext

web容器在启动的时候,会为每个web程序都创建一个servletcontext对象,代表当前web应用。全局唯一!

  • 可以实现各个servlet之间的通信,统一的管理所有servlet的数据(一般不用此方法,增加浏览器负担)。
  • servletcontext:调用servlet实现数据共享

测试一下:

(1)创建一个servlet使用context设置属性

package com.javaweb.servlet;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @author panglili
 * @create 2022-07-19-8:18
 */
public class HelloServlet extends HttpServlet {
    //由于get和post只是请求的方式不一样,因此只需要实现一个,在另一个里面调用
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {


        ServletContext context = this.getServletContext();
        String username="ssss";
        context.setAttribute("username",username);
        System.out.println("******doget");

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

(2)创建另一个servlet使用context获取属性值

package com.javaweb.servlet;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @author panglili
 * @create 2022-07-19-16:28
 */
public class getServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext context = this.getServletContext();

        String username =(String) context.getAttribute("username");
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/html");
        resp.getWriter().print(username);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

(3)然后配置servlet在web中就可以在网页访问了

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

<servlet>
    <servlet-name>getc</servlet-name>
    <servlet-class>com.javaweb.servlet.getServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>getc</servlet-name>
    <url-pattern>/getc</url-pattern>
</servlet-mapping>

(4)在网页请求getc可以拿到hello的属性值

  • servletcontext获取web初始化参数

(1)web初始化数据

<context-param>
    <param-name>url</param-name>
    <param-value>jdbc:mysql://localhost:3306/mybatis</param-value>
</context-param>

(2)servlet中获取

package com.javaweb.servlet;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @author panglili
 * @create 2022-07-19-17:02
 */
public class ServletDemo extends HttpServlet {
    //由于get和post只是请求的方式不一样,因此只需要实现一个,在另一个里面调用
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext context = this.getServletContext();
        String url = context.getInitParameter("url");
        resp.getWriter().print(url);

        System.out.println("******doget");

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

(3)网页数据

  • servletcontext:实现页面请求转发:

(1)写请求转发的servlet

此请求被转发到getIni

package com.javaweb.servlet;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @author panglili
 * @create 2022-07-19-17:02
 */
public class ServletDemo2 extends HttpServlet {
    //由于get和post只是请求的方式不一样,因此只需要实现一个,在另一个里面调用
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext context = this.getServletContext();
        context.getRequestDispatcher("/getIni").forward(req,resp);

        System.out.println("******doget");

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

(2)web配置

请求demo2

<servlet>
    <servlet-name>demo2</servlet-name>
    <servlet-class>com.javaweb.servlet.ServletDemo2</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>demo2</servlet-name>
    <url-pattern>/demo2</url-pattern>
</servlet-mapping>

(3)网页实现

返回的是getIni数据

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值