Java Web简介以及如何通过前端打印Maven仓库目录

    <!--动态程序Servlet的配置-->
    <!--告诉Tomcat容器,由一个Servlet程序-->
    <servlet>
        <!--Servlet的内部名称-->
        <servlet-name>Index</servlet-name>
        <!--Servlet的类名,全限定名-->
        <servlet-class>com.xunpu.IndexServlet</servlet-class>
    </servlet>
    <!--Tomcat将通过反射实例化一个Servlet对象。-->
    <!--Servlet的映射关系,告诉Tomcat容器,当用户请求一个地址的时候,使用该Servlet处理。-->
    <servlet-mapping>
        <servlet-name>Index</servlet-name>
        <url-pattern>/IndexServlet</url-pattern>
    </servlet-mapping>

一、JavaWeb简介

1.Web简介

Web程序是一种可以通过浏览器访问的应用程序。Web应用的一个最大好处是用户只需要有浏览器即可访问应用程序,无需安装其它软件。电商网站如淘宝、京东、新浪、网易等都属于Web应用程序。

2.B/S模型

B/S模型也称为浏览器-服务器模型。对应的是C/S模型即客户端-服务器模型。

B/S模型的优点:

a.具有分布式特点,可以随时随地进行查询、浏览等业务处理。

b.业务扩展简单方便,通过增加网页即可增加服务功能。

c.维护简单方便,只需要更改网页,即可实现所有用户的同步更新。

d.开发简单,共享性强。

3.动态Web

web服务器只能向客户提供静态资源,但是我们所见到地网站都不可能是静态网页。要想呈现出多姿多彩的网页,就需要动态Web技术了。

3.1 Web服务器

Web服务器是“通过HTTP协议处理请求的计算机系统”,擅长提供静态的Web页面,而不做动态内容和不再服务器上保持数据,而此时如果我们需要一个动态的页面就需要一些辅助程序来完成。

常用的主流Web服务器有:

Nginx
Apache HTTP Server
Apache Tomcat侧重点在Web页面

3.2 动态技术

CGI(Common Gateway Interface):公共网关接口
PHP(HyperText Preprocessor):超文本处理器
ASP(Active Server Page):活动服务器页面
JSP(Java Server Pages):Java服务器页面,其是简化的Servlet涉及

4.Servlet简介

Servlet是Java Servlet的简称,称为小服务程序,即用Java编写的服务端程序。主要功能在于交互式地浏览和修改数据,生成动态web内容。狭义地Servlet是Java语言实现的一个接口,广义的Servlet是指任何实现了Servlet接口的类。

4.1 优势

方便:Servlet提供了大量的实用工具例程(自动解析和解码HTML表单数据、读取和设置HTTP头、处理Cookie、跟踪会话)。

功能强大:能够直接与Web服务器进行交互,而普通的CGI程序则不能。Servlet还能在各程序之间共享数据,使得数据库连接池之类的功能很容易实现。

可移植性好。

4.2 架构

Servlet中是没有main()的,它受控于另外一个Java应用,这个应用称为容器。

4.3 Servlet的任何和规范

任务:

1.读取客户端(浏览器)发送的显式的数据。比如:网页上的HTML表单,自定义的HTTP客户端程序的表单。

2.读取客户端(浏览器)发送的隐式的HTTP请求数据。比如:cookies、媒体类型、浏览器能理解的压缩格式等。

3.处理数据并生成结果。这个过程可能需要访问数据库;执行业务逻辑;调用Web服务,或者直接计算得出对应的响应数据。

4.发送显式的数据(即文档)到客户端(浏览器)。该文档的格式可以是多种多样的,包括文本文件(HTML或XML)、二进制文件(GIF图像)、Excel等。

5.发送隐式的HTTP响应到客户端(浏览器)。这包括告诉浏览器或其它客户端被返回的文档类型(例如HTML),设置cookies和缓存数据,以及其它类似的任务。

规范: 

Java SE :JLS Java语法规范、JVMLS Java虚拟机规范

Java EE:Java Servlet API、Restfull API、JSON API JPA持久化API、EJB、XML API、WebSocket

4.4 Tomcat目录

/bin:各种操作系统下用于启动和停止Tomcat的命令文件
/conf:存放Tomcat服务器各种配置文件
/lib:存放Tomcat服务器依赖的Jar文件
/logs:存放Tomcat的日志文件。
/temp:存放Tomcat运行时的临时文件。
/webapps:发布web应用时,默认会将web应用发布到此目录中。
/work:Tomcat把由JSP生成的Servlet放于此目录中。JSP-->java类-->CLASS文件

4.5 创建Java web项目的流程

1)创建Maven的Web项目(java  html/css//js)
2)配置pom.xml
3)配置web.xml文件
4)静态代码(html/css/javascript)
5)动态代码(Java)

二、通过Servlet实现前端打印Maven目录

package com.xunpu;

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

/**
 * 1.指定发送数据的编码和内容类型
 * 2.通过req获取name属性,进而得到仓库的地址。
 * 3.定义一个StringBuilder对象sb,用于编写前端代码。
 * 4.通过仓库地址创建指定目录,并通过该目录的listFiles()得到File[]。
 * 5.如果File[]对象不为空,则依次遍历每个文件并组织相应的超链接。如果为空,则输出"暂无数据".
 * 6.最后通过resp写回sb,在前端展示。
 * 注意:多级目录下,浏览器并不识别文件分隔符,因此在写超链接的时候可以用特殊字符"_"代替,而在取的时候再替换为文件分隔符。
 */
public class MavenList extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        String repository;
        //指定发送数据的编码和内容类型
        resp.setCharacterEncoding("UTF-8");
        resp.setContentType("text/html");//文本类型的html文件
        String name=req.getParameter("name");//根据跳转的URL获取name属性值
        //将"_"替换为文件分割:浏览器HTTP协议不支持文件分隔符,所以替换为"_"
        if(name==null||name.isEmpty()){
            repository="E:"+File.separator+"Maven"+File.separator+"repository";//设置为当前仓库的根目录
        }else{
            repository="E:"+File.separator+"Maven"+File.separator+"repository"+File.separator+name.replace("_",File.separator);//取的时候要变一下“_"--"/"
        }
        StringBuilder sb=new StringBuilder();
        //前端页面
        // 根据数据编写网页html代码
            sb.append("<html>").append("<head>").append("<title>").append("Maven目录").append("</title>").append("/head");
        sb.append("<body>");
            sb.append("<a href='>").append("..").append("'>").append("..").append("</a>").append("<br>");
        //遍历指定目录
        File directory=new File(repository);
        File[] list=directory.listFiles();
        if(list!=null){
            for(File f:list){
                String filename=f.getName();
                //请求地址  http://localhost:8089/maven?name=commons-cli
                //name=name1+"/"+name2 -->浏览器不允许出现"/"(File.separator),用"_"代替,取的时候再变
                String nextName=(name==null||name.isEmpty())?filename:name+"_"+filename;//存
                sb.append("<a href='").append("maven?name=").append(nextName).append("'>").append(filename).append("</a>").append("<br>");//如果name属性不为空,则拼接在后面,便于下次访问。
            }
        }else{
            sb.append("暂无数据");
        }
        sb.append("</body>").append("</html>");
//        输出到浏览器端
        resp.getWriter().write(sb.toString());
        resp.getWriter().flush();
    }
}

在webapp/WEBINF/web.xml中配置:

    <servlet>
        <servlet-name>MavenList</servlet-name>
        <servlet-class>com.xunpu.MavenList</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>MavenList</servlet-name>
        <url-pattern>/maven</url-pattern>
    </servlet-mapping>

结果展示:

 

通过web.xml传入本地maven仓库路径,在web.xml中配置:

    <servlet>
        <servlet-name>MavenList</servlet-name>
        <servlet-class>com.xunpu.MavenList</servlet-class>
        <init-param>
            <param-name>reposity</param-name>
            <param-value>E:\Maven\repository</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>MavenList</servlet-name>
        <url-pattern>/maven</url-pattern>
    </servlet-mapping>
package com.xunpu;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
public class MavenList extends HttpServlet {
    private String reposity;
    @Override
    public void init(ServletConfig config) throws ServletException {
        super.init();
        reposity=config.getInitParameter("reposity");
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        String repository;
        //指定发送数据的编码和内容类型
        resp.setCharacterEncoding("UTF-8");
        resp.setContentType("text/html");//文本类型的html文件
        String name=req.getParameter("name");//根据跳转的URL获取name属性值
        //将"_"替换为文件分割:浏览器HTTP协议不支持文件分隔符,所以替换为"_"
        if(name==null||name.isEmpty()){
            repository=reposity;//设置为当前仓库的根目录
        }else{
            repository=reposity+File.separator+name.replace("_",File.separator);//取的时候要变一下“_"--"/"
        }
        StringBuilder sb=new StringBuilder();
        //前端页面
        // 根据数据编写网页html代码
            sb.append("<html>").append("<head>").append("<title>").append("Maven目录").append("</title>").append("/head");
        sb.append("<body>");
            sb.append("<a href='>").append("..").append("'>").append("..").append("</a>").append("<br>");
        //遍历指定目录
        File directory=new File(repository);
        File[] list=directory.listFiles();
        if(list!=null){
            for(File f:list){
                String filename=f.getName();
                //请求地址  http://localhost:8089/maven?name=commons-cli
                //name=name1+"/"+name2 -->浏览器不允许出现"/"(File.separator),用"_"代替,取的时候再变
                String nextName=(name==null||name.isEmpty())?filename:name+"_"+filename;//存
                sb.append("<a href='").append("maven?name=").append(nextName).append("'>").append(filename).append("</a>").append("<br>");//如果name属性不为空,则拼接在后面,便于下次访问。
            }
        }else{
            sb.append("暂无数据");
        }
        sb.append("</body>").append("</html>");
//        输出到浏览器端
        resp.getWriter().write(sb.toString());
        resp.getWriter().flush();
    }
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值