现在,我们应该编写selectAd() 方法的主体。
实际应用程序将使用AdSession bean 的方式借助 Web 界面来建立、更新和删除AdEntity 实例。selectAd() 方法将使用查询方式借助某些算法将客户的兴趣匹配到从检索到的 ad。然而在本文中,我们将进行简化以关注主题。selectAd() 方法将从用户输入中选取一个随机单词,然后返回一个新的AdEntity 实例:
package ajaxejb;
...
import java.util.Random;
import java.util.StringTokenizer;
...
public class AdSessionBean implements AdSession {
...
public AdEntity selectAd(String userInput) {
String keyword = "nothing";
if (userInput != null && userInput.length() > 0) {
StringTokenizer st = new StringTokenizer(
userInput, ",.?!'& \t\n\r\f");
int n = st.countTokens();
if (n > 0) {
int k = new Random().nextInt(n);
for (int i = 0; i < k; i++)
st.nextToken();
keyword = st.nextToken();
}
}
AdEntity ad = new AdEntity();
ad.setKeyword(keyword);
ad.setUrl(keyword + ".com");
ad.setContent("Buy " + keyword + " from " + ad.getUrl());
return ad;
}
}
在本部分中,我将使用 JDeveloper 创建控制器 servlet。然后,我将介绍怎么使用相关性注入,如何调用 EJB 的方式或者怎么针对 Ajax 客户端生成响应。
在Applications 导航器中,右键点击ajaxejb 项目并单击New。在New Gallery 窗口的右侧面板中,展开Web Tier 节点并选取Servlets。然后,在该窗口的左侧面板中选取HTTP Servlet 并单击OK:

图 16
跳过Create HTTP Servlet 向导的 Welcome 页面,选择Servlet 2.4\JSP 2.0 (J2EE 1.4):

图 17
输入AdServlet 作为 servlet 类的名称,为 servlet 类选择ajaxejb 程序包,选择XML 内容类别并点击Next:


图 18
向导的下一个页面允许您配置 servlet 映射:

图 19
最后一个页面允许您键入有关请求参数的信息。在本实例中,我们将使用一个名为userInput 的参数:

图 20
单击Finish 生成AdServlet 类:

图 21
现在,我们应该设置 servlet。首先,添加下面注入AdSession bean 的行,这样我们可以在 servlet 的doGet() 方法中访问它:
import javax.ejb.EJB;
...
public class AdServlet extends HttpServlet {
@EJB(name="AdSession")
private AdSession adSession;
...
}
在本例子中,我们期望doGet() 方法返回一个 Ajax 响应,该响应将包括从AdEntity 实例中提取的信息。userInput 参数的值释放给AdSession bean 的selectAd() 方法。业务方式返回一个AdEntity 实例,通过setAttribute() 将该示例存储到请求作用域中。之后,doGet() 设置 Content-Type 和 Cache-Control 头,并包括由AdResponse.jsp 页面生成的内容。以下是AdServlet 类的完整源代码:
package ajaxejb;
import javax.ejb.EJB;
import java.io.IOException;
import javax.servlet.*;
import javax.servlet.http.*;
public class AdServlet extends HttpServlet {
@EJB(name="AdSession")
private AdSession adSession;
public void init(ServletConfig config) throws ServletException {
super.init(config);
}
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
String userInput = request.getParameter("userInput");
AdEntity adEntity = adSession.selectAd(userInput);
request.setAttribute("adEntity", adEntity);
response.setHeader("Cache-Control", "no-cache");
response.setContentType("text/xml");
request.getRequestDispatcher("/AdResponse.jsp")
.include(request, response);
}
}
在Applications 导航器中,右键单击ajaxejb 项目的Web Content 文件夹并单击New。在New Gallery 窗口的右侧面板中,展开Web Tier 节点并选取JSP。然后,在该窗口的左侧面板中选取JSP 并单击OK:

图 22
跳过Create JSP 向导的 Welcome 屏幕,输入AdResponse.jsp 作为 JSP 页面的名称:

图 23
Create JSP 向导的下一步允许您选取一个错误处理选项:

图 24
在第三步中,您可以选取将在本页面中使用的 JSP 库。在本实例中,在右侧面板中选取JSTL Core 1.1,使用箭头图标将其移到右边面板中:

图 25
第四步允许您提供其它页面选项。由于AdResponse.jsp 页面用于生成一个 Ajax 响应,因此选用 None 作为 HTML Version 并保留 Title 为空:

图 26
单击Finish 按钮生成 JSP 页面:

图 27
删除 JDeveloper 生成的 HTML 内容,添加下面行以产生一个链接:
<a href='<c:out value="${requestScope.adEntity.url}"/>'>
<c:out value="${requestScope.adEntity.content}"/>
</a>
上面使用的AdEntity 实例设置为AdServlet 类中的一个请求属性。
生成AdServlet 类以后,JDeveloper 还建立了包括 servlet 映射信息的web.xml 应用程序描述符:
<web-app ...>
...
<servlet>
<servlet-name>AdServlet</servlet-name>
<servlet-class>ajaxejb.AdServlet</servlet-class>
</servlet>
...
<servlet-mapping>
<servlet-name>AdServlet</servlet-name>
<url-pattern>/adservlet</url-pattern>
</servlet-mapping>
...
</web-app>
必须将 Web 应用程序版本从2.4 更改为2.5,将路径文件名从web-app_2_4.xsd 更改为web-app_2_5.xsd,这样您才可以在AdServlet 类中使用相关性注入:
<web-app ...
xsi:schemaLocation=".../web-app_2_5.xsd"
version="2.5" ...>
...
</web-app>

如果您不修改 Web 应用程序版本,EJB 将不会注入,应用程序将导致一个NullPointerException。
在本部分中,我将构建一个 JSF 页面并将使用 JDeveloper 添加 ADF Faces 组件。之后,我将介绍怎么借助传递 ADF Faces 组件的状态来读取控制器 servlet 的 JavaScript 代码。JSF 页面将使用从 Ajax 响应检索到的信息进行升级。
在Applications 导航器中,右键单击ajaxejb 项目的Web Content 文件夹并单击New。在New Gallery 窗口的右侧面板中,展开Web Tier 节点并选取JSF。然后,在该窗口的左侧面板中选取JSF JSP 并单击OK:

图 28
跳过Create JSF JSP 向导的 Welcome 屏幕,输入AdForm.jsp 作为 JSF 页面的名称:

图 29
Create JSF JSP 向导的下一步允许您选取一个组件绑定选项:

图 30
在第三步中,您可以选取将在 JSF 页面中使用的 JSP 库。默认状况下选取JSF Core 和JSF HTML。在本例子中,我们还将使用 ADF Faces 组件。因此,在右边面板中选取ADF Faces Components 和ADF Faces HTML,使用箭头图标将其移到右边面板中:

图 31
第四步允许您提供其它页面选项。在 Title 域中输入Ajax-JSF Page:

图 32
单击Finish 按钮生成 JSF 页面:

图 33
由于这是该应用程序的第一个 JSF 页面,因此 JDeveloper 将构建faces-config.xml 文件并在web.xml 文件中配置Faces Servlet:
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-121815-2.html
系统一直都在更没发现有什么问题
第一