org.directwebremoting.servlet.DwrServlet主要分为三部分,也就是三个主要方法:init;doGet;doPost
1,init,初始化。
DWR对于Servelet容器内部设一个配置容器,该容器装载dwr映射相关信息。
public void init(ServletConfig servletConfig) throws ServletException
{
super.init(servletConfig);
ServletContext servletContext = servletConfig.getServletContext();
try
{
// setupLogging() only needed for servlet logging if commons-logging is unavailable
// logStartup() just outputs some version numbers
日志初始化开始
StartupUtil.logStartup(servletConfig);
// create and setup a DefaultContainer
DWR对于Servelet容器内部设一个配置容器,该容器装载dwr隐射相关信息。
container = ContainerUtil.createAndSetupDefaultContainer(servletConfig);
StartupUtil.initContainerBeans(servletConfig, servletContext, container);
webContextBuilder = container.getBean(WebContextBuilder.class);
ContainerUtil.prepareForWebContextFilter(servletContext, servletConfig, container, webContextBuilder, this);
ContainerUtil.publishContainer(container, servletConfig);
ContainerUtil.configureContainerFully(container, servletConfig);
}
catch (ExceptionInInitializerError ex)
{
log.fatal("ExceptionInInitializerError. Nested exception:", ex.getException());
throw new ServletException(ex);
}
catch (Exception ex)
{
log.fatal("DwrServlet.init() failed", ex);
throw new ServletException(ex);
}
finally
{
if (webContextBuilder != null)
{
webContextBuilder.unset();
}
}
}
比较细致的环节:
init()调用
createAndSetupDefaultContainer()调用
setupDefaultContainer(defaultContainer, servletConfig)
调用如下步骤
1)setupDefaults(container);
包括: 容器相关管理工具配置集,也就是要实现的一些接口。这种方式蛮好,当容器需要具备很多接口功能时,把这些接口全部做成隐射,并设置成可配置的实现
container.addImplementation(AccessControl.class,DefaultAccessControl.class);
// Mapping handlers to URLs,路径配置
createUrlMapping(container, "/index.html", IndexHandler.class, "indexHandlerUrl");
//读取servlet配置属性
2)setupFromServletConfig(container, servletConfig);
额外处理1)中多选类型
3)resolveMultipleImplementations(container, servletConfig);
里面使用了通用yui型压缩器
【使用 YUI Compressor 压缩 Javascript 和 CSS
YUI Compressor是使用Java编写的工具,需要Java版本大于等于1.4。
工作原理简介:
主要是去掉冗余的空白,主要包括空格,换行符、制表符。
对于 Javascript,还采用缩短变量名的方法压缩文件,就是在保证代码正确性的情况下将变量名用只有1个字符的字符串代替,或者2个、3个字符,总之尽量短。
对于 CSS,还有采用优化0值属性值的表示,优化颜色值的方法压缩文件。
CSS的优化比 CSSTidy 功能弱。CSSTidy还能支持一些相关属性的合并。】
//工具配置集 加载,显现,检查
4)container.setupFinished();
容器内容bean初始化 ,包括系统默认???
initContainerBeans
2,doGet
实际调用doPost,看到这里最好温习下servlet的doGet方法和doPost的区别
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException
{
doPost(req, resp);
}
3,doPost
在工程中,有个样例Dynamically Text,地址是http://localhost:5050/dwr/simpletext/index.html,当点击按钮时,实际上就是触发了org.directwebremoting.servlet.DwrServlet的下面的方法。
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
{
try
{
webContextBuilder.set(request, response, getServletConfig(), getServletContext(), container);
UrlProcessor processor = container.getBean(UrlProcessor.class);
processor.handle(request, response);
}
finally
{
webContextBuilder.unset();
}
}
分享到:
相关推荐
org.directwebremoting.servlet.DwrServlet <init-param> <param-name>debug</param-name> <param-value>true</param-value>//开启调试 </init-param> <servlet-name>dwr-invoker ...
6. **DWR的API**:DWR提供了几个核心接口和类,如`Engine`、`Util`和`Call`,它们构成了DWR的JavaScript API,帮助开发者更方便地进行Ajax开发。 7. **版本差异**:虽然示例基于DWR 1.1,但需要注意的是,DWR后续...
<servlet-class>uk.ltd.getahead.dwr.DWRServlet <servlet-name>dwr-invoker <url-pattern>/dwr/* ``` 这样的配置会将所有以`/dwr/`开头的URL映射到DWRServlet。 2. **调试模式**: 如果你想开启DWR的...
1. **通过dwr.xml配置文件发布代理类**: 这种方式是最常见的,不依赖于特定的JDK版本。在dwr.xml中,你需要定义哪些Java类或方法可以被浏览器访问。这个配置文件告诉DWR如何映射Java对象到JavaScript,类似于...
在web.xml中,DWR的最基础配置涉及创建一个名为`dwr-invoker`的servlet,其类为`uk.ltd.getahead.dwr.DWRServlet`。此servlet负责处理所有DWR相关的请求。配置如下: ```xml <servlet-name>dwr-invoker ...
dwr.xml文件是DWR框架的核心配置文件之一,通过上述分析可以看出,它主要包含了DWR Servlet的配置信息,如Servlet的名称、类名、初始化参数以及映射的URL路径等。这些配置对于DWR框架正常运行至关重要,通过合理的...
这个JAR文件包含了许多类,如`DWRServlet`,它是DWR与HTTP请求交互的核心组件,以及各种用于转换数据类型、安全处理和错误处理的工具类。开发者在项目中引入这个JAR文件,就能利用DWR提供的功能,创建远程方法调用,...
1. **引入dwr.jar** - 将DWR的jar包添加到项目的lib目录下,这是使用DWR的基础,因为该jar包包含了DWR的所有核心类和函数。 2. **创建dwr.xml** - 在WEB-INF目录下创建dwr.xml配置文件。这个文件用于配置DWR的行为...
在该文件中,你需要定义一个名为DWRServlet的Servlet,这是DWR的主要入口点,负责处理来自客户端的请求并调用服务器端的Java对象。以下是一个典型的DWRServlet配置: ```xml ... <servlet-name>dwr-invoker ...
DWR的核心是`DWRServlet`,我们需要在web.xml配置文件中将其映射到一个特定的URL路径。 然后,我们需要定义一个DAO类,该类将包含所有与数据库交互的逻辑。这些方法可以是CRUD(创建、读取、更新、删除)操作,以及...
`dwr.xml`文件定义了DWR可以创建和远程调用的类,以及这些类在JavaScript中的名称。一个基本的`dwr.xml`文件示例如下: ```xml <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD DirectWebRemoting 2.0//EN" ...
最新的dwr的jar包,要用到dwr技术必须的jar包。
DWRServlet解析请求,依据DWR.xml配置文件找到对应的方法信息,实例化所需类,执行方法,并将结果封装成JavaScript对象返回给客户端的JSFunction回调函数。 **配置使用DWR:** 1. **准备库文件**:DWR的核心引擎dwr...
首先,你需要在`dwr.xml`文件中声明要暴露给JavaScript的Java类和方法。例如: ```xml <class>com.example.MyClass</class> <method>myMethod ``` 然后,你可以在JavaScript中如下调用Java方法: ```javascript ...
在服务器端,你需要创建对应的Java类,并确保暴露给DWR的方法是public的。例如: ```java package com.example; public class UserService { public User getUser(String id) { // 实现获取用户逻辑 } } ...
< servlet-class > uk.ltd.getahead.dwr.DWRServlet < param-name > debug < param-value > true < servlet-name > DWR < url-pattern > /dwr/* ``` **创建可远程访问的Java对象** 为了让...
- **创建可调用的Java对象**:在dwr.xml文件中通过`<create>`标签指定可由JavaScript调用的Java类。 - **编写JavaScript代码**:在前端页面中,可以直接使用这些Java类的方法,如同调用本地JavaScript函数一样简单。...
在DWRDEMO中,你可能会看到如何配置DWRServlet,如何在`web.xml`和`dwr.xml`中设置参数,以及如何在JavaScript中使用DWR提供的API(如`DWREngine`,`RemoteProxy`等)来调用服务器端的方法。同时,后端的Java类将...