手动创建一个java web应用的目录结构是什么意思 老师布置的作业

手动创建一个java web应用的目录结构是什么意思 老师布置的作业,第1张

您好,使用上了maven,发现通过不能方式建立出来的web应用程序目录结构基本都不一样,既然每次都要到网上搜索如何建立maven管理的Web应用程序,不如自己找百度谷歌一下。

找了半天 ,感觉比较好的maven管理的web应用程序目录结构是这个:

├── pomxml

└── src

├── main

│ ├── java

│ │ └── mygroup

│ │ ├──

controller

│ │ │ ├──

HomeControllerjava

│ │ │ └──

PersonControllerjava

│ │ ├── dao

│ │ │ └──

PersonDaojava

│ │ └──

model

│ │ └──

Personjava

│ ├── resources

│ │ ├──

dbproperties

│ │ ├──

log4jxml

│ │ └── META-INF

│ │ └──

persistencexml

│ └── webapp

│ ├──

indexhtml

│ ├── META-INF

│ │ ├──

contextxml

│ │ └──

MANIFESTMF

│ ├──

resources

│ │ └── css

│ │ └──

screencss

│ └── WEB-INF

│ ├──

spring

│ │ ├──

app

│ │ │

├── controllersxml

│ │ │

└── servlet-contextxml

│ │ ├──

dbxml

│ │ └──

root-contextxml

│ ├──

views

│ │ ├──

editjsp

│ │ ├──

homejsp

│ │ └──

listjsp

│ └──

webxml

└── test

├── java

│ └── mygroup

│ ├──

controller

│ │ ├──

DataInitializerjava

│ │ ├──

HomeControllerTestjava

│ │ └──

PersonControllerTestjava

│ └── dao

│ └──

PersonDaoTestjava

└── resources

├──

dbproperties

├──

log4jxml

├──

test-contextxml

└──

test-dbxml

在上篇文章《SpringBoot应用启动原理(一) 将启动脚本嵌入jar》中介绍了SpringBoot如何将启动脚本与Runnable Jar整合为Executable Jar的原理,使得生成的jar/war文件可以直接启动

本篇将介绍SpringBoot如何扩展URLClassLoader实现嵌套jar的类(资源)加载,以启动我们的应用。

首先,从一个简单的示例开始

buildgradle

WebAppjava

执行 gradle build 构建jar包,里面包含 应用程序 第三方依赖 以及SpringBoot 启动程序 ,其目录结构如下

查看MANIFESTMF的内容(MANIFESTMF文件的作用请自行GOOGLE)

可以看到,jar的启动类为 orgspringframeworkbootloaderJarLauncher ,而并不是我们的 commanerfanSpringBoottheoryWebApp ,应用程序入口类被标记为了Start-Class

jar启动并不是通过应用程序入口类,而是通过JarLauncher代理启动。其实SpringBoot拥有3中不同的Launcher: JarLauncher 、 WarLauncher 、 PropertiesLauncher

SpringBoot使用Launcher代理启动,其最重要的一点便是可以自定义ClassLoader,以实现对jar文件内(jar in jar)或其他路径下jar、class或资源文件的加载

关于ClassLoader的更多介绍可参考 《深入理解JVM之ClassLoader》

SpringBoot抽象了Archive的概念,一个Archive可以是jar(JarFileArchive),可以是一个文件目录(ExplodedArchive),可以抽象为统一访问资源的逻辑层。

上例中,spring-boot-theory-100jar既为一个JarFileArchive,spring-boot-theory-100jar!/BOOT-INF/lib下的每一个jar包也是一个JarFileArchive

将spring-boot-theory-100jar解压到目录spring-boot-theory-100,则目录spring-boot-theory-100为一个ExplodedArchive

按照定义,JarLauncher可以加载内部 /BOOT-INF/lib 下的jar及 /BOOT-INF/classes 下的应用class

其实JarLauncher实现很简单

其主入口新建了JarLauncher并调用父类Launcher中的launch方法启动程序

再创建JarLauncher时,父类ExecutableArchiveLauncher找到自己所在的jar,并创建archive

在Launcher的launch方法中,通过以上archive的getNestedArchives方法找到/BOOT-INF/lib下所有jar及/BOOT-INF/classes目录所对应的archive,通过这些archives的url生成LaunchedURLClassLoader,并将其设置为线程上下文类加载器,启动应用

至此,才执行我们应用程序主入口类的main方法,所有应用程序类文件均可通过/BOOT-INF/classes加载,所有依赖的第三方jar均可通过/BOOT-INF/lib加载

在分析LaunchedURLClassLoader前,首先了解一下URLStreamHandler

java中定义了URL的概念,并实现多种URL协议(见 URL ) >

建立一个空的java项目, 在select type那里, 选择maven module, 项目名字什么的, 随便起一个

在下一个页面里, 什么都不改, 什么都不选, 点finish

默认打开了pomxml, 这个是maven的配置文件, 为了让程序能够自动倒入spring mvc和jsp, selvlet等的依赖

等待Intellij自动导入里面写的包

确保我们有一个跟src目录平级的web目录, 然后在里面简历一个目录叫WEB-INF 说到这里, 就要说一下tomcat的webapp目录结构了 首先要有一个WEB-INF目录, 然后在WEB-INF里, 有classes目录: 存放所有代码的目录; lib目录: 存放所有jar文件; webxml文件, 存放webapp的配置

编辑webxml文件, 改成如下内容:

这段的内容, 是将url跳转到appServlet配置里, 在appServlet的配置里, 使用servlet-contextxml

servlet-contextxml内容如下:

这段的大概意思是, 自动扫描包”medavidxLearnJava”来找到controller定义 同时, controller都使用@Controller来定义 bean里的定义, 表明所有的View文件都到/WEB-INF/views目录来找, 后缀都为jsp

在medavidxLearnJava包里, 定义一个HomeController类, 这里给一个范例:

看完了controller的定义, 我们再来看看view文件: homejsp:

这里使用了jstl, 以前写过jsp的童鞋, 应该一看就明白了

代码工作都完成啦, 下面就是部署了

编辑server文件(%tomcathome%\conf\serverxml)

我们打算建立一个myjsp的虚拟目录,只要在%tomcathome%\conf\serverxml文件,在<host>标签中加入文件中加入如下代码即可:

<Context docBase="D:\project\student" reloadable="true" debug="0" path="/test"/>

注意,此时path一定要写,因为我们此时没有新建xml文件了,所以一定要指明web

/-----------------------------------------------/

这样就可以将我们设置的path来表示docBase物理路径。

不是的,你要将网站编译并且导出来的,先看webapp目录结构:

webapp目录下包含有你所有的发布网站根目录,比如我贴出来的这个目录,有一个examples目录,这就是一个发布网站(我安装tomcat时带的例子网站),要访问此站点,要使用url:>

你会发现一个WEB-INF目录,这里放着配置文件以及变编译好的类文件(本人认为其他目录以及文件完全按照你的项目结构是可以的,但是WEB-INF目录下有一个classes目录):

里面放着项目中java类的编译后的class文件,你要发布项目,就将你的java类依照类的包结构编译并拷贝到这个目录就可以了:

,eclipse有导出网站发布包的工具,打包工作其实只要交给eclipse就可以了,要导出发布包,你可以参考:>

1 说一下webapp目录

tomcat下的webapp 目录是项目部署的地方

tomcat 55 webapp 目录包含ROOT、tomcat-docs和你打包发布的war和文件夹

tomcat 6下webapp 目录包含ROOT、docs、examples、manager和你打包发布的war和文件夹

2 说一下研究

你自己拷贝的话,一般里面都有有jsp和class文件。想自己研究的话,class文件最好用反编译工具,反编译一下成java文件才能看见源码(注:不是完全能够反编译成原来的java文件)。

3 说一下会不会发现

实话实说,我是一个程序员,我们每天用tomcat和weblogic服务器部署项目,其实拷贝走研究的话,如果服务器上没有装监控软件的话,是不会被发现的。但是大部分都没有监控的,所以说是不会有记录的。但是你用远程登录后,要及时断开,否则你远程的时候会有你电脑的ip地址。别人会知道。

以上就是关于手动创建一个java web应用的目录结构是什么意思 老师布置的作业全部的内容,包括:手动创建一个java web应用的目录结构是什么意思 老师布置的作业、SpringBoot应用启动原理(二) 扩展URLClassLoader实现嵌套jar加载、如何用intelij分析spring程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9809610.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)