Java_Web_15_Web_Applications-zh

+1

No comments posted yet

Comments

Slide 1

1 使用和部署Web应用 http://blog.csdn.net/hhmoll/ hhmall@hotmail.com 2002-08-11 Created 2003-09-15 Version 2003 2009-05-26 Last Updated

Slide 2

2 内容 向服务器注册Web应用 组织Web应用 在WAR文件中部署应用 记录Web应用对共享库的依赖关系 处理相对URL 在Web应用间共享数据

Slide 3

3 思想 Web应用把一组Servlets, JSP页面,标记库 HTML文档,图像样式表,以及其他Web内容组织进一个单一的集合之中,该集合可以用在Servlet 2.2之上的服务器中 访问Web应用,需要在URL前加前缀 http://host/webAppPrefix/blah/blah 诸多Web应用的行为由部署描述文件定义(web.xml)

Slide 4

4 Web应用的目的 便于组织 相关文件或目录被组织进一个单独的WAR文件 包含HTML,JSP,Servlet,JavaBean,图像,样式表,辅助Java类等 可移植性 众多服务器支持Web应用 在移植时只需要移动一个WAR文件 独立性 每个Web应用具有其特定的: ServletContext 对话 URL前缀 目录结构

Slide 5

5 Web应用的结构 JSP页面以及Web内容(HTML页面,样式表,图片等) 顶层Web应用目录或除WEB-INF或META-INF的任意目录 Servlets: WEB-INF/classes (未打包) 上述目录的子目录并符合包命名规则 JavaBean和工具类: JAR文件: WEB-INF/lib. web.xml: WEB-INF 标记库描述文件: WEB-INF/tlds 位于WEB-INF目录的文件外部不能直接访问

Slide 6

6 一个典型的Web应用

Slide 7

7 webapp1目录结构 webapp1 HelloWebApp.jsp WEB-INF classes HelloWebApp.class web.xml

Slide 8

8 HelloWebApp.jsp <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD><TITLE>JSP: Hello Web App</TITLE></HEAD> <BODY BGCOLOR="#FDF5E6"> <H1>JSP: Hello Web App</H1> </BODY> </HTML>

Slide 9

9 HelloWebApp.java import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWebApp extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); String docType = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 " + "Transitional//EN\">\n";

Slide 10

10 HelloWebApp.java – 续 String title = "Servlet: Hello Web App"; out.println(docType + "<HTML>\n" + "<HEAD><TITLE>" + title + "</TITLE></HEAD>\n" + "<BODY BGCOLOR=\"#FDF5E6\">\n" + "<H1>" + title + "</H1>\n" + "</BODY></HTML>"); } }

Slide 11

11 注册Web应用 过程服务器相关 可移植的: 文件结果及其部署描述 (web.xml). 不可移植的: 如何定位Web应用 如何设置URL前缀

Slide 12

12 在Tomcat 4.0中注册Web应用 将WAR文件复制到<install_dir>/webapps 重新启动Tomcat http://localhost:8080/webapp1/HelloWebApp.jsp http://localhost:8080/webapp1/servlet/HelloWebApp

Slide 13

13 利用JBuilder 9注册入WebLogic 8.1 JBuilder 9 for WebLogic 8.1可以直接在开发时进行部署

Slide 14

14 WAR文件 WAR就是一个JAR压缩文件,具有不同的扩展名 创建WAR文件如下例所示 jar cvf webAppName.war * 注册WAR与服务器相关

Slide 15

15 处理相对URL JSP与HTML可以方便的利用相对URL访问 <IMG SRC="EvilEmpire.gif"…> <IMG SRC="redmond/EvilEmpire.jpg"…> Servlets? 相同的处理会失败 缺省 URL: http://host/prefix/servlet/Name 浏览器处理相对URL,不是Servlet 在Web应用中不能使用绝对URL 相同问题: 样式表, Applets, 甚至常规链接

Slide 16

16 处理相对URL:解决方案一 在URL中使用Web应用的名字 <IMG SRC="/webAppPrefix/redmond/Borg.gif" ...> 缺点: 如果更改URL前缀,必须更改大量的链接 不建议使用

Slide 17

17 处理相对URL:解决方案二 通过web.xml分配顶级的URL链接 <web-app> <servlet> <servlet-name>hellowebapp</servlet-name> <servlet-class>HelloWebApp</servlet-class> </servlet> <servlet-mapping> <servlet-name>hellowebapp</servlet-name> <url-pattern>/hellowebapp</url-pattern> </servlet-mapping> </web-app> 将http://host/webAppPrefix/servlet/SomeName 改为http://host/webAppPrefix/SomeName

Slide 18

18 处理相对URL:解决方案三 使用getContextPath. 直接添加Web应用名到每个以/ 开始的URL前,不进行硬编码 <%String prefix = request.getContextPath(); String url = prefix + “/images/MyImage.jpg”; %> <IMG SRC=“<%=ur; %>” ... > 如果有大量的这种性质的URL,可以利用BASE元素标准化解析的相对URL位置 <HEAD> <BASE HREF="<%= request.getContextPath() %>"> <TITLE>...</TITLE> </HEAD>

Slide 19

19 AppUtils.java getContextPath的使用普遍很有效,有必要在可重用的实用程序中获得该功能。AppUtils不仅修改常规的URL,而且还处理用于基于URL重写的会话跟踪的URL package moreservlets; import javax.servlet.http.*; public class AppUtils { /** 用于处理JSP或Servlet中的URL引用,代替可能的硬编码,例如 * <IMG SRC="/images/foo.gif" ...> * 换为: * <% String imageURL = webAppURL("/images/foo.gif",request); %> * <IMG SRC="<%= imageURL %>"...> */

Slide 20

20 AppUtils.java public static String webAppURL(String origURL, HttpServletRequest request) { return(request.getContextPath() + origURL); } /** 用于支持会话跟踪时,转换将/开头的页面 */ public static String encodeURL(String origURL, HttpServletRequest request, HttpServletResponse response) { return(response.encodeURL(webAppURL(origURL, request))); }

Slide 21

21 AppUtils.java /** 用于支持会话跟踪时,转换将/开头的页面 , * 并进行sendRedirect */ public static String encodeRedirectURL (String origURL, HttpServletRequest request, HttpServletResponse response) { return(response.encodeRedirectURL (webAppURL(origURL, request))); } }

Slide 22

22 在Web应用之间共享数据 失败: Session. 每个Web应用有其自己的Session. 缺省的ServletContext. 每个Web应用有其独立的. static成员或方法. 不同Web应用使用不同的ClassLoader. 成功: 显式cookies. Cookie在整个站点间共享 注意使用cookie.setPath("/") 与URL关联的ServletContext. ServletContext myContext = getServletContext(); String url = "/someWebAppPrefix"; ServletContext otherContext = myContext.getContext(url); Object someData = otherContext.getAttribute(“somekey”);

Slide 23

23 SetSharedInfo.java public class SetSharedInfo extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getSession(true); session.setAttribute("sessionTest","Session Entry One"); ServletContext context = getServletContext(); context.setAttribute("servletContextTest", "Servlet Context Entry One"); Cookie c1 = new Cookie("cookieTest1", "Cookie One"); c1.setMaxAge(3600); // One hour

Slide 24

24 SetSharedInfo.java response.addCookie(c1); // 缺省路径不能共享 Cookie c2 = new Cookie("cookieTest2", "Cookie Two"); c2.setMaxAge(3600); // One hour c2.setPath(“/”); // 显式路径: 对所有URL有效 response.addCookie(c2); response.sendRedirect("showsharedinfo");} }

Slide 25

25 ShowSharedInfo.java public class ShowSharedInfo extends HttpServlet { public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); String title = "Shared Info"; out.println(ServletUtilities.headWithTitle(title) + "<BODY BGCOLOR=\"#FDF5E6\">\n" + "<H1 ALIGN=\"CENTER\">" + title + "</H1>\n"+"…"); HttpSession session = request.getSession(true); … ServletContext application = getServletContext(); … application = application.getContext("/shareTest1"); … Cookie[] cookies = request.getCookies();

Slide 26

26 访问shareTest1 当前Web应用 – shareTest1 当前会话 - sessionTest Servlety Context中存储servletContextTest context cookieTest1 - 缺省路径 cookieTest2 - setPath("/") Weblogic http://localhost:7001/shareTest1/setsharedinfo Tomcat无法运行该示例

Slide 27

27 访问shareTest2 当前Web应用 – shareTest2 无Session Servlety Context中存储servletContextTest context cookieTest1 - 缺省路径 cookieTest2 - setPath("/") Weblogic http://localhost:7001/shareTest2/showsharedinfo Tomcat无法运行该示例

Slide 28

28 小结 向服务器注册Web应用 组织Web应用 在WAR文件中部署应用 记录Web应用对共享库的依赖关系 处理相对URL 在Web应用间共享数据

Slide 29

29 练习3-1 在WebLogic Server 中部署以下Web应用 webapp1.war sharetest1.war sharetest2.war

Summary: Java Web Application

Tags: java web application

URL:
More by this User
Most Viewed