当前位置: 代码迷 >> Web前端 >> web-j2EE调整(一)
  详细解决方案

web-j2EE调整(一)

热度:198   发布时间:2013-10-30 12:56:22.0
web-j2EE整合(一)

一、web工程创建

1.创建web工程(简单方式在Myeclipse环境中直接直接创建web工程)

2.将web工程发布到tomcat中运行,运行正常

3.在浏览器中测试成功

二、web工程集成struts2?

1.在 “一”中,添加struts2

2.选择将要使用的struts2 的版本:(选择2.0.6)

3.将struts2 将要使用的 jar拷贝至项目中;

commons-fileupload-1.2.2.jar

commons-logging-1.0.4.jar ? 提供java日志操作API,抽象出日志接口,方便操作

freemarker-2.3.8.jar ? ? ? ? freemarker模板视图支持,struts2标签主题支持

ognl-2.6.11.jar ? ? ? ? ? ? ? ? OGNL表达式支持

struts2-core-2.0.14.jar ? ? ? ? ?struts2框架

xwork-2.0.7.jar ? ? ? ? ? ? 命令模式框架支持

javassist-3.11.0.GA.jar

commons-io-2.0.1.jarIO操作

commons-langs-3.1.jar ? ? ? ? ?提供java常用操作API,比如字符串处理,XML解析等

4.在web.xml添加对struts2 的支持

添加struts2 的核心过滤器

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.4"?

xmlns="http://java.sun.com/xml/ns/j2ee"?

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"?

xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee?

http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

<!-- DTD可以从任何一个web文件中拷贝出来,例如从tomcat中拷贝 -->

<filter>

<filter-name>struts2</filter-name>

<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>

</filter>

<filter-mapping>

<filter-name>struts2</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

? <welcome-file-list>

? ? <welcome-file>index.jsp</welcome-file>

? </welcome-file-list>

</web-app>

5.在src下穿件struts.xml 文件

头文件 可以去 struts jar中拷出来

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts PUBLIC

? ? "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

? ? "http://struts.apache.org/dtds/struts-2.0.dtd">

? ??

<struts>

<package name="test" extends="struts-default" namespace="/struts2"></package>

</struts>

5.1 ? 拷贝 ?default.properties 文件到 ?struts.xml相同目录,修改配置文件内容,修改编码 ,spring支持,上传文件文件大小 ,开发模式 等属性

?

6.重启tomcat,在浏览器中测试运行正常就好;

?

?

写一个 ?测试 类,测试 struts 转向成功 ?

?

?

?

?

三、web工程集使用servlet(问题一:servlet在struts2环境中怎么应用的?)

添加 ?servlet-api.jar ?包;

tomcat 本身就是一个web

四、在web工程中使用Logger

下载 ?apache log4j ?包

引用log4j jar包,

在class目录下配置log4j.properties配置文件(问题二:log4j 的配置文件是怎么读入程序中使用的,为什么将log4j.properties文件放置在classes目录下就可以使用了)

在java类中 调用:

private static final Logger log=Logger.getLogger(类名.class);

五、为web工程添加filter

编写java类,必须 实现 ?Filter ?接口方法;

在web.xml中定义 filter?

配置filter 映射的路径(参照struts2配置)

六、 ?为web工程添加拦截器(Interceptor)

(问题四:为action添加拦截器之后再action中原来可以得到的JSP页面的参数 得不到了?)

编写java类,实现Interceptor接口

在类中编写处理逻辑

在action 中配置拦截器

<interceptors>

<interceptor name="testInterceptor" class="com.younglibin.www.lb.TestInterceptor"></interceptor></interceptors>

为action添加拦截器调用

<action name="loginWithInter" class="com.younglibin.www.lb.action.LoginAction" method="login">

<interceptor-ref name="testInterceptor"></interceptor-ref>

<result name="success">/page/struts2/interceptor.jsp</result>

</action>

以上配置是会出问题(因为为action添加了拦截器后,默认的拦截器就会失效,也就是说struts2中的内置拦截器就不起作用,但是在struts2中大部分业务还是通过默认拦截器实现的,例如param拦截器,如果不使用,页面表单提交,参数在action中得不到)

所以在使用拦截器时,一定要配置添加上默认的拦截器,

<interceptors>

<interceptor name="testInterceptor" class="com.younglibin.www.lb.TestInterceptor"></interceptor>

<interceptor-stack name="test">

<interceptor-ref name="defaultStack"/>

<interceptor-ref name="testInterceptor"/>

</interceptor-stack>

</interceptors>

?

<action name="nomal" class="com.younglibin.www.lb.action.LoginAction" >

<interceptor-ref name="test"></interceptor-ref>

<result name="success">/page/struts2/welcome.jsp</result>

<result name="error">/page/struts2/loginNomal.jsp</result>

</action>

启动web工程,拦截器添加完成

拦截器是作用在整个action中的,也可以为某个方法提供拦截器,需要实现,

该接口提供了 doInterceptor方法,实现该方法和原来拦截器方法没有区别;

?

?

?

七、为web工程添加监听器(Listener) (问题三:filter、interceptor、LIstener 三者的作用及区别和联系)

为Web添加Listener的步骤:

?1.建立Listener实现类

?2.在web.xml中配置Listener

?

八、在Struts2中 struts2 的Action是如何访问Servlet API 的:(问题四:在action中如何访问servlet的属性,也就是JSPServlet中的属性,例如,session、request、、、、、)

Struts2的Action没有与任何的ServletAPI 耦合,这是Struts2 的改良支出,因为Action类不在与ServletAPI 耦合,从而能更轻松的测试Action

但是对于Web工程而言,不访问ServletAPI几乎是不可能的,所以Struts2 提供了一种更轻松的方式来访问Servlet API即ActionContext,Struts2提供了ActionContext类来访问Servlet API 。

?

具体实现参照ActionContext 类的API ;

核心代码:

ActionContext act = ActionContext.getContext();

? ?act.getApplication();

? ?act.getSession();

? ?HttpServletRequest request = (HttpServletRequest) act.get(ServletActionContext.HTTP_REQUEST);

? ?HttpServletResponse response = (HttpServletResponse) act.get(ServletActionContext.HTTP_RESPONSE);

Action 直接访问 Servlet API ?

action ?实现 ServletResponseAware ?即可 访问 Response?

?

九、Web工程添加Ajax支持

Ajax使用:

使用XMLHttpRequest发送对象的步骤:

1. 为得到XMLHttpRequest对象实例的一个引用,可以创建一个新的实例,也可以访问包含有XMLHttpRequest实例的一个变量。

?

  2. 告诉XMLHttpRequest对象,哪个函数会处理XMLHttpRequest对象状态的改变,为此要把对象的onreadystatechange属性设置为指向JavaScript函数的指针。

?

  3. 指定请求的属性。XMLHttpRequest对象的open()方法会指定将发出的请求。open()方法取3个参数:一个是指示所用方法(通常是GET或POST)的串;一个是表示目标资源URL的串;一个是Boolean值,指示请求是否是异步的。

?

  4. 将请求发送给服务器。XMLHttpRequest对象的send()方法把请求发送到指定的目标资源。send()方法接受一个参数,通常是一个串或一个DOM对象。这个参数作为请求体的一部分发送到目标URL。当向send()方法提供参数时,要确保open()中指定的方法是POST。如果没有数据作为请求体的一部分被发送,则使用null。

?

1.使用ajax第一步创建XMLHttpRequest 对象

因为不同浏览器中XMLHttpRequest 对象不同所以第一步,根据使用的浏览器创建不同的XMLHttpRequest对象:

?

ajax._createXMLHttpRequest=function()

{

if(window.ActiveXObject)

{

var ver=["MSXML2.XMLHTTP.6.0","MSXML2.XMLHTTP.5.0","MSXML2.XMLHTTP.4.0",

"MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP"];

for(var i=0;i<ver.length;i++)

{

try

{

return new ActiveXObject(ver[i]);

}

catch(e)

{

continue;

}

}

}

else if(window.XMLHttpRequest)

{

return new XMLHttpRequest();

}

else

{

throw new Error("对不起,您的浏览器不支持Ajax!");

}

}

?

?

2、 封装 Ajax的 post和get方法

if(!ajax)

{

var ajax={};

}

?

ajax.sendGetRequest=function(url,fnRollback,bAsync)

{

? ? var oXMLHttpRequest=ajax._createXMLHttpRequest();

var async=true;

if(typeof bAsync=="boolean")

{

async=bAsync;

}

? ? oXMLHttpRequest.open("get",url,async);//默认异步请求

if(async)//异步

{

oXMLHttpRequest.onreadystatechange=function()

{

if(oXMLHttpRequest.readyState==4)//数据接收完毕

{

if(oXMLHttpRequest.status==200)//OK

{

fnRollback(oXMLHttpRequest);

}

}

};

}

? ? oXMLHttpRequest.send(null);

if(!async)//同步

{

fnRollback(oXMLHttpRequest);

}

}

?

ajax.sendPostRequest=function(url,params,fnRollback,bAsync)

{

? ? var oXMLHttpRequest=ajax._createXMLHttpRequest();

var async=true;

if(typeof bAsync=="boolean")

{

async=bAsync;

}

? ? oXMLHttpRequest.open("post",url,async);//默认异步请求

if(async)//异步

{

oXMLHttpRequest.onreadystatechange=function()

{

if(oXMLHttpRequest.readyState==4)//数据接收完毕

{

if(oXMLHttpRequest.status==200)//OK

{

fnRollback(oXMLHttpRequest);

}

}

};

}

oXMLHttpRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

? ? oXMLHttpRequest.send(params);

if(!async)//同步

{

fnRollback(oXMLHttpRequest);

}

}

?

?

3.在web程序中使用 ajax的话 九可以直接调用 这里的 post和 get方法 ;

?

?

?

问题一:

理解1.在struts2 中servlet中使用的HTTPRequest 可以使用ActionContxt 来获得!将其放置在拦截器中即可;

?

web中集成struts2 后用户信息可以通过struts2的拦截器在拦截器中通过使用ActionContext来过的Servlet容器的变量,

把jsp中的servlet数据在后台拦截到;

?

问题二:

?

?

问题三:

?

问题四:

因为 action中的得到JSP页面参数是通过Action默认拦截器得到的,如果使用了自定义的拦截器,

如果自定义拦截器没有继承默认拦截器,程序就不会调用默认拦截器,所以得不到参数;

在struts2中默认拦截器中的params拦截器 是用来获得参数的;

拦截器作用在调用这个action的方法中;

?

?

面向抽象接口的编程方式:灵活

?

  相关解决方案