您好,使用上了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程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)