首页 > 技术文章 > servlet怎么实现第一个程序和实现下载文件

yunjie0930 2021-03-02 22:04 原文

简单介绍一下servlet是什么:1:Servlet是sun公司提供的一门用于开发动态web资源的技术

              2:我们若想用发一个动态web资源,需要完成以下2个步骤:

             第一步:1、编写一个Java类,实现servlet接口。
             第二步:2、把开发好的Java类部署到web服务器中。
              按照一种约定俗成的称呼习惯,通常我们也把实现了servlet接口的java程序,称之为Servlet

             //结合自身和其他大佬的思想

  servlet的生命周期:servlet的生命周期分为五步:第一步:加载类 

                            第二步:实例化(给类分配空间)

                         第三步:初始化(为对象赋值)

                         第四步:请求处理

                         第五步:销毁

1:准备工作:

   创建一个web项目:

      导入servlet依赖:

 <dependency>
               <groupId>javax.servlet</groupId>
               <artifactId>javax.servlet-api</artifactId>
               <version>4.0.1</version>
               <scope>provided</scope>
           </dependency>
           <dependency>
               <groupId>javax.servlet.jsp</groupId>
               <artifactId>javax.servlet.jsp-api</artifactId>
               <version>2.3.1</version>
               <scope>provided</scope>
           </dependency>
           <dependency>
               <groupId>javax.servlet.jsp.jstl</groupId>
               <artifactId>jstl-api</artifactId>
               <version>1.2</version>
           </dependency>
           <dependency>
               <groupId>org.apache.taglibs</groupId>
               <artifactId>taglibs-standard-impl</artifactId>
               <version>1.2.5</version>
           </dependency>

      配置tomcat环境:

          tomcat从http://tomcat.apache.org/下载直接解压即可

          然后到idea里面配置tomcat环境可参考:https://blog.csdn.net/Grsu_M/article/details/109175915来配置

 

      开始我们的第一个servlet程序:

      1:先创建一个类来继承 HttpServlet

      然后重写doGet方法和doPost方法:

public class HelloServlet  extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        PrintWriter writer = resp.getWriter();
        writer.print("Hello Servlet");
    }

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

  2:然后到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"
         metadata-complete="true">
  <servlet>
          <!--  name可以随意 class里面接类名  -->
    <servlet-name>path</servlet-name>
    <servlet-class>com.kuang.File.HelloServlet</servlet-class>
  </servlet>
            <!-- 这里的name要和上面的相互对应  pattern是路径 -->
  <servlet-mapping>
    <servlet-name>path</servlet-name>
    <url-pattern>/path</url-pattern>
  </servlet-mapping>
</web-app>

 3:开启tomcat 等待加载完成

    然后打开浏览器搜索:http://localhost:8080/servletDay2_war/path

    分析一下:

        1:localhost是本机名称

        2:8080是端口号

        3:severletDay2_war是tomcat配置的路径

        4:path是web.xml里面配置的文件

        这样我们的第一个servlet程序就运行成功了

    下面我们来实现怎么样用servlet来创建一个下载文件:

                            1:和之前一样创造web项目 导入依赖 配置tomcat(如果是新项目 那么tomcat里面的配置也需要改变)

                            2:创建一个FileServlet来继承HttpServlet来重写doGet方法和doPost方法:

public class FileServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    }

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

     然后来由代码介绍怎么实现:

public class FileServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      //把图片路径写死 String path
="C:\\Users\\杰崽\\Desktop\\数据结构加算法\\servletday1\\servletDay2\\\\src\\\\main\\\\java\\com\\kuang\\servletday2\\51.png";
      //就是取一个文件完整路径中的文件名,譬如 D:\img\aaa.jpg,我们要得到aaa.jpg.如果不+1 得到的就包括\本身成了\aaa.jpg
    String substring
= path.substring(path.lastIndexOf("\\")+1);
      //URLEncode中的encode方法来防止文件有中文统一转换成UTF-8 resp.setHeader(
"Content-Disposition","attachment;substring="+ URLEncoder.encode(substring,"UTF-8"));
       //io流 FileInputStream fileOutputStream
=new FileInputStream(path); int len=0; byte[] a=new byte[1024];
       //用于输出字符流数据或者二进制的字节流数据都可以 ServletOutputStream outputStream
= resp.getOutputStream(); while((len=fileOutputStream.read(a))>0){ outputStream.write(a,0,len); }
        //关闭流 fileOutputStream.close(); outputStream.close(); } @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }

   然后配置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"
         metadata-complete="true">
  <servlet>
          <!--  name可以随意 class里面接类名  -->
    <servlet-name>img</servlet-name>
    <servlet-class>com.kuang.File.FileServlet</servlet-class>
  </servlet>
            <!-- 这里的name要和上面的相互对应  pattern是路径 -->
  <servlet-mapping>
    <servlet-name>img</servlet-name>
    <url-pattern>/img</url-pattern>
  </servlet-mapping>
</web-app>

      !!!最后启动tomcat 成功后转换到网站输入:http://localhost:8080/servletDay2_war/img即可访问下载文件

    希望教程对你有用 servlet小萌新报道

推荐阅读