java web开发实战经典基础篇,java web项目开发实战入门pdf
如何解决写爬虫IP受阻的问题?立即使用。
一、Java Web 模块结构
JSP文件类似于AXPX文件,路径和URL一一对应,会动态编译成单独的类。Java和ASP.NET的核心是Servlet和IHttpHandler接口,所以无论是基本的页面文件(JSP,ASPX)还是后来开发的MVC (Spring MVC,ASP.NET MVC)都是基于核心接口重新封装和扩展的(DispatcherServlet,MvcHandler)。(推荐:java视频教程)
除了JSP文件,所有其他文件都部署在应用程序目录的WEB-INF子目录中。WEB-INF目录可以看作是一个统一的根目录,其中web.config文件、bin目录和以App_开头的运行时目录都存储在ASP.NET中。
Java的配置文件web.xml也存放在WEB-INF目录下,而ASP.NET的配置文件web.config一般直接存放在应用程序目录下(ASP.NET的其他目录也可以有web.config文件)。ASP.NET的所有引用和代码生成的dll都部署在bin中,而Java Web的引用jar和生成的类分别存放在WEB-INF的子目录lib和classes中(参考1)。
综上所述,Java Web中的WEB-INF,web.xml,lib,classes类似于ASP.NET的web.config,bin,App_Data,这些都是我们必须要了解和掌握的。
-程序集根
- WEB-INF/
- web.xml
- lib/
-classes/1、WEB-INF目录:Java Web文件的根目录。
2.web.xml文件:配置文件(ASP.NET web . config)。
3.lib目录:存储类库文件(ASP.NET bin)。
4.类目录:存储类文件(ASP.NET bin)。
二、Java Web项目的基本结构[Eclipse Dynamic Web Project]
Eclipse动态Web项目项目
(1)可以配置要编译的源目录和输出目录,将src目录下的源文件默认编译为build\classes目录。
(2)可以配置WEB-INF的根目录,默认为WebContent。
(3)可以选择是否生成默认的web.xml文件。
我们创建了一个名为DynamicWP的动态Web项目,它默认生成web.xml。文件结构如下:
-动态工作流
- .设置/
-构建/
-类别/
- src/
-网页内容/
-元信息/
-清单。中频
- WEB-INF/
- web.xml
-lib/Eclipse的项目浏览器中DyanmicWP项目的视图如下:
-动态工作流
-部署描述符
- JAX-WS网络服务
- Java资源
- JavaScript资源
-构建
-网络内容
-元信息/
-清单。中频
- WEB-INF/
- web.xml
-lib/1和。设置是Eclipse项目文件夹,其中存储了Eslipse项目的各种配置。在Eclipse项目视图中不可见。
2.src目录存储源代码。在Eclipse的项目视图中,对应的是Java Resources/src。
3.build存储编译后的文件。
4.您可以在运行时在类似的\ workspace \中查看文件结构。元数据\。plugins \ org . eclipse . wst . server . core \ tmp 1 \ WTP Web Apps \ dynamic WP目录。
三、Maven Web项目的基本结构
目前Java IDE很多,都有一定的泵。Eclipse的Java Web项目是不可移植的。Maven不仅解决了项目结构的标准化问题,还提供了引用处理等强大的功能,是项目布局中事实上的标准。Maven项目的主要结构如下(参考文献2):
-根
- pom.xml
- src/
-主/
- java/
-资源/
- webapp/
-测试/
- java/
-资源
-在target/eclipse中创建新的Maven web app项目。文件结构如下:
- MavenWP
- pom.xml
- .项目
- .类路径
- .设置/
- src/
-目标/
-类别/
-M2E-WTP/1,pom.xml:maven项目配置文件。
2.的。项目文件和。类路径文件,以及。设置目录和目标/m2e-wtp目录是Eclipse项目配置文件。
3.src和target:maven标准项目目录。
Eclipse4.5.1中对应的项目资源管理视图
- MavenWP
-部署描述符/
- Java资源/
- JavaScript资源/
-部署的资源/
- src
-目标
- pom.xml1、认创建的项目会添加一个index.jsp并报错:使用专家搜索并添加小型应用程序依赖更新后就可以正常运行。
2、Java构建路径问题警告:使用专家搜索并添加编译程序插件并配置配置节点更新就可以消除。
3、墙的问题配置专家镜像,我采用的是http://maven.oschina.net/content/groups/public/。
4、默认创建的maven webapp缺少的src/main/java、src/test/java和src/测试/资源等目录需要自己手动添加。
5、修改100 .设置/组织。月食。wst。常见。项目。刻面。核心。XML,更新已安装得facet=jst.web 版本=3.1 .
6、web.xml根节点开始部分修改如下:
?可扩展标记语言版本=1.0 编码=UTF八号?
我们B- app xmlns= http://xmlns。JCP。org/XML/ns/javaee xmlns:xsi= http://www。w3。 org/2001/XML架构-实例
xsi:架构位置= http://xmlns。JCP。org/XML/ns/Java ee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd
版本=3.1Maven的配置文件pom.xml:
项目xmlns= http://maven。阿帕奇。org/POM/4。0 .0 xmlns:xsi= http://www。w3。 org/2001/XML架构-实例
xsi:架构位置= http://maven。阿帕奇。org/POM/4。0 .0 http://maven.apache.org/maven-v4_0_0.xsd
型号版本4 .0 .0/型号版本
groupIdme.test/groupId
artifactIdMavenWP/artifactId
包装警告/包装
版本0 .0 .1-快照/版本
nameMavenWP Maven Webapp/name
urlhttp://maven.apache.org/url
属国
属国
groupIdjunit/groupId
artifactIdjunit/artifactId
版本3 .8 .1/版本
范围测试/范围
/依赖关系
属国
groupIdjavax.servlet/groupId
artifactId javax。servlet-API/artifactId
版本3 .1 .0/版本
/依赖关系
/依赖关系
建设
finalNameMavenWP/finalName
插件
插件
groupIdorg.apache.maven.plugins/groupId
artifactId maven-编译器-插件/artifactId
版本3.3/版本
配置
源1.8/源
目标1.8/目标
/配置
/插件
/插件
/构建
/项目四、servlet基础
正如ASP .网的核心是接口一样,Java Web的核心是小型应用程序接口,位于javax.servlet命名空间中过滤器的概念可以参考ASP .网的HttpModule,Servlet中的各种听众可以参考ASP .网应用程序中类似的事件。
无论是爪哇还是。网的网技术,都是基于超文本传送协议协议的具体实现Java Web .和ASP .网中的一些核心项对应如下:
小型应用程序和ASP .网的简化示意图:
用于简化web.xml配置的小型应用程序的注解(3.0开始支持,在ASP .网中没有对应项):
(1)WebServlet:作用在javax.servlet.http.HttpServlet的实现类上。
(2)网络过滤器:作用在javax.servlet.Filter的实现类上。
(3)网络听众:作用在听众的实现类上(javax。servlet。servletcontext监听器、javax。servlet。servletcontext属性监听器、javax。servlet。servletrequestlistener、javax。servlet。servletrequestattributelistener、javax。servlet。http。http会话监听器、javax。servlet。http。http。http会话属性监听器).
(4)WebInitParam:结合使用和鹰眼注解用来配置属性。
(5)多部分配置:作用在javax.servlet.http.HttpServlet的实现类上。标注请求是哑剧/多部分类型。
用于小型应用程序容器初始化的ServletContainerInitializer(可实现无web.xml,3.0开始支持,可类比ASP .网的应用程序_启动方法):
(1)Servlet容器启动时查找ServletContainerInitializer的实例。
(2)ServletContainerInitializer实例使用HandlesTypes标注一个或多个类型,Servlet容器将在启动时扫描类路径,获取这些类型的实例。
(3)Servlet容器在启动时调用ServletContainerInitializer实现类的启动时方法,该方法可以获取HandlesTypes标注的所有类型对象。
五、自定义Session
会议在存储安全性要求较高的会话信息方面是必不可少的,会话当然绝对不是用来存储用户登录状态的,但类似验证码等敏感信息却必须存储在会议中。对于分布式网应用自定义会议支持独立的状态服务器或集群是必须的。
ASP .网通过会话状态模块通过配置文件配置实际的会议提供程序,会话提供程序实现了SessionStateStoreProviderBase,因此在ASP .网中实现自定义会议是通过继承SessionStateStoreProviderBase实现,配置会议是通过Web.config
同理,Java Servlet中使用自定义会议通过过滤器可以实现。由于不同的小型应用程序容器对会议的实现不同,所以通用性最好的方式是继承HttpServletRequestWrapper重写getSession方法返回自定义的会议对象。
(1)首先自定义继承会话的我自己(为了便于演示,仅包装了容器的会议并转发调用)。
导入Java。util。枚举;
导入javax。servlet。servlet上下文;
导入javax。servlet。http。http会话;
公共类我自己实现HttpSession {
私有HttpSession _ containerSession
公共我的会话(HttpSession会话){
这个. containerSession=session
}
@覆盖
public long getCreationTime() {
归还这个容器会话。getcreationtime();
}
@覆盖
公共字符串getId() {
归还这个容器会话。getid();
}
@覆盖
public long getLastAccessedTime(){
归还这个容器会话。getlastaccessedtime();
}
@覆盖
公共servlet上下文getservlet context(){
归还这个容器会话。getservletcontext();
}
@覆盖
public void setMaxInactiveInterval(int interval){
这个容器会话。setmaxinactiveinterval(区间);
}
@覆盖
public int getMaxInactiveInterval(){
归还这个容器会话。getmaxinactiveinterval();
}
@SuppressWarnings(deprecation )
@覆盖
公共http会话上下文getsession context(){
归还这个容器会话。getsession上下文();
}
@覆盖
公共对象getAttribute(字符串名称){
归还这个容器会话。获取属性(名称);
}
@SuppressWarnings(deprecation )
@覆盖
公共对象getValue(字符串名称){
归还这个容器会话。getvalue(名称);
}
@覆盖
公共枚举字符串getAttributeNames(){
归还这个容器会话。getattributenames();
}
@SuppressWarnings(deprecation )
@覆盖
public String[] getValueNames() {
归还这个容器会话。getvaluenames();
}
@覆盖
公共void setAttribute(字符串名称,对象值){
这个. containerSession.setAttribute(名称,值);
}
@SuppressWarnings(deprecation )
@覆盖
公共void putValue(字符串名称,对象值){
这个. containerSession.putValue(名称,值);
}
@覆盖
公共void removeAttribute(字符串名称){
这个容器会话。移除属性(名称);
}
@SuppressWarnings(deprecation )
@覆盖
公共void removeValue(字符串名称){
这个容器会话。移除值(名称);
}
@覆盖
public void invalidate() {
这个容器会话。invalidate();
}
@覆盖
public boolean isNew() {
归还这个容器会话。is new();
}
}(2)自定义继承HttpServletRequestWrapper的MyRequest
导入javax。servlet。http。http servlet请求;
导入javax。servlet。http。http servlet请求包装器;
导入javax。servlet。http。http会话;
公共类MyRequest扩展了HttpServletRequestWrapper {
公共MyRequest() {
超级(空);
}
公共MyRequest(HttpServletRequest请求){
超级(请求);
//TODO自动生成的构造函数存根
}
@覆盖
公共HttpSession getSession(布尔创建){
返回新的我的会话(超级。getsession(create));
}
@覆盖
公共HttpSession getSession() {
返回新的我的会话(超级。getsession());
}
}(3)自定义过滤器将请求包装为MyRequest
导入Java。io。io异常;
导入javax。servlet。过滤器;
导入javax。servlet。过滤链;
导入javax。servlet。过滤器配置;
导入javax。servlet。servlet异常;
导入javax。servlet。servlet请求;
导入javax。servlet。servlet响应;
导入javax。servlet。注释。网页过滤器;
导入javax。servlet。http。http servlet请求;
@WebFilter(/* )
公共类我的过滤器实现过滤器{
@覆盖
公共void init(过滤器配置过滤器配置)引发ServletException {
//TODO自动生成的方法存根
}
@覆盖
公共void do过滤器(servlet请求请求、ServletResponse响应、滤波器链链)
引发IOException,ServletException {
链条。do过滤器(新的我的请求((http servlet请求))请求),回应);
}
@覆盖
public void destroy() {
//TODO自动生成的方法存根
}
}通过注解配置了过滤器,也可以通过原始的web.xml方式配置。
小结:
你至少应该知道的:
(1)配置文件:ASP .网的网页配置和爪哇的web.xml
(2)网络核心:ASP .网的接口接口和爪哇的小型应用程序接口
(3)拦截器:ASP .网的模块和爪哇的过滤器
(4)应用程序事件:ASP .网的http应用程序事件和爪哇的各种听众
(5)启动器:ASP .网的应用程序_启动和爪哇的ServletContainerInitializer
(6)引用管理:ASP .网的框架和爪哇的专家
感想:
ASP .网的核心对象不像小服务程序一样,从一开始就基于接口,这是缺点。但小服务程序的核心对象全靠容器实现,就连会话同样如此,这也是缺点。比如自定义个会议十分麻烦,没有像ASP .网一样简单配置即可。另外小型应用程序的一些抽象定义有点过头了,不够简洁。
更多爪哇岛知识请关注爪哇岛基础教程栏目。以上就是服务应用开发详解项目基础图文详解的详细内容,更多请关注我们其它相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。