Servlet2.4中web.xml配置及说明
- 格式:doc
- 大小:16.20 KB
- 文档页数:15
contextloaderlistener 使用ContextLoaderListener是Spring框架中的一个监听器,它用于在Web应用程序启动时加载应用程序上下文(ApplicationContext)。
它是Servlet 2.4规范的一部分,通过在web.xml文件中配置ContextLoaderListener,可以在Web应用程序启动时自动加载Spring 配置文件,从而初始化Spring容器和其中的Bean。
ContextLoaderListener的主要作用是将Spring的ApplicationContext加载到ServletContext中,这样在整个Web应用程序中都可以访问到这个ApplicationContext。
通过ServletContext,我们可以获取到Spring容器中的Bean,从而实现依赖注入和面向切面编程等功能。
使用ContextLoaderListener需要进行以下步骤:在web.xml文件中配置ContextLoaderListener。
可以通过添加<listener>标签来实现,其中class属性指定为org.springframework.web.context.ContextLoaderListener。
在web.xml文件中指定Spring配置文件的路径。
可以通过<context-param>标签来实现,其中param-name指定为contextConfigLocation,param-value指定Spring配置文件的路径。
在Spring配置文件中定义Bean和相关的依赖关系。
通过以上步骤,当Web应用程序启动时,ContextLoaderListener会自动加载Spring 配置文件,并将ApplicationContext存储到ServletContext中。
在后续的代码中,我们可以通过ServletContext获取到ApplicationContext,从而获取到需要的Bean并进行相关操作。
struts2下载(使用配置文件)1.第一步web.xml2.<?xml version="1.0" encoding="UTF-8"?>3.<web-app version="2.4"4.xmlns="/xml/ns/j2ee"5.xmlns:xsi="/2001/XMLSchema-instance"6.xsi:schemaLocation="/xml/ns/j2ee7./xml/ns/j2ee/web-app_2_4.xsd">8.<welcome-file-list>9.<welcome-file>index.jsp</welcome-file>10.</welcome-file-list>11.12.<filter>13.<filter-name>struts2</filter-name>14.<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>15.</filter>16.<filter-mapping>17.<filter-name>struts2</filter-name>18.<url-pattern>/*</url-pattern>19.</filter-mapping>20.21.</web-app>第二步:struts.xml1.<!DOCTYPE struts PUBLIC2."-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"3."/dtds/struts-2.0.dtd">4.<struts>5.<package name="default" extends="struts-default">6.<action name="download" class="action.DownloadAction">7.<result type="stream">8.<param name="contentType">application/octet-stream</param>9.<param name="inputName">inputStream</param>10.<param name="contentDisposition">attachment;filename="${fileName}"</param>11.<param name="bufferSize">4096</param>12.</result>13.</action>14.</package>15.</struts>当result为stream类型时,struts2会自动根据你配置好的参数下载文件。
Java从服务器下载⽂件到本地(页⾯、后台、配置都有)先来看实现效果:有⼀个链接如下:点击链接下载⽂件:第⼀种⽅法:Servlet实现⼀、HTML页⾯部分:1、HTML页⾯中的⼀个链接<a id="downloadTemplate" style="color:blue" onclick="download();">下载导⼊模板</a>2、引⼊JSfunction download(){downloadTemplate('downloadExel.downloadexcel', 'filename', 'project');}/*** ⽤于下载导⼊模板时的影藏form表单的提交,采⽤post⽅式提交* @param action action映射地址* @param type parameter的名称* @param value parameter的值,这⾥为file的filename*/function downloadTemplate(action, type, value){var form = document.createElement('form');document.body.appendChild(form);form.style.display = "none";form.action = action;form.id = 'excel';form.method = 'post';var newElement = document.createElement("input");newElement.setAttribute("type","hidden"); = type;newElement.value = value;form.appendChild(newElement);form.submit();}3、解释上⾯JS(不是正是代码)相当于提交⼀个form,⾥⾯如下:<input type=hidden name="filename" value = "project">后台可以通过下⾯代码获得⽂件名:projectString filename = request.getParameter("filename");(这段是上⾯js的翻译,不是正式的哦)配置前台页⾯和后台交互1、web.xml配置<?xml version="1.0" encoding="UTF-8"?><web-app id="WebApp_ID" version="2.4"xmlns="/xml/ns/j2ee"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xml/ns/j2ee /xml/ns/j2ee/web-app_2_4.xsd"><servlet><servlet-name>downloadServlet</servlet-name><servlet-class>com.zit.rfid.app.prms.business.service.servlet.DownloadTemplateServlet</servlet-class><load-on-startup>3</load-on-startup></servlet><servlet-mapping><servlet-name>downloadServlet</servlet-name><url-pattern>*.downloadexcel</url-pattern></servlet-mapping></web-app>我这个web.xml不是整个⼯程的web.xml,只是⼀个模块的,在你的web.xml加⼊上⾯servlet和servlet-mapping⾥的内容即可如上:(1)接受 *.downloadexcel 的Action(2)HTML的JS⾥的Action,交给com.test.DownloadTemplateServlet这个类去处理2、WebContent⽬录下新建file⽂件夹,存放project.xls⽂件(Eclipse的Web⼯程有WebContent,MyEclipse好像是WebRoot)三、后台部分1、新建⼀个servlet: DownloadTemplateServlet.javapackage com.test;import java.io.DataInputStream;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.OutputStream;import java.io.OutputStreamWriter;import .URLEncoder;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/*** @author 022******** 主要⽤于下载导⼊模板,页⾯上传⼊的request中parameter中,filename代表了要下载的模板的名称*/public class DownloadTemplateServlet extends HttpServlet {/**private static final long serialVersionUID = -4541729035831587727L;private final static String HOME_PATH = DownloadTemplateServlet.class.getResource("/").getPath();private final static String DOWNLOAD_TEMP_FILE = HOME_PATH.subSequence(0, HOME_PATH.indexOf("WEB-INF")) + "file/"; @Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {doPost(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {String filename = req.getParameter("filename");try{resp.reset();// 清空输出流String resultFileName = filename + System.currentTimeMillis() + ".xls";resultFileName = URLEncoder.encode(resultFileName,"UTF-8");resp.setCharacterEncoding("UTF-8");resp.setHeader("Content-disposition", "attachment; filename=" + resultFileName);// 设定输出⽂件头resp.setContentType("application/msexcel");// 定义输出类型//输⼊流:本地⽂件路径DataInputStream in = new DataInputStream(new FileInputStream(new File(DOWNLOAD_TEMP_FILE + filename + ".xls")));//输出流OutputStream out = resp.getOutputStream();//输出⽂件int bytes = 0;byte[] bufferOut = new byte[1024];while ((bytes = in.read(bufferOut)) != -1) {out.write(bufferOut, 0, bytes);}out.close();in.close();} catch(Exception e){e.printStackTrace();resp.reset();try {OutputStreamWriter writer = new OutputStreamWriter(resp.getOutputStream(), "UTF-8");String data = "<script language='javascript'>alert(\"\\u64cd\\u4f5c\\u5f02\\u5e38\\uff01\");</script>";writer.write(data);writer.close();} catch (IOException e1) {e1.printStackTrace();}}}}⼤致步骤:1. 获取服务器⽂件所在路径2. 输⼊服务器⽂件3. 输出⽂件到本地第⼆种⽅法:SpringMVC实现这种⽅法⽐较简单⼀、JSP页⾯部分<a id="downloadTemplate" style="color:blue" onclick="download();">下载导⼊模板</a>//导出模板下载function download(){//后台⽅法、⽂件类型、⽂件名downloadTemplate('${pageContext.request.contextPath}/cardIssueVehicleInfo/exportVehicleInfo', 'filename', 'test'); }/*** ⽤于下载导⼊模板时的影藏form表单的提交,采⽤post⽅式提交* @param action 请求后台⽅法* @param type ⽂件类型* @param value ⽂件名*/function downloadTemplate(action, type, value){var form = document.createElement('form');document.body.appendChild(form);form.style.display = "none";form.action = action;form.id = 'excel';form.method = 'post';var newElement = document.createElement("input");newElement.setAttribute("type","hidden"); = type;newElement.value = value;form.appendChild(newElement);form.submit();}⼆、后台部分@RequestMapping("exportVehicleInfo")public void exportVehicleInfo(HttpServletRequest req, HttpServletResponse resp) {String filename = req.getParameter("filename");DataInputStream in = null;OutputStream out = null;try{resp.reset();// 清空输出流String resultFileName = filename + System.currentTimeMillis() + ".xls";resultFileName = URLEncoder.encode(resultFileName,"UTF-8");resp.setCharacterEncoding("UTF-8");resp.setHeader("Content-disposition", "attachment; filename=" + resultFileName);// 设定输出⽂件头resp.setContentType("application/msexcel");// 定义输出类型//输⼊流:本地⽂件路径in = new DataInputStream(new FileInputStream(new File(downloadPath + "test.xls")));//输出流out = resp.getOutputStream();//输出⽂件int bytes = 0;byte[] bufferOut = new byte[1024];while ((bytes = in.read(bufferOut)) != -1) {out.write(bufferOut, 0, bytes);}} catch(Exception e){e.printStackTrace();resp.reset();try {OutputStreamWriter writer = new OutputStreamWriter(resp.getOutputStream(), "UTF-8");String data = "<script language='javascript'>alert(\"\\u64cd\\u4f5c\\u5f02\\u5e38\\uff01\");</script>";writer.write(data);writer.close();} catch (IOException e1) {e1.printStackTrace();}}finally {if(null != in) {try {in.close();} catch (IOException e) {e.printStackTrace();}if(null != out) {try {out.close();} catch (IOException e) { e.printStackTrace(); }}}}。
知识点01-监听器:011203001题目1:当Web应用程序被关闭时,Servlet容器会调用Servlet Context“监听器”的哪个方法?( B ) 易A contextInitialized()B contextDestroyed()C contextFinialized()D contextShutdown()题目2:监听事件和处理事件(A )易A 都由Listener完成B 都由相应事件Listener处登记过的构件完成C 由Listener和构件分别完成D 由Listener和窗口分别完成题目3:察看下面这个类( C )易public class IfAttributsChanged implements ServletContextAttributeListener{public void attributeAdded(ServletContextAttributeEvent scab){System.out.println(“加入一个属性”);}public void attributeRemoved(ServletContextAttributeEvent scab){System.out.println(“删除一个属性”);}}关于IfAttributsChanged类的叙述,下列哪一个为真?A 此类可以成功编译B 此类无法成功编译,原因是缺少attributeChanged()方法。
C 此类无法成功编译,原因是缺少attributeReplaced()方法。
D 此类无法成功编译,原因是缺少attributeUpdated()方法。
题目4:实现下列哪一种接口的对象,并不需要在web.xml文件内进行额外的设定,Servlet 容器就能够回应该对象加入HTTP会话所发生的事件?(D )易A ServletContextListenerB HttpSessionListenerC HttpSessionAttributeListenerD HttpSessionBindingListener题目5:上下文相关的监听器(B C)(选择两项)易A HttpSessionListenerB ServletContextListenerC ServletContextAttributeListenerD ServletRequestAttributeListener题目6:Servlet2.4 以后提供了哪几种对象的事件监听。
Servlet的基本运行流程Servlet是Java Web中的一种技术,能够处理来自客户端的请求并生成响应。
它是在Web服务器上运行的Java类,可以与容器进行交互。
下面将详细描述Servlet的基本运行流程的步骤和流程。
1. Servlet的生命周期Servlet的生命周期包括以下三个阶段: - 初始化阶段(Initialization) - 服务阶段(Service) - 销毁阶段(Destroy)1.1 初始化阶段在Servlet类被加载到容器中时,(通常在Web应用程序启动时),容器会实例化Servlet对象,并调用其init()方法来进行初始化。
该方法只会在Servlet生命周期中被调用一次。
1.2 服务阶段一旦Servlet被初始化后,在其生命周期内,任何对Servlet的请求都会被容器处理。
当接收到一个客户端请求时,容器会创建一个新的线程,并调用Servlet的service()方法来处理该请求。
service()方法会根据请求的类型(GET、POST等)来调用相应的方法(如doGet()、doPost()等)进行处理。
1.3 销毁阶段当Web应用程序被关闭或Servlet容器被关闭时,容器会调用Servlet的destroy()方法来清除资源、释放内存和进行最后的操作,以完成Servlet的销毁过程。
2. Servlet运行流程Servlet的运行流程包括以下几个步骤:2.1 客户端发送请求当客户端(如浏览器)向Web服务器发送一个HTTP请求时,请求首先会到达Web容器。
2.2 容器寻找匹配的ServletWeb容器根据请求的URL来确定匹配的Servlet。
容器会维护一个Servlet映射表,将URL与对应的Servlet进行关联。
2.3 容器创建或获取Servlet实例如果Servlet实例不存在,则容器会创建一个新的Servlet实例,并调用其init()方法来进行初始化。
Bean的作用域介绍(Singleton与prototype)Spring Bean作用域介绍:singleton:Spring Ioc容器只会创建该Bean的唯一实例,所有的请求和引用都只使用这个实例Property: 每次请求都创建一个新实例request: 在一次Http请求中,容器会返回该Bean的同一个实例,而对于不同的用户请求,会返回不同的实例。
需要注意的是,该作用域仅在基于Web的Spring ApplicationContext情形下有效,以下的session 和global Session也是如此session:同上,唯一的区别是请求的作用域变为了sessionglobal session:全局的HttpSession中,容器会返回该bean的同一个实例,典型为在是使用portlet context 的时候有效(这个概念本人也不懂)注意:如果要用到request,session,global session时需要配置servlet2.4及以上:在web.xml中添加:<listener><listener-class>org.springframework.web.context.scope.RequestContextListener /></listener>servlet2.4以下:需要配置一个过滤器<filter><filter-name>XXXX</filter-name><filter-class>org.springframework.web.filter.RequestContextFilter</filter-class><filter-mapping><filter-name>XXXX</filter-name><url-pattern>/*</url-pattern></filter-mapping>另外,从2.0开始,可以自己定义作用域,但需要实现scope,并重写get和remove方法特别要引起注意的是:一般情况下前面两种作用域是够用的,但如果有这样一种情况:singleton类型的bean引用一个prototype的bean时会出现问题,因为singleton只初始化一次,但prototype每请求一次都会有一个新的对象,但prototype类型的bean是singleton类型bean的一个属性,理所当然不可能有新prototpye的bean 产生,与我们的要求不符解决方法:1.放弃Ioc,这与设计初衷不符,并代码间会有耦合2,Lookup方法注入,推荐但在用Lookup方法注入时也需要注意一点:需要在引用的Bean中定一个一个抽象地返回被引用对象的方法package com.huyong.lookup;import java.util.Calendar;/*** @author HuY ong Email:yate7571@*/public class CurrentTime {private Calendar now = Calendar.getInstance();public void printCurrentTime() {System.out.println("Current Time:" + now.getTime());}}package com.huyong.lookup;/*** @author HuY ong Email:yate7571@*/public abstract class LookupBean {private CurrentTime currentTime;public CurrentTime getCurrentTime() {return currentTime;}public void setCurrentTime(CurrentTime currentTime) {this.currentTime = currentTime;}public abstract CurrentTime createCurrentTime();}<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans-2.0.xsd"><bean id="currentTime" class="com.huyong.lookup.CurrentTime"scope="prototype"></bean><bean id="lookupBean" class="com.huyong.lookup.LookupBean"scope="singleton"><lookup-method name="createCurrentTime" bean="currentTime" /><property name="currentTime" ref="currentTime"></property></bean></beans>Main Test:package com.huyong.lookup;import org.springframework.beans.factory.BeanFactory;import org.springframework.beans.factory.xml.XmlBeanFactory;import org.springframework.core.io.ClassPathResource;/*** @author HuY ong Email:yate7571@*/public class LookupMain {/*** @param args* @throws Exception*/public static void main(String[] args) throws Exception { ClassPathResource resource = new ClassPathResource( "applicationContext.xml");BeanFactory factory = new XmlBeanFactory(resource);LookupBean lookupBean = (LookupBean) factory.getBean("lookupBean"); System.out.println("----------first time---------");System.out.println("getCurrentTime:");lookupBean.getCurrentTime().printCurrentTime();System.out.println("createCurrentTime:");lookupBean.createCurrentTime().printCurrentTime();Thread.sleep(12345);System.out.println("---------second time---------");System.out.println("getCurrentTime:");LookupBean lookupBean02 = (LookupBean) factory.getBean("lookupBean"); lookupBean02.getCurrentTime().printCurrentTime();System.out.println("createCurrentTime:");lookupBean02.createCurrentTime().printCurrentTime();}}感觉Spring的东西比较杂,学好spring一定要明白反射和代理是怎么回事!渐渐的也挺会到了Spring的好处!简单就是美!!。
JSTL中的TLD配置和使⽤。
⼀,JSTL介绍: JSTL标签库,是⽇常开发经常使⽤的,也是众多标签中性能最好的。
把常⽤的内容,放在这⾥备份⼀份,随⽤随查。
尽量做到不⽤查,就可以随⼿就可以写出来。
这算是Java程序员的基本功吧,⼀定要扎实。
JSTL全名为JavaServer Pages Standard Tag Library。
JSTL是由JCP(Java Community Process)所制定的标准规范,它主要提供给Java Web开发⼈员⼀个标准通⽤的标签函数库。
Web程序员能够利⽤JSTL和EL来开发Web程序,取代传统直接在页⾯上嵌⼊Java程序(Scripting)的做法,以提⾼程序的阅读性、维护性和⽅便性。
⼆,JSTL配置: 主要牵涉到两个jar包 standward.jar和jstl.jar包(两个包1.0和1.2版本的下载以及TLD下载路径如下:) 加载⽅式包括两种 1,⾮⾃动加载 a,将tld⽂件copy到WEB-INFO下的tld⽬录下,没有就创建之 b,修改web.xml⽂件配置,添加配置如下 1<jsp-config>2<taglib>3<taglib-uri>/jstl/core</taglib-uri>4<taglib-location>/WEB-INF/tld/c.tld</taglib-location>5</taglib>6<taglib>7<taglib-uri>/jstl/fmt</taglib-uri>8<taglib-location>/WEB-INF/tld/fmt.tld</taglib-location>9</taglib>10<taglib>11<taglib-uri>/jstl/fn</taglib-uri>12<taglib-location>/WEB-INF/tld/fn.tld</taglib-location>13</taglib>14</jsp-config>View Code c,jsp中引⽤taglib 2,⾃动加载Servlet2.4规范提供了对tld⽂件的⾃动加载,tld⽂件在standard.jar的META-INF⽂件夹中。
web.xml⽂件头声明各个版本参考1. Servlet 3.1Java EE 7 XML schema, namespace is<web-app xmlns="/xml/ns/javaee"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xml/ns/javaee/xml/ns/javaee/web-app_3_1.xsd"version="3.1"></web-app>2. Servlet3.0Java EE 6 XML schema, namespace is<web-app xmlns="/xml/ns/javaee"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xml/ns/javaee/xml/ns/javaee/web-app_3_0.xsd"version="3.0"></web-app>3. Servlet 2.5Java EE 5 XML schema, namespace is<web-app xmlns="/xml/ns/javaee"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xml/ns/javaee/xml/ns/javaee/web-app_2_5.xsd"version="2.5"></web-app>4. Servlet 2.4J2EE 1.4 XML schema, namespace is<web-app xmlns="/xml/ns/j2ee"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xml/ns/j2ee/xml/ns/j2ee/web-app_2_4.xsd"version="2.4"><display-name>Servlet 2.4 Web Application</display-name></web-app>5. Servlet 2.3J2EE 1.3 DTDs schema. This web.xml file is too old, highly recommend you to upgrade it.<!DOCTYPE web-app PUBLIC"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN""/dtd/web-app_2_3.dtd" ><web-app><display-name>Servlet 2.3 Web Application</display-name></web-app>。
JSP 部署和运行Servlet在这一节中,我们将通过一个例子来帮助读者理解Servlet的开发和部署过程,现在开发一个简单的Servlet,其功能就是向客户端输出一个字符串“这是第一个S ervlet例子”。
案例的开发主要有下列步骤。
1.编写Servlet文件编写一个Servlet,实际上就是实现编写一个实现javax.servlet.Servlet接口的类。
为了简化Servlet的编写,Servlet API中给我们提供了之处HTTP的协议的javax.se rvlet.http.HttpServlet类,我们只需从HttpServlet类继承一个子类,在子类中完成相应的功能就可以。
打开记事本,输入下列代码:将上述代码保存,名称为HelloServlet.java。
打开Tomcat服务器目录C:\Tomcat 6.0\webapps\JSPExample\WEB-INF,在该文件夹下建立classes文件夹(如果有就不需要创建),将编写好的HelloServlet.java文件放到classes文件夹下。
在该文件中,引入了一个java.io包,一个javax.servlet包,javax.servlet.http包,创建的类HelloServlet继承HttpServlet类,HttpServlet类是实现Servlet程序必须要继承的类。
该类包含三个方法,init()、service()和destory()方法。
其中init方法属于初始化方法,service()方法处理用户请求,destroy()方法销毁资源。
在service()方法中,主要负责输出响应字符串。
其中代码“response.setContentType()方法表示设置响应网页的编码形式”,代码“PrintWriter out=response.getWriter()”表示获得一个输出流对象out。
2.编译Servlet文件Servlet文件放置完成后,就可以编译该Servlet文件了。
spring原理机制转⾃:/nrain2/article/details/454593111,关于spring容器:spring容器是Spring的核⼼,该容器负责管理spring中的java组件,ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml");//这种⽅式实例化容器,容器会⾃动预初始化所有Bean实例ctx.getBean("beanName");ApplicationContext 实例正是Spring容器。
ApplicationContext容器默认会实例化所有的singleton BeanSpring容器并不强制要求被管理组件是标准的javabean。
2,Spring的核⼼机制:依赖注⼊。
不管是依赖注⼊(Dependency Injection)还是控制反转(Inversion of Conctrol),其含义完全相同:当某个java实例(调⽤者)需要调⽤另⼀个java实例(被调⽤者)时,传统情况下,通过调⽤者来创建被调⽤者的实例,通常通过new来创建,⽽在依赖注⼊的模式下创建被调⽤者的⼯作不再由调⽤者来完成,因此称之为"控制反转";创建被调⽤者实例的⼯作通常由Spring来完成,然后注⼊调⽤者,所以也称之为"依赖注⼊"。
3,依赖注⼊⼀般有2中⽅式:设置注⼊:IoC容器使⽤属性的setter⽅式注⼊被依赖的实例。
<property name="" ref="">构造注⼊:IoC容器使⽤构造器来注⼊被依赖的实例。
<constructor-arg ref="">配置构造注⼊的时候<constructor-arg>可以配置index属性,⽤于指定该构造参数值作为第⼏个构造参数值。
Struts2讲义(1):web.xml配置在现在开发的Web项目中,大家都是使用web.xml来实现MVC框架的应用。
既然Struts2也属于MVC 框架,因此在web.xml中必定要配置Struts2用以实现应用。
技术要点本节代码说明Struts2基本配置。
1、如何加载FilterDispatcher过滤器。
2、如何使用FilterDispatcher过滤器拦截URL。
演示代码Java 代码1.<!--------------------------------------- 文件名: web.xml-------------------------------->2.<?xml version="1.0" encoding="GB2312"?>3.<web-app xmlns=/xml/ns/j2ee4. xmlns:xsi=/2001/XMLSchema-instance5. version="2.4"6.xsi:schemaLocation="/xml/ns/j2ee7./xml/ns/j2ee/web-app_2_4.xsd">8. <filter>9. <!-- 过滤器名字 -->10. <filter-name>struts2</filter-name>11. <!-- 过滤器支持的struts2类 -->12. <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>13. </filter>14.15. <filter-mapping>16. <!-- 过滤器拦截名字 -->17. <filter-name>struts2</filter-name>18. <!-- 过滤器拦截文件路径名字 -->19. <url-pattern>/*</url-pattern>20. </filter-mapping>21. <welcome-file-list>22. <welcome-file>index.jsp</welcome-file>23. </welcome-file-list>24.</web-app>代码解释(1)在Struts1中web.xml中对它的加载都是加载一个Servlet,但是在Struts2中,因为设计者为了实现AOP(面向方面编程)概念,因此是用filter来实现的。
实现四则运算的Web Service编程实验一、实验目的1. 理解Web服务的概念。
2. 掌握CXF服务开发环境的配置。
3. 熟悉CXF开发框架的使用。
4. 学习远程过程调用及文档风格的Web服务。
5. 掌握服务函数、接口类型、绑定、端口、目标命名空间等基本概念。
6. 理解WSDL的概念。
二、实验环境操作系统:Windows10IDE:MyEclipse2015CXF:Apache-cxf-2.4.2JDK:JavaSE-1.7二、实验过程1.新建名为CXF_Project的Java Project,导入CXF的核心jar包和相关联的jar包。
(1)--SOAP2.新建包com.ncut.cxf、接口ICalsService和实现类CalsServiceImpl。
3.接口里编写四则运算函数。
import javax.jws.WebService;@WebServicepublic interface ICalsService {public int add(int num1,int num2);public int sub(int num1,int num2);public int mul(int num1,int num2);public int division(int num1,int num2);}4.实现类重写接口方法并编写发布web服务方法。
5.启动服务,在IE里输入地址http://localhost:3456/cals?wsdl查看服务手册。
6.用wsdl2java命令自动生成客户端。
7.新建名为CXF_Client的Java Project,将生成的客户端导入到项目里并新建”App”类。
8.在App类里实现Web服务调用。
public class App {public static void main(String[] args) {ICalsServiceService iss = new ICalsServiceService();ICalsService cs = iss.getICalsServicePort();int add = cs.add(2, 8); //调用加法int sub = cs.sub(6, 2); //调用减法int mul = cs.mul(5, 8); //调用乘法int division = cs.division(15, 5); //调用除法System.out.println("加法结果:"+add );System.out.println("减法结果:"+sub);System.out.println("乘法结果:"+mul);System.out.println("除法结果:"+division);}}9.启动客户端,查看调用结果。
web.xml配置⽂件超详细说明!!!⼀、web.xml是什么?⾸先 web.xml 是java web 项⽬的⼀个重要的配置⽂件,但是web.xml⽂件并不是Java web⼯程必须的。
web.xml⽂件是⽤来配置:欢迎页、servlet、filter等的。
当你的web⼯程没⽤到这些时,你可以不⽤web.xml⽂件来配置你的web⼯程。
所在位置项⽬名/web/WEB-INFO/web.xml,如下图所⽰web.xml能做的事情:其实,web.xml的模式(Schema)⽂件中定义了多少种标签元素,web.xml中就可以出现它的模式⽂件所定义的标签元素,它就能拥有定义出来的那些功能。
web.xml的模式⽂件是由Sun公司定义的,每个web.xml⽂件的根元素<web-app>中,都必须标明这个web.xml使⽤的是哪个模式⽂件。
如:web.xml 配置⽂件具体的内容⼆、Web.xml详解:1.web.xml加载过程(步骤)⾸先简单讲⼀下,web.xml的加载过程。
当启动⼀个WEB项⽬时,容器包括(JBoss、Tomcat等)⾸先会读取项⽬web.xml配置⽂件⾥的配置,当这⼀步骤没有出错并且完成之后,项⽬才能正常地被启动起来。
1. 启动WEB项⽬的时候,容器⾸先会去它的配置⽂件web.xml读取两个节点: <listener></listener>和<context-param></context-param>。
2. 紧接着,容器创建⼀个ServletContext(application),这个WEB项⽬所有部分都将共享这个上下⽂。
3. 容器以<context-param></context-param>的name作为键,value作为值,将其转化为键值对,存⼊ServletContext。
4. 容器创建<listener></listener>中的类实例,根据配置的class类路径<listener-class>来创建监听,在监听中会有contextInitialized(ServletContextEvent args)初始化⽅法,启动Web应⽤时,系统调⽤Listener的该⽅法,在这个⽅法中获得:[html]1. <span style="font-family:Times New Roman;">ServletContextapplication=ServletContextEvent.getServletContext();</span>context-param的值就是application.getInitParameter("context-param的键");得到这个context-param的值之后,你就可以做⼀些操作了。
Filter及FilterChain的使⽤详解Filter及FilterChain的使⽤详解⼀、Filter的介绍及使⽤什么是过滤器?与Servlet相似,过滤器是⼀些web应⽤程序组件,可以绑定到⼀个web应⽤程序中。
但是与其他web应⽤程序组件不同的是,过滤器是"链"在容器的处理过程中的。
这就意味着它们会在servlet处理器之前访问⼀个进⼊的请求,并且在外发响应信息返回到客户前访问这些响应信息。
这种访问使得过滤器可以检查并修改请求和响应的内容。
过滤器适⽤于那些地⽅??为⼀个web应⽤程序的新功能建⽴模型(可被添加到web应⽤程序中或者从web应⽤程序中删除⽽不需要重写基层应⽤程序代码);?向过去的代码添加新功能。
过滤器放在容器结构的什么位置?过滤器放在web资源之前,可以在请求抵达它所应⽤的web资源(可以是⼀个Servlet、⼀个Jsp页⾯,甚⾄是⼀个HTML页⾯)之前截获进⼊的请求,并且在它返回到客户之前截获输出请求。
Filter:⽤来拦截请求,处于客户端与被请求资源之间,⽬的是重⽤代码。
Filter链,在web.xml中哪个先配置,哪个就先调⽤。
在filter中也可以配置⼀些初始化参数。
Java中的Filter并不是⼀个标准的Servlet,它不能处理⽤户请求,也不能对客户端⽣成响应。
主要⽤于对HttpServletRequest进⾏预处理,也可以对HttpServletResponse进⾏后处理,是个典型的处理链。
Filter有如下⼏个⽤处:?在HttpServletRequest到达Servlet 之前,拦截客户的HttpServletRequest。
?根据需要检查HttpServletRequest,也可以修改Ht tpServletRequest头和数据。
?在HttpServletResponse到达客户端之前,拦截HttpServl etResponse。
weblogic的安装、目录结构、启动2006-11-29 20:09weblogic的安装、目录结构、启动安装WEBLOGIC SERVERweblogic server的目录结构weblogic server的classpath变量weblogic server使用命令行通过管理控制台执行核心的管理任务命令行管理安装有三种不同的方式安装weblogic server》用户图形界面GUI》控制台console模式》Silent(沉默)模式(用脚本安装)BEA的installer支持平台windows2000/xp solaris hp-ux aixGUI方式安装(windows)》到BEA下裁weblogic server安装,》选bea软件的主目录》选完整方式还是只安装其中一个》选weblogic的目录(应在BEA主目录下)》安装其他包如XML等两个可以不安装(默认不装)CLI方式安装(linux,unix)在UNIX平台下有两种方式包含JDK1.4.1的unix特有的java installer与平台无关的java installer,没有JDK它的文件名是以.jar为结尾的安装步骤类似于GUISilent安装读取配置文件服务包(serveice packs)服务包安装就像weblogic一样(或直接覆盖)目录结构/bea bea的主目录|-/jdk141_03 预打包的1.4.1_03JDK/jre |-/jrockit81sp1_141_03 预打包的jrockit1.4.1|-/logs 安装bea产品的历史记录|-/utils 附加的/工具jar文件|-/weblogic81 weblogic server的根目录 | |-common 含有被weblogic server组件所共享的文件包括环境脚本模板文件评估软件| |-javelin workshop使用的java/jsp编译器| |-samples 含有示例代码和资源| | |-server| | |-config| | | |-examples weblogic server示例应用和组件| | | --petstore sun j2ee pet store应用| | |-eval| | | |-pointbase 含有pointbase数据库的评估版| | |-src 含有petstore和与weblogic server一起安装的示例的源代码和文件| | | |-examples| | | --petstore| | --stage 含有示例域部署前的客户和服务器类| |-server weblogic server 程序文件| |-uninstall 用于卸载weblogic server的代码| --workshop weblogic workshop应用|-/license.bea 许可文件(xml格式文件,购买后需要覆盖这个文件)|-/registry.xml 所有安装bea产品的记录文件--/updatelicense.cmd 更新license.bea文件Domain目录结构|-/adminserver 管理服务器配置(config.xml配置文件,boot.properties可放置boot的用户名和密码加密保存,| 服务方式启动installservice.cmd,) |-/applications 应用服务器配置|-/_cfgwiz_donotdelete--/configArchivejvm run-time变量weblogic server能在大多数jvm中运行weblogic server当前的执行在:》jdk1.4(包括jrocket)--服务器》jdk1.2或1.3.或jdk1.4--客户应用调整-xms与-xmx的大小,与参数-Dprop=val、-classpath classpath 命令行为:java options fullyqualifiedjavaclass programoptionsweblogic server的依赖环境要运行weblogic server,你必须配置:》path包括所有可执行程序(包括java解释器)》classpath包括依赖的包这些参数可以设置在:》你计算机环境变量设置中》定制的批处理文件或shell脚本中命令行为:set VAR_NAME=VALUE配置classpathweblogic server的classpath通过java系统的classpath环境变量配置必须在classpath中的文件:%WL_HOME%/server/lib/weblogic.jarService pack中的其他文件可能包含在Classpath中的文件%WL_HOME%/common/eval/pointbase/lib/pbserver44.jar%WL_HOME%/common/eval/pointbase/lib/pbclient44.jar%WL_HOME%/server/lib/xmlx.jarJDBC驱动程序(很具不同的要求来设置如oracle,ojdbc.jar)Starup类和Shutdown类(启动和停止时动作的类)第三方类库其他常用类启动weblogic server(%SERVER_HOME%为服务器名)java -hotspot -Xms32m -Xmx200m -classpath "%CLASSPATH%"=%SERVER_NAME% -Dbea.home="C:\bea"ername=%WLS_USER%-Dweblogic.management.password=%WLS_PW%-Dweblogic.ProductionModeEnabled=%STARTMODE%-Djava.security.policy=%WL_HOME%\server\lib\weblogic.policy weblogic.Server命令行为:cd bea\user_projects\someDomainstartWeblogic.cmd监视启动成功与否:Server started in RUNNING mode(启动成功)控制台管理资源配置部署应用或组件监测资源使用情况查看日志消息启动和关闭服务器,或者执行其它管理工作启动控制台http://hostname:port/console(非安全方式)https://hostname:secureport/console(安全方式)示例:http://localhost:7001/consolehttp://adminDNSName:7001/consolehttps://127.0.0.1:7002/console登陆使用管理用户名和密码服务器生命周期关闭/ ^V \启动关闭 <--- 失败\ ^V /备用/ \V V恢复挂起未知\ /V V运行读取发布到 weblogic 的 ear 文件的目录结构的sample.jsp- -<%ServletContext sCon = getServletConfig().getServletContext(); sCon.getResourceAsStream("/WEB-INF/classes/resources.properties"); out.println("<b>root</b><br>");Collection c = sCon.getResourcePaths("/");Iterator it = c.iterator();while(it.hasNext())out.println(it.next() + "<br>");out.println("<b>WEB-INF</b><br>");c = sCon.getResourcePaths("/WEB-INF/");it = c.iterator();while(it.hasNext())out.println(it.next() + "<br>");%>weblogic的classloader装载策略及部署应用的目录结构1 目录结构在weblogic上要发布一个web applicate必须有下面的目录结构:mywebapp|____WEB-INF|___lib //放这个web application所需要的jar包|___classes //放class类|___web.xml //对这个web application描述发布一个application需要有下面的目录结构:myapplication|___APP-INF //放在这个目录下的lib和classes不能实例化webapp下的类| |___lib //放ejb和webapp公用的jar包| |___classes //放ejb和webapp公用的类|___META-INF| |__application.xml|___mywebapp| |____WEB-INF| |___lib| |___classes //放class类| |___web.xml|___ejb.jar //ejb的jar包========================================== ========================================2 classloaderclassloader是分层次的,它只能加载比它层次高的类及它自身的类,同层次的类及比它层次低的类都不能加载。
Servlet2.4中web.xml配置及说明<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="/xml/ns/j2ee"xmlns:xsi="/2001/XMLSchema-instance" xsi:schemaLocation="/xml/ns/j2ee /xml/ns/j2ee/web-app_2_4.xsd" version="2.4"><!-- icon元素指出IDE和GUI工具用来表示Web应用的一个和两个图像文件的位置--><icon><small-icon>/images/small.gif</small-icon><!-- 16*16 --><large-icon>/images/large.jpg</large-icon><!-- 32*32 --></icon><!-- display-name元素提供GUI工具可能会用来标记这个特定的Web应用的一个名称--><display-name>The applicaitonname</display-name><!-- description元素给出与此有关的说明性文本--> <description>A longer description of the application</description><!-- 用于告知Web容器: 应用设计为在分布式Web容器中运行. --><distributable /><!-- context-param元素声明应用范围内的所有组件(servlet和JSP页面)都可用的上下文参数--><context-param><!-- 参数名称--><param-name>Support</param-name><!-- 参数值--><param-value>xihaikun@</param-value&g t;</context-param><!-- 注册一个过滤器组件--><filter><!-- 描述--><description></description><!-- 名称--><display-name></display-name><icon></icon><!-- 过滤器名称--><filter-name>filtername</filter-name><!-- 具体类--><filter-class>com.ebuilds.Filter</filter-class> <!-- 初始化参数--><init-param><param-name></param-name><param-value></param-value></init-param></filter><!-- 将过滤器映像至一个URI模式, 或者映像至一个Servlet. --><filter-mapping><filter-name>filtername</filter-name><url-pattern></url-pattern></filter-mapping><filter-mapping><filter-name>filtername</filter-name><servlet-name>servletName</servlet-name> </filter-mapping><!-- 注册一个监听器--><listener><listener-class>com.ebuilds.ajax.TaskListener</list ener-class></listener><!-- 定义了Servlet或JSP页面的细节. 最常见的情况是, 此元素仅把一个Servlet或JSP页面与一个短名相关联, 并指定初始化参数: --><servlet><!-- servlet-name元素用来定义servlet的名称,该名称在整个应用中必须是惟一的--><servlet-name>TimeServlet</servlet-name><!-- 用来指定servlet的完全限定的名称--><servlet-class>com.ebuilds.ajax.TimeServlet</servl et-class><!-- 元素用来指定应用中JSP文件的完整路径。
这个完整路径必须由/开始,不能和<servlet-class>元素同时出现--><!-- <jsp-file>/index.jsp</jsp-file> --><init-param><param-name>count</param-name><param-value>1</param-value></init-param><!--当启动Web容器时,用load-on-startup元素自动将servlet加入内存。
加载servlet就意味着实例化这个servlet,并调用它的init 方法。
可以使用这个元素来避免第一个servlet请求的响应因为servlet载入内存所导致的任何延迟。
如果load-on-startup元素存在,而且也指定了jsp-file元素,则JSP文件会被重新编译成servlet,同时产生的servlet 也被载入内存。
load-on-startup元素的内容可以为空,或者是一个整数。
这个值表示由Web容器载入内存的顺序。
举个例子,如果有两个servlet元素都含有load-on-startup子元素,则load-on-startup子元素值较小的servlet将先被加载。
如果load-on-startup子元素值为空或负值,则由Web容器决定什么时候加载servlet。
如果两个servlet的load-on-startup子元素值相同,则由Web容器决定先加载哪一个servlet --><load-on-startup>1</load-on-startup><!-- 如果定义了run-as元素,它会重写用于调用Web 应用中servlet所设定的Enterprise JavaBean(EJB)的安全身份。
--><run-as><!-- Role-name是为当前Web应用定义的一个安全角色的名称--><role-name></role-name></run-as><!-- security-role-ref元素定义一个映射,该映射在servlet中用isUserInRole (String name)调用的角色名与为Web应用定义的安全角色名之间进行--><security-role-ref><role-name></role-name><!-- role-link元素用来将安全角色引用链接到已定义的安全角色。
role-link元素必须含有已经在security-role元素中定义的一个安全角色的名称--><role-link></role-link></security-role-ref></servlet><!-- 元素将一个Servlet或JSP页面映像至一个URL模式. --><!-- 路径前缀模式: --><servlet-mapping><servlet-name>purchase</servlet-name><url-pattern>/po/*</url-pattern></servlet-mapping><!-- 完全匹模模工: --><servlet-mapping><servlet-name>sales-report</servlet-name><url-pattern>/report</url-pattern></servlet-mapping><!-- 扩展名映像模式: --><servlet-mapping><servlet-name>XMLProcessor</servlet-name> <url-pattern>*.xml</url-pattern></servlet-mapping><!-- 定制会话处理属性.在一个部署描述文件中只能使用一个此类元素--><session-config><!--设置会话过期时间--><session-timeout>180</session-timeout></session-config><!-- 如果Web应用具有想到特殊的文件,希望能保证给他们分配特定的MIME类型,则mime-mapping元素提供这种保证--><mime-mapping><extension></extension><mime-type></mime-type></mime-mapping><!--定义要在目录中查找并提供索引文件的有序表.如果使用了多个此类元素, 容器会将其合并. --><welcome-file-list><welcome-file>index.jsp</welcome-file><welcome-file>index.html</welcome-file></welcome-file-list><!--指定错误的页面--><error-page><!-- 指出在给定的HTTP错误代码出现时使用的URL --><error-code>404</error-code><location>/NotFound.jsp</location></error-page><error-page><!-- 指出在出现某个给定的Java异常但未捕捉到时使用的URL --><exception-type>exception.ServletNotFound</exce ption-type><location>/sorry.jsp</location></error-page><jsp-config><jsp-property-group><!-- 设定的说明--><description>Special property group for JSP Configuration JSPexample.</description><!-- 设定名称--><display-name>JSPConfiguration</display-name&g t;<!-- 设定值所影响的范围--><url-pattern>/jsp/*</url-pattern><!--允许或者禁止EL语言若为true,表示不支持EL 语法--><el-ignored>true</el-ignored><!-- 设定JSP 网页的编码--><page-encoding>GB2312</page-encoding><!-- 若为true,表示不支持<% scripting %>语法--><scripting-invalid>true</scripting-invalid><!-- 设置JSP 网页的头,扩展名为.jspf --><include-prelude>/include/prelude.jspf</include-prel ude><!-- 设置JSP 网页的结尾,扩展名为.jspf --><include-coda>/include/coda.jspf</include-coda> </jsp-property-group></jsp-config><!-- 声明对于受保护资源使用何种鉴别方法.在一个部署描述文件中只能使用一个此类元素--><login-config><auth-method>FORM</auth-method><form-login-config><form-login-page>/login/login.html</form-login-page ><form-error-page>/login/error.html</form-error-page ></form-login-config></login-config><!-- resource-env-ref元素声明与资源相关的一个管理对象。