[WEB]WEB工程

结构

java的web工程结构如下:

--WEB-INF
	|
	+--web.xml
	|
	+--classes
	|
	+--lib

其中web.xml用来初始化配置信息,classes存放工程中的java代码编译成的class文件,lib中存放引用到jar包。下面来看web.xml的配置。

Filter

fileter的定义如下:

public interface Filter{
	public void init(FilterConfig filterConfig) throws ServletException;
	public void doFilter ( ServletRequest request, ServletResponse response, FilterChain chain ) throws IOException, ServletException;
	public void destroy();
}

在web.xml中的配置如下:

<filter>
	<filter-name>encodingFilter</filter-name>
	<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
	<init-param>
		<param-name>encoding</param-name>
		<param-value>UTF8</param-value>
	</init-param>
	<init-param>
		<param-name>forceEncoding</param-name>
		<param-value>true</param-value>
	</init-param>
</filter> 

上面的CharacterEncodingFilter的作用是根据配置来修改response中的编码格式。现在的问题是Filter在什么时候调用?怎样调用?其实用四个字就可以概括:

栈式调用

自己配一个下面的测试的Filter,然后Debug一下就知道了:

public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException {
	System.err.println("before");
	arg2.doFilter(arg0, arg1);
	System.err.println("after");
}

另外,需要用<filter-mapping>来配置请求对应的<filter>。

Listener

配置方法如下:

<listener>
	<listener-class>com.alibaba.citrus.webx.context.WebxContextLoaderListener</listener-class>
</listener>

Listener用来监听客户端的请求、服务器操作等并定义在这些时间发生时应该做的操作,有四种目标事件:

  • ServletContextAttributeListener:属性的存入、删除和替换
  • ServletRequestAttributeListener:request属性的变化
  • ServletRequestListener:请求的到达、销毁。
  • HttpSessionAttributeListener:session属性的变化
  • ServletContextListener:接受ServletContext的生命周期的变化

安装在服务器中一个特定URL名字空间的WEB部件的集合构成了一个WEB应用,每个应用都会有上下文,而ServletContext就提供了访问这些上下文的方式,获取ServletContext的方式如下:

WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext();
ServletContext servletContext = wac.getServletContext();
// TODO

ContextLoaderListener实现了ServletContextListener,在ServletContext初始化之后被调用,在初始化方法中完成了spring的上下文的初始化,如下:

public void contextInitialized(ServletContextEvent event) {
	this.contextLoader = createContextLoader();
	this.contextLoader.initWebApplicationContext(event.getServletContext());
}

初始化spring的时候默认寻找的路径是/WEB-INF/applicationContext.xml,可以通过参数contextConfigLocation进行配置,比如:

<context-param>
	<param-name>contextConfigLocation</param-name>
	<param-value>classpath*:cybertronspringconfig/spring-*.xml</param-value>
</context-param>

context-param

在上面看到很多地方需要自定义参数,这里需要用context-param来做:

<context-param>
	<param-name>log4jConfigLocation</param-name>
	<param-value>/WEB-INF/log4j.xml</param-value>
</context-param>

在需要使用的时候需要从ServletContext中获取:

servletContext.getInitParameter(CONFIG_LOCATION_PARAM);

Servlet

Servlet用来处理请求,和URL的对应关系需要在web.xml中配置:

<servlet>
	<servlet-name>spring</servlet-name>
	<servlet-class>
		org.springframework.web.servlet.DispatcherServlet
	</servlet-class>
	<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
	<servlet-name>spring</servlet-name>
	<url-pattern>/service/*</url-pattern>
</servlet-mapping>

这样的话就可以用DispatcherServlet来处理/service/的所有请求。而DispatcherServlet是springMVC的东西,将不同的请求分发给不同的Handler处理。其中load-on-startup用来描述是否在启动的时候加载该servlet。

[WEB]WEB工程,布布扣,bubuko.com

时间: 2024-12-14 18:14:31

[WEB]WEB工程的相关文章

eclipse Dynamic web project 工程目录

如图,我创建了一个work 的web project,当工程完成之后,部署在服务器上时,整个work工程会被打包成一个war包,如 除了可以在eclipse上运行,工具会帮我们自动部署在服务器上之外,我们也可以手动进行部署,比如war包放在D:\tomcat\apache-tomcat-6.0.47\webapps 目录下 (以tomcat服务器为例),然后启动服务器,即可正常部署. 无论是工具自动部署还是手动部署,在服务器启动之后,会解压项目文件,即work.war 这个包 ,如图: 当web

Maven web 项目工程的建立

打开eclipse,mars版本的已经集成了maven. 1. new 一个 maven project,勾选Create a simple project(这样就省去了建立文件夹的过程) 2. 选择打包方式为 war 3. 点击Finish,你会发现报错了,并且找到src/main/webapp目录,后面的步骤要用到 4.右键工程->Properties->Project Facets 5.取消勾选 Dynamic Web Module,并点击Apply 6.再次勾选Dynamic Web

在eclipse中,用maven创建一个web项目工程

1.在eclipse中用maven创建项目,右键new>>Maven Project 2.点击next继续 3.点击next继续,选择maven-archetype-webapp, 4.点击next继续,填写Group id和Artifact id, Version默认,Package可以不填 5. 然后点击finish,完成web项目的创建: 在创建web项目完成后,可能出现的问题及其解决方法: Q1:项目忽然出现 The superclass "javax.servlet.htt

[Java][Web]Web 工程中的各类地址的写法

// 1. request.getRequestDispatcher("/index.html").forward(request,response); // 以 / 开头,对于浏览器 / 表示网站,对于服务器 / 表示当前的 web应用 // \ 反斜杠 用于访问硬盘资源的路径分隔符 // 2. response.sendRedirect("/day05/index.html"); // 3. this.getServletContext().getRealPat

(四)Web前端工程师从入门到精通系列:图片标签

<img> 标签   重要属性: Src: 设置显示图片(图片名称或是图片路径). Title:设置图片鼠标悬浮文字. Alt:当页面加载不出来的时候显示文本. Width:图片宽度 Height:图片高度 绝对路径:凡是带有磁盘路径的都是绝对路径或者带有网络地址的也是绝对路径.例如:D\Web\1.jpg 或者是  www.baidu.com/images/1.png 相对路径:①:当图片和文件在同一文件夹之中 ②:当图片在文件的上一级目录中 ③:当图片在文件夹的下一级目录中 超链接: Ti

关于web开发工程中URL参数的编码问题

近日在项目中,在velocity开发的页面模板中的使用a标签创建链接,并且带有需要提交的参数(这里没有使用form的原因是因为该模板生成的email,发送给客户,由于客户的email客户端可能是https,而模板上面的链接并不是跳转到https的站点,使用form将导致浏览器这种混合的链接).当通过该模板生成的页面上进行跳转时,发现链接提交的参数发生了变化,具体表现是参数提交时是一串包含10位任意可输出字符的字符串,字符串里有“+”字符,提交后后台后“+”字符不见了,取而代之是一个空格.通过fi

(二)Web前端工程师从入门到精通系列:HTML标签介绍

5:HTML标签 5.1 单标签 ①:文本注释标签 <!--  XXXXX –> ②:文本换行标签 <br/> ③:横线 5.2 双标签 ① : 段落标签  <p></p> ②:标题 <h1></h1> <h2></h2> <h3></h3> <h4></h4> <h5></h5> <h6></h6> 代码如下 页面

Linux_异常_04_本机无法访问虚拟机web等工程

这是因为防火墙的原因,把响应端口开启就行了. 二.参考文件 1.Centos6.8 防火墙设置 2.CentOS 6上 iptables 防火墙的基本配置教程 3.为CentOS 6设置IPTables防火墙 4.Centos6.8防火墙配置 5.CentOS7安装iptables防火墙

nginx+uwsgi部署python web(web.py)

1.nginx: nginx 是一个 http 服务器,与 apache.lighttpd.Microsoft IIS 等属于同类产品. 2.uWSGI: uWSGI 是一个快速的.纯C语言开发的.自维护的.对开发者友好的 WSGI 服务器,旨在提供专业的 Python web应用发布和开发. uWSGI  是 http 服务器 与 python 应用程序之间进行数据交换的服务程序.