Java Web系列:Java Web 项目基础
1.Java Web 模块结构JSP文件和AXPX文件类似,路径和URL一一对应,都会被动态编译为单独class。Java Web和ASP.NET的核心是分别是和接口,因此无论是基础的Page文件(JSP、ASPX)方式还是后来发展的MVC方式(Spring MVC、ASP.NET MVC)都是基于核心接口的基础上再次封装和扩展(、)。 除JSP文件外,其他全部文件部署在应用目录的子目录下,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中的等,Java Web中的是我们必须了解和掌握的。 |--Assembly Root |---WEB-INF/ |--web.xml |--lib/ |--classes/
2.Java Web项目的基本结构[Eclipse Dynamic Web Project]项目 (1)可以配置需要编译的源码目录和输出目录,默认编译src目录下的源文件到目录下。 (2)可以配置WEB-INF的根目录,默认为。 (3)可以选择是否生成默认文件。 我们创建一个命名为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项目的主要结构如下(参考2): |--root
|--
|--/
|--main/
|--java/
|--resources/
|--webapp/
|--test/
|--java/
|--resources
|--/
|--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
Maven的配置文件pom.xml: 4.servlet基础正如ASP.NET的核心是一样,Java Web的核心是接口,位于javax.servlet命名空间中。的概念可以参考ASP.NET的,Servlet中的各种可以参考ASP.NET HttpApplicaiton中类似的。无论是Java还是.NET的Web技术,都是基于HTTP协议的具体实现。Java Web和ASP.NET中的一些核心项对应如下: 用于简化web.xml配置的Servlet的注解(3.0开始支持,在ASP.NET中没有对应项): (1)WebServlet:作用在javax.servlet.http.HttpServlet的实现类上。 (2)WebFilter:作用在javax.servlet.Filter的实现类上。 (3)
5.自定义Session在存储安全性要求较高的会话信息方面是必不可少的,Session当然绝对不是用来存储用户登录状态的,但类似验证码等敏感信息却必须存储在Session中。对于分布式Web应用自定义Session支持独立的状态服务器或集群是必须的。 ASP.NET通过通过配置文件配置实际的Session提供程序,Session提供程序实现了,因此在ASP.NET中实现自定义Session是通过继承SessionStateStoreProviderBase实现,配置Session是通过。ASP.NET自定义session的代码参考github上的开源项目。 同理,Java Servlet中使用自定义Session通过可以实现。由于不同的servlet容器对Session的实现不同,所以通用性最好的方式是继承重写方法返回自定义的Session对象。采用了,HttpServletRequestWrapper采用了,可以通过《Head First 设计模式》阅读模式的相关内容。 (1)首先自定义继承HttpSession的MySession(为了便于演示,仅包装了容器的session并转发调用)。 <span style="color: #0000ff;">import<span style="color: #000000;"> javax.servlet.ServletContext;
<span style="color: #0000ff;">import<span style="color: #000000;"> javax.servlet.http.HttpSession; <span style="color: #0000ff;">public <span style="color: #0000ff;">class MySession <span style="color: #0000ff;">implements<span style="color: #000000;"> HttpSession {
} (2)自定义继承HttpServletRequestWrapper的MyRequest <span style="color: #0000ff;">public <span style="color: #0000ff;">class MyRequest <span style="color: #0000ff;">extends<span style="color: #000000;"> HttpServletRequestWrapper {
<span style="color: #000000;"> }
} (3)自定义Filter将Request包装为MyRequest <span style="color: #0000ff;">import<span style="color: #000000;"> javax.servlet.Filter;
<span style="color: #0000ff;">import<span style="color: #000000;"> javax.servlet.FilterChain; <span style="color: #0000ff;">import<span style="color: #000000;"> javax.servlet.FilterConfig; <span style="color: #0000ff;">import<span style="color: #000000;"> javax.servlet.ServletException; <span style="color: #0000ff;">import<span style="color: #000000;"> javax.servlet.ServletRequest; <span style="color: #0000ff;">import<span style="color: #000000;"> javax.servlet.ServletResponse; <span style="color: #0000ff;">import<span style="color: #000000;"> javax.servlet.annotation.WebFilter; <span style="color: #0000ff;">import<span style="color: #000000;"> javax.servlet.http.HttpServletRequest; @WebFilter("/*"<span style="color: #000000;">)
<span style="color: #000000;">
<span style="color: #000000;"> } 通过注解配置了Filter,也可以通过原始的web.xml方式配置。 6.参考1.https://docs.oracle.com/javaee/7/tutorial/packaging003.htm 2.http://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html 3.https://docs.oracle.com/javaee/7/tutorial/webapp005.htm 小结:你至少应该知道的: (1)配置文件:ASP.NET的web.config和Java的web.xml (2)Web核心:ASP.NET的IHttpHandler接口和Java的Servlet接口 (3)拦截器:ASP.NET的HttpModule和Java的Filter (4)应用程序事件:ASP.NET的HttpApplication event和Java的各种Listener (5)启动器:ASP.NET的Application_Start和Java的ServletContainerInitializer (6)引用管理:ASP.NET的Nuget和Java的Maven 感想: ASP.NET的核心对象不像Java Servlet一样,从一开始就基于接口,这是缺点。但Java Servlet的核心对象全靠容器实现,就连HttpSession同样如此,这也是缺点。比如自定义个Session十分麻烦,没有像ASP.NET一样简单配置即可。另外Servlet的一些抽象定义有点过头了,不够简洁。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |