JSP文件和AXPX文件类似,路径和URL一一对应,都会被动态编译为单独class。Java Web和ASP.NET的核心是分别是Servlet和IHttpHandler接口,因此无论是基础的Page文件(JSP、ASPX)方式还是后来发展的MVC方式(Spring MVC、ASP.NET MVC)都是基于核心接口的基础上再次封装和扩展(DispatcherServlet、MvcHandler)。
除JSP文件外,其他全部文件部署在应用目录的WEB-INF子目录下,WEB-INF目录可以认为是ASP.NET中将web.config文件、bin目录和App_开头的运行时目录存放在了一个统一的根目录中。
Java Web的配置文件web.xml也存放在WEB-INF目录下,而ASP.NET的配置文件web.config一般直接存放在应用目录下(ASP.NET其他目录同样可以有web.config文件)。ASP.NET将所有的引用和代码生成的dll都部署在bin中,而Java Web的引用jar和生成的class分别存放在WEB-INF的子目录lib和classes中(参考1)。
综上,类似ASP.NET中的web.config、bin、App_Data等,Java Web中的WEB-INF、web.xml、lib和classes是我们必须了解和掌握的。
|--Assembly Root |---WEB-INF/ |--web.xml |--lib/ |--classes/ 2.Java Web项目的基本结构[Eclipse Dynamic Web Project]Eclipse Dynamic Web Project项目
(1)可以配置需要编译的源码目录和输出目录,默认编译src目录下的源文件到build\classes目录下。
(2)可以配置WEB-INF的根目录,默认为WebContent。
(3)可以选择是否生成默认web.xml文件。
我们创建一个命名为DynamicWP的默认生成web.xml的Dynamic Web Proejct项目。文件结构如下:
|--DynamicWP |--.settings/ |--build/ |--classes/ |--src/ |--WebContent/ |--META-INF/ |--MANIFEST.MF |--WEB-INF/ |--web.xml |--lib/在Eclipse的项目资源管理器中DyanmicWP项目的视图如下:
|--DynamicWP |--Deployment Desciptor |--JAX-WS Web Services |--Java Resources |--JavaScript Resources |--build |--WebContent |--META-INF/ |--MANIFEST.MF |--WEB-INF/ |--web.xml |--lib/ 3.Maven Web项目的基本结构鉴于目前Java IDE众多并且都有一定的拥泵,Eclipse的Java Web项目不具有可移植性。Maven即解决了项目结构的规范问题又提供了强大引用处理等强大的功能,在项目布局等方面已经是目前事实上的标准。Maven项目的主要结构如下(参考2):
|--root |--pom.xml |--src/ |--main/ |--java/ |--resources/ |--webapp/ |--test/ |--java/ |--resources |--target/Eclipse中新建一个Maven web app项目。文件结构如下:
|--MavenWP |--pom.xml |--.project |--.classpath |--.settings/ |--src/ |--target/ |--classes/ |--m2e-wtp/Eclipse4.5.1中对应的项目资源管理视图
|--MavenWP |--Deployment Desciptor/ |--Java Resources/ |--JavaScript Resources/ |--Deployed Resources/ |--src |--target |--pom.xml<project xmlns=xmlns:xsi= xsi:schemaLocation=> <modelVersion>4.0.0</modelVersion> <groupId>me.test</groupId> <artifactId>MavenWP</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <name>MavenWP Maven Webapp</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> </dependency> </dependencies> <build> <finalName>MavenWP</finalName> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.3</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build> </project>
4.servlet基础正如ASP.NET的核心是IHttpHandler一样,Java Web的核心是Servlet接口,位于javax.servlet命名空间中。Filter的概念可以参考ASP.NET的HttpModule,Servlet中的各种Listener可以参考ASP.NET HttpApplicaiton中类似的event。无论是Java还是.NET的Web技术,都是基于HTTP协议的具体实现。Java Web和ASP.NET中的一些核心项对应如下:
Java 参考3 .NET 备注
Core javax.servlet.Servlet System.Web.IHttpHandler
HTTP Request javax.servlet.ServletRequest System.Web.HttpRequest
HTTP Response javax.servlet.ServletResponse System.web.HttpResponse
Cookie javax.servlet.http.Cookie System.Web.HttpCookie
Session javax.servlet.http.HttpSession System.Web.HttpSessionState
Application javax.servlet.ServletContext System.Web.HttpApplication
Begin Request javax.servlet.Servlet.RequestDispatcher System.Web.HttpApplication.BeginRequest event
Begin\End Request javax.servlet.Servlet.ServletRequestListener System.Web.HttpApplication.BeginRequest\EndRequest event
Filter javax.servlet.Filter System.Web.IHttpModule
Application Event javax.servlet.ServletContextListener System.Web.HttpApplication.Application_Start\Application_End method
Servlet和ASP.NET的简化示意图: