JAR 包 : doget 方法 : 1. import java.io.ioexception; 2. import java.io.printwriter; 3. import javax.servlet.servletexception; 4. import javax.servlet.htt

Size: px
Start display at page:

Download "JAR 包 : doget 方法 : 1. import java.io.ioexception; 2. import java.io.printwriter; 3. import javax.servlet.servletexception; 4. import javax.servlet.htt"

Transcription

1 Java Servlet 技术的实现原理 程天任 摘要 : Server Applet 全称 Java Servlet, 是用 Java 编写的服务器端程序 其主要功能在于交互式地浏览和修改数据, 生成动态 Web 内容 狭义的 Servlet 是指 Java 语言实现的一个接口, 广义的 Servlet 是指任何实现了这个 Servlet 接口的类, 一般情况下, 人们将 Servlet 理解为后者 Servlet 运行于支持 Java 的应用服务器中 从原理上讲,Servlet 可以响应任何类型的请求, 但绝大多数情况下 Servlet 只用来扩展基于 HTTP 协议的 Web 服务器 要介绍 Servlet 必须先把 Servlet 容器说清楚,Servlet 与 Servlet 容器的关系有点像枪和子弹的关系, 枪是为子弹而生, 而子弹又让枪有了杀伤力 虽然它们是彼此依存的, 但是又相互独立发展, 这一切都是为了适应工业化生产的结果 从技术角度来说是为了解耦, 通过标准化接口来相互协作 本文介绍了十个跟 JAVA SERVLET 有关的实验案例, 通过编译运行得出测试结果 在 tomcat 服务的基础上, 我们进一步探讨了客户端与服务器间的交互原理, 即超文本数据请求与响应模型, 达到了预期教学目标, 具有一定的启发性和学术价值 前言 实验工具与原料 :Myeclipse_10, jdk_1.7,tomcat_7 等 实验原理 : 通过使用 springframework,jdbc-oracle,commons-fileupload 等不同的类库操作 java servlet, 联 合使用 tomcat 与控制台读出结果, 实现程序的编译执行, 并初步涉及与数据库的连接与通信 正文 实验一 :HelloWorld 入口测试程序 工程目录 : 1

2 JAR 包 : doget 方法 : 1. import java.io.ioexception; 2. import java.io.printwriter; 3. import javax.servlet.servletexception; 4. import javax.servlet.http.httpservlet; 5. import javax.servlet.http.httpservletrequest; 6. import javax.servlet.http.httpservletresponse; 7. public class hello1 extends HttpServlet { 8. public hello1() { 9. super(); 10. } 11. public void destroy() { 12. super.destroy(); 13. } 14. public void doget(httpservletrequest request, HttpServletResponse respon se) 15. throws ServletException, IOException { 16. response.setcontenttype("text/html"); 17. PrintWriter out = response.getwriter(); 18. out.println("<!doctype HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitio nal//en\">"); 19. out.println("<html>"); 20. out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>"); 21. out.println(" <BODY>"); 22. out.print("hello world! This is "); 23. out.print(this.getclass()); 24. out.println(", using the GET method!"); 25. out.println("</body>"); 2

3 26. out.println("</html>"); 27. out.flush(); 28. out.close(); 29. } 30. public void dopost(httpservletrequest request, HttpServletResponse respo nse) throws ServletException, IOException { 31. doget(request, response);} 32. } dopost 方法 : 1. import java.io.ioexception; 2. import java.io.printwriter; 3. import javax.servlet.servletexception; 4. import javax.servlet.http.httpservlet; 5. import javax.servlet.http.httpservletrequest; 6. import javax.servlet.http.httpservletresponse; 7. public class hello2 extends HttpServlet { 8. public hello2() { 9. super(); 10. } 11. public void destroy() { 12. super.destroy(); 13. } 14. public void dopost(httpservletrequest request, HttpServletResponse respo nse) 15. throws ServletException, IOException { 16. response.setcontenttype("text/html"); 17. PrintWriter out = response.getwriter(); 18. out.println("<!doctype HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitio nal//en\">"); 19. out.println("<html>"); 20. out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>"); 21. out.println(" <BODY>"); 22. out.print(" hello world! This is "); 23. out.print(this.getclass()); 24. out.println(", using the POST method"); 25. out.println(" </BODY>"); 26. out.println("</html>"); 27. out.flush(); 28. out.close(); 29. } 30. public void doget(httpservletrequest request, HttpServletResponse respon se) { 3

4 31. try { 32. dopost(request, response); 33. } catch (ServletException e) { 34. // TODO Auto-generated catch block 35. e.printstacktrace(); 36. } catch (IOException e) { 37. // TODO Auto-generated catch block 38. e.printstacktrace(); 39. }} 40. } 配置文件 : 1. <?xml version="1.0" encoding="utf-8"?> 2. <web-app xmlns:xsi=" xmlns=" /java.sun.com/xml/ns/javaee" xmlns:web=" b-app_2_5.xsd" xsi:schemalocation=" java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5" id="webapp_ "> 3. <servlet> 4. <servlet-name>hello1</servlet-name> 5. <servlet-class>hello1</servlet-class> 6. </servlet> 7. <servlet> 8. <servlet-name>hello2</servlet-name> 9. <servlet-class>hello2</servlet-class> 10. </servlet> 11. <servlet-mapping> 12. <servlet-name>hello1</servlet-name> 13. <url-pattern>/hello1</url-pattern> 14. </servlet-mapping> 15. <servlet-mapping> 16. <servlet-name>hello2</servlet-name> 17. <url-pattern>/hello2</url-pattern> 18. </servlet-mapping> 19. </web-app> 项目部署 : 1. 新建一个空的文件夹 2. 启动 tomcat, 分别运行 GET 与 POST 方法 4

5 1. 空文件夹 2. 启动 tomcat 实验二 : 登录注册界面 1. LOGIN 界面 工程目录 : 5

6 SERVLET 类 : 1. import java.io.ioexception; 2. import java.io.printwriter; 3. import javax.servlet.requestdispatcher; 4. import javax.servlet.servletexception; 5. import javax.servlet.http.httpservlet; 6. import javax.servlet.http.httpservletrequest; 7. import javax.servlet.http.httpservletresponse; 8. public class ShowMsgServlet1 extends HttpServlet { 9. protected void dopost(httpservletrequest request, HttpServletResponse re sponse) 10. throws ServletException, IOException { 11. request.setcharacterencoding("utf-8");// 设置编码方式为 UTF-8, 能正确显示汉字 12. response.setcontenttype("text/html;charset=utf-8"); 13. PrintWriter out=response.getwriter(); 14. try{ 15. String username=request.getparameter("username"); 16. String userpass=request.getparameter("userpass"); 17. if("jeff".equalsignorecase(username)&&" ".equals(userpass )){ 18. RequestDispatcher rd=request.getrequestdispatcher("index.jsp "); 19. rd.forward(request, response); 20. }else{ 21. out.print(" 用户名或者密码错误, 请重新输入!"); 22. RequestDispatcher rd=request.getrequestdispatcher("login.jsp "); 23. rd.include(request, response); 24. } 25. out.printf(username); 26. }finally{ 27. out.close(); 28. } 29. } 30. } JSP: 1. INDEX.JSP 1. <%@ page language="java" import="java.util.*" pageencoding="utf-8"%> 2. <% 3. String path = request.getcontextpath(); 6

7 4. String basepath = request.getscheme()+"://"+request.getservername()+":"+requ est.getserverport()+path+"/"; 5. %> 6. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 7. <html> 8. <head> 9. <base href="<%=basepath%>"> 10. <title>my JSP 'index.jsp' starting page</title> 11. <meta http-equiv="pragma" content="no-cache"> 12. <meta http-equiv="cache-control" content="no-cache"> 13. <meta http-equiv="expires" content="0"> 14. <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> 15. <meta http-equiv="description" content="this is my page"> 16. <! <link rel="stylesheet" type="text/css" href="styles.css"> > 19. </head> 20. <body> 21. <h1> 欢迎光临!</h1> 22. </body> 23. </html> 2.LOGIN.JSP 1. <%@ page language="java" import="java.util.*" pageencoding="utf-8"%> 2. <% 3. String path = request.getcontextpath(); 4. String basepath = request.getscheme()+"://"+request.getservername()+":"+requ est.getserverport()+path+"/"; 5. %> 6. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 7. <html> 8. <head> 9. <base href="<%=basepath%>"> 10. <title>my JSP 'login.jsp' starting page</title> 11. <meta http-equiv="pragma" content="no-cache"> 12. <meta http-equiv="cache-control" content="no-cache"> 13. <meta http-equiv="expires" content="0"> 14. <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> 15. <meta http-equiv="description" content="this is my page"> 16. <! <link rel="stylesheet" type="text/css" href="styles.css"> > 19. </head> 20. <body> 7

8 21. <form name="frm" method="post" action="showmsgservlet1"> 22. <table frame="box" cellspacing="5" align="left" width="226" hei ght="185"> 23. <tr> 24. <td colspan="2" align="center"><p><h3> 用户登录 </h3></p></td> 25. </tr> 26. <tr> 27. <td><label for="username"> 用户名 </label></td> 28. <td><input type="text" name="username" value=""/></td> 29. </tr> 30. <tr> 31. <td><label for="userpass"> 密 码 </label></td> 32. <td><input type="password" name="userpass" value=""/></t d> 33. </tr> 34. <tr> 35. <td colspan="2"> 36. <input type="submit" src="./newbtn.png" width=100% 37. height=80% border="0" value=" 登录 " 38. onclick="document.forms['frm'].submit();"> 39. </td> 40. </tr> 41. <tr> </tr> 42. </table> 43. </form> 44. </body> 45. </html> WEB.XML 1. <?xml version="1.0" encoding="utf-8"?> 2. <web-app version="2.5" 3. xmlns=" 4. xmlns:xsi=" 5. xsi:schemalocation=" <display-name></display-name> 8. <welcome-file-list> 9. <welcome-file>index.jsp</welcome-file> 10. </welcome-file-list> 11. <servlet> 12. <servlet-name>login</servlet-name> 13. <servlet-class>showmsgservlet1</servlet-class> 8

9 14. </servlet> 15. <servlet-mapping> 16. <servlet-name>login</servlet-name> 17. <url-pattern>/</url-pattern> 18. </servlet-mapping> 19. </web-app> 项目部署 : 1. 登录界面 2. 登录信息 3. 页面跳转 4. 错误提示 9

10 2. REGISTER 界面 工程目录 : JAR 包 : SERVLET 类 : 应用 SERVLET 修改 VALIDATE 属性值为 true, 以屏蔽权限验证 1. import java.io.ioexception; 2. import java.net.unknownhostexception; 3. import java.util.date; 4. import javax.servlet.servletexception; 5. import javax.servlet.http.httpservlet; 10

11 6. import javax.servlet.http.httpservletrequest; 7. import javax.servlet.http.httpservletresponse; 8. import org.apache.commons.beanutils.beanutils; 9. import org.apache.commons.beanutils.convertutils; 10. import org.apache.commons.beanutils.locale.converters.datelocaleconverter; 11. /** 12. * 处理用户注册的 Servlet 13. gacl 14. * 15. */ 16. public class RegisterServlet extends HttpServlet { 17. public void doget(httpservletrequest request, HttpServletResponse response) 18. throws ServletException, IOException { 19. // 将客户端提交的表单数据封装到 RegisterFormBean 对象中 20. RegisterFormBean formbean = WebUtils.requestBean(request,RegisterFormBean.cl ass); 21. // 校验用户注册填写的表单数据 22. if (formbean.validate() == true) { 23. request.setattribute("formbean", formbean); 24. request.getrequestdispatcher("/index.jsp").forward(request, response); 25. return; 26. } 27. User user = new User(); 28. try { 29. // 注册字符串到日期的转换器 30. //ConvertUtils.register(new DateLocaleConverter(), Date.class); 31. //BeanUtils.copyProperties(user, formbean);// 把表单的数据填充到 javabean 中 32. user.setid(webutils.makeid());// 设置用户的 Id 属性 33. UserServiceImpl service = new UserServiceImpl(); 34. // 调用 service 层提供的注册用户服务实现用户注册 35. //service.registeruser(user); 36. String message = String.format( 37. " 注册成功!! 秒后为您自动跳到登录页面!! <meta http-equiv='refresh' content=';url=%s'/>", 38. request.getcontextpath()+"/servlet/loginuiservlet"); 39. request.setattribute("message",message); 40. request.getrequestdispatcher("/index.jsp").forward(request,response); 41. } catch (UnknownHostException e) { 42. formbean.geterrors().put("username", " 注册用户已存在!!"); 43. request.setattribute("formbean", formbean); 44. request.getrequestdispatcher("/register.jsp").forward(request, response); 45. } catch (Exception e) { 46. e.printstacktrace(); // 在后台记录异常 11

12 47. request.setattribute("message", " 对不起, 注册失败!!"); 48. request.getrequestdispatcher("/index.jsp").forward(request,response); 49. } 50. } 51. public void dopost(httpservletrequest request, HttpServletResponse response) 52. { 53. try { 54. doget(request, response); 55. } catch (ServletException e) { 56. // TODO Auto-generated catch block 57. //e.printstacktrace(); 58. } catch (IOException e) { 59. // TODO Auto-generated catch block 60. //e.printstacktrace(); 61. } 62. } 63. } 辅助程序 : 1. REGISTERFORMBEAN 1. import java.util.hashmap; 2. import java.util.map; 3. import org.apache.commons.beanutils.locale.converters.datelocaleconverter; 4. /** 5. * 封装的用户注册表单 bean, 用来接收 register.jsp 中的表单输入项的值 6. * RegisterFormBean 中的属性与 register.jsp 中的表单输入项的 name 一一对应 7. * RegisterFormBean 的职责除了负责接收 register.jsp 中的表单输入项的值之外还担任着校验表单输入项的值的合法性 8. gacl 9. * 10. */ 11. public class RegisterFormBean { 12. //RegisterFormBean 中的属性与 register.jsp 中的表单输入项的 name 一一对应 13. //<input type="text" name="username"/> 14. private String username; 15. //<input type="password" name="userpwd"/> 16. private String userpwd; 17. //<input type="password" name="confirmpwd"/> 18. private String confirmpwd; 19. //<input type="text" name=" "/> 20. private String ; 21. //<input type="text" name="birthday"/> 12

13 22. private String birthday; 23. /** 24. * 存储校验不通过时给用户的错误提示信息 25. */ 26. private Map<String, String> errors = new HashMap<String, String>(); 27. public Map<String, String> geterrors() { 28. return errors; 29. } 30. public void seterrors(map<string, String> errors) { 31. this.errors = errors; 32. } 33. /* 34. * validate 方法负责校验表单输入项 35. * 表单输入项校验规则 : 36. * private String username; 用户名不能为空, 并且要是 - 的字母 abcdabcd 37. * private String userpwd; 密码不能为空, 并且要是 - 的数字 38. * private String confirmpwd; 两次密码要一致 39. * private String ; 可以为空, 不为空要是一个合法的邮箱 40. * private String birthday; 可以为空, 不为空时, 要是一个合法的日期 41. */ 42. public boolean validate() { 43. boolean isok = true; 44. if (this.username == null this.username.trim().equals("")) { 45. isok = false; 46. errors.put("username", " 用户名不能为空!!"); 47. } else { 48. if (!this.username.matches("[a-za-z]{,}")) { 49. isok = false; 50. errors.put("username", " 用户名必须是 - 位的字母!!"); 51. } 52. } 53. if (this.userpwd == null this.userpwd.trim().equals("")) { 54. isok = false; 55. errors.put("userpwd", " 密码不能为空!!"); 56. } else { 57. if (!this.userpwd.matches("\\d{,}")) { 58. isok = false; 59. errors.put("userpwd", " 密码必须是 - 位的数字!!"); 60. } 61. } 62. // private String password; 两次密码要一致 63. if (this.confirmpwd!= null) { 64. if (!this.confirmpwd.equals(this.userpwd)) { 65. isok = false; 13

14 66. errors.put("confirmpwd", " 两次密码不一致!!"); 67. } 68. } 69. // private String ; 可以为空, 不为空要是一个合法的邮箱 70. if (this. != null &&!this. .trim().equals("")) { 71. if (!this. .matches("\\w+@\\w+(\\.\\w+)+")) { 72. isok = false; 73. errors.put(" ", " 邮箱不是一个合法邮箱!!"); 74. } 75. } 76. // private String birthday; 可以为空, 不为空时, 要是一个合法的日期 77. if (this.birthday!= null &&!this.birthday.trim().equals("")) { 78. try { 79. DateLocaleConverter conver = new DateLocaleConverter(); 80. conver.convert(this.birthday); 81. } catch (Exception e) { 82. isok = false; 83. errors.put("birthday", " 生日必须要是一个日期!!"); 84. } 85. } 86. return isok; 87. } 88. public String getusername() { 89. return username; 90. } 91. public void setusername(string username) { 92. this.username = username; 93. } 94. public String getuserpwd() { 95. return userpwd; 96. } 97. public void setuserpwd(string userpwd) { 98. this.userpwd = userpwd; 99. } 100. public String getconfirmpwd() { 101. return confirmpwd; 102. } 103. public void setconfirmpwd(string confirmpwd) { 104. this.confirmpwd = confirmpwd; 105. } 106. public String get () { 107. return ; 108. } 109. public void set (string ) { 14

15 110. this. = ; 111. } 112. public String getbirthday() { 113. return birthday; 114. } 115. public void setbirthday(string birthday) { 116. this.birthday = birthday; 117. } 118. } 2. USER 1. import java.io.serializable; 2. import java.util.date; 3. public class User implements Serializable { 4. private static final int L = 0; 5. private static final long serialversionuid = -L; 6. // 用户 ID 7. private String id; 8. // 用户名 9. private String username; 10. // 用户密码 11. private String userpwd; 12. // 用户邮箱 13. private String ; 14. // 用户生日 15. private Date birthday; 16. public String getid() { 17. return id; 18. } 19. public void setid(string id) { 20. this.id = id; 21. } 22. public String getusername() { 23. return username; 24. } 25. public void setusername(string username) { 26. this.username = username; 27. } 28. public String getuserpwd() { 29. return userpwd; 30. } 31. public void setuserpwd(string userpwd) { 32. this.userpwd = userpwd; 33. } 15

16 34. public String get () { 35. return ; 36. } 37. public void set (string ) { 38. this. = ; 39. } 40. public Date getbirthday() { 41. return birthday; 42. } 43. public void setbirthday(date birthday) { 44. this.birthday = birthday; 45. } 46. } 3. USERSERVICEIMPL 1. import java.net.unknownhostexception; 2. import java.util.list; 3. public class UserServiceImpl { 4. User dao; 5. public User getdao() { 6. return dao; 7. } 8. public void setdao(user dao) { 9. this.dao = dao; 10. } 11. } 4. WEBUTILS 1. import java.util.enumeration; 2. import java.util.uuid; 3. import javax.servlet.http.httpservletrequest; 4. import org.apache.commons.beanutils.beanutils; 5. /** 6. gacl 7. * 把 request 对象中的请求参数封装到 bean 中 8. */ 9. public class WebUtils { 10. /** 11. * 将 request 对象转换成 T 对象 12. request 13. clazz */ 16

17 16. public static <T> T requestbean(httpservletrequest request,class<t> clazz){ 17. try{ 18. T bean = clazz.newinstance(); 19. Enumeration<String> e = request.getparameternames(); 20. while(e.hasmoreelements()){ 21. String name = (String) e.nextelement(); 22. String value = request.getparameter(name); 23. //BeanUtils.setProperty(bean, name, value); 24. } 25. return bean; 26. }catch (Exception e) { 27. throw new RuntimeException(e); 28. } 29. } 30. /** 31. * 生成 UUID */ 34. public static String makeid(){ 35. return UUID.randomUUID().toString(); 36. } 37. } 5. IUSERSERVICE 1. import java.net.unknownhostexception; 2. public interface IUserService { 3. /** 4. * 提供注册服务 5. user 6. UserExistException 7. */ 8. void registeruser(user user) throws UnknownHostException; 9. /** 10. * 提供登录服务 11. username 12. userpwd */ 15. User loginuser(string username, String userpwd); 16. } INDEX.JSP 与登录界面一致 17

18 REGISTER.JSP 1. page language="java" pageencoding="utf-8"%> 2. <!DOCTYPE HTML> 3. <html> 4. <head> 5. <title> 用户注册 </title> 6. </head> 7. <body style="text-align: center;"> 8. <form action="${pagecontext.request.contextpath}/servlet/registerservlet" me thod="post"> 9. <table width="%" border=""> 10. <tr> 11. <td> 用户名 </td> 12. <td> 13. <input type="text" name="username"> 14. </td> 15. </tr> 16. <tr> 17. <td> 密码 </td> 18. <td> 19. <input type="password" name="userpwd"> 20. </td> 21. </tr> 22. <tr> 23. <td> 确认密码 </td> 24. <td> 25. <input type="password" name="confirmpwd"> 26. </td> 27. </tr> 28. <tr> 29. <td> 邮箱 </td> 30. <td> 31. <input type="text" name=" "> 32. </td> 33. </tr> 34. <tr> 35. <td> 生日 </td> 36. <td> 37. <input type="text" name="birthday"> 38. </td> 39. </tr> 40. <tr> 41. <td> 18

19 42. <input type="reset" value=" 清空 "> 43. </td> 44. <td> 45. <input type="submit" value=" 注册 "> 46. </td> 47. </tr> 48. </table> 49. </form> 50. </body> 51. </html> WEB.XML 1. <?xml version="1.0" encoding="utf-8"?> 2. <web-app version="2.5" 3. xmlns=" 4. xmlns:xsi=" 5. xsi:schemalocation=" <display-name></display-name> 8. <welcome-file-list> 9. <welcome-file>index.jsp</welcome-file> 10. </welcome-file-list> 11. <servlet> 12. <servlet-name>register</servlet-name> 13. <servlet-class>registerservlet</servlet-class> 14. </servlet> 15. <servlet-mapping> 16. <servlet-name>register</servlet-name> 17. <url-pattern>/</url-pattern> 18. </servlet-mapping> 19. </web-app> 项目部署 : 1. 输入任意注册信息 19

20 2. 页面跳转 实验三 : 请求包含与转发 工程目录 : 转发 SERVLET: 1. DESTINATION 1. package com.test; 2. import java.io.ioexception; 3. import java.io.printwriter; 4. import javax.servlet.genericservlet; 5. import javax.servlet.requestdispatcher; 6. import javax.servlet.servletcontext; 7. import javax.servlet.servletexception; 8. import javax.servlet.servletrequest; 9. import javax.servlet.servletresponse; 10. import javax.servlet.http.httpservlet; 11. import javax.servlet.http.httpservletrequest; 12. import javax.servlet.http.httpservletresponse; 13. public class ForwardDestinationServlet extends HttpServlet { 14. private static final long serialversionuid = L; 16. public void service(httpservletrequest req, HttpServletResponse res) 20

21 17. throws ServletException, IOException { 18. String message = (String)req.getAttribute("msg"); 19. PrintWriter out = res.getwriter(); 20. out.println("<br/>this is from ForwardDestinationServlet<br/>"); 21. out.println("<br/><br/>"); 22. //out.println(message); 23. out.close(); 24. } 25. } 2. SOURCE 1. package com.test; 2. import java.io.ioexception; 3. import java.io.printwriter; 4. import javax.servlet.http.httpservlet; 5. import javax.servlet.servletexception; 6. import javax.servlet.http.httpservletrequest; 7. import javax.servlet.http.httpservletresponse; 8. import javax.servlet.servletcontext; 9. import javax.servlet.requestdispatcher; 10. public class ForwardSourceServlet extends HttpServlet { 11. /** 12. * 13. */ 14. private static final long serialversionuid = L; 16. public void service(httpservletrequest req, HttpServletResponse res) 17. throws ServletException, IOException { 18. String message = null; 19. // add attribute to request 20. req.setattribute("msg", message); 21. // forward the request to ForwardDestinationServlet 22. ServletContext context = getservletcontext(); 23. RequestDispatcher dispatcher = context.getrequestdispatcher("/forwar d1"); 24. // try to output something into response 25. PrintWriter out = res.getwriter(); 26. out.println("output from ForwardSourceServlet before forwarding requ est"); 27. ServletContext context1 = getservletcontext(); 28. RequestDispatcher headdispatcher = context.getrequestdispatcher("/in cludeheader.jsp"); 29. RequestDispatcher bodydispatcher = context.getrequestdispatcher("/fo rward2"); 21

22 30. RequestDispatcher footdispatcher = context.getrequestdispatcher("/in cludefooter.jsp"); 31. headdispatcher.include(req, res); 32. bodydispatcher.include(req, res); 33. footdispatcher.include(req, res); 34. if (dispatcher!= null){ 35. dispatcher.forward(req, res); 36. } 37. out.println("output from ForwardSourceServlet after forwarding reque st"); 38. out.close(); 39. } 40. } 包含 SERVLET: 1. DESTINATION 1. package com.test; 2. import java.io.ioexception; 3. import java.io.printwriter; 4. import javax.servlet.http.httpservlet; 5. import javax.servlet.servletexception; 6. import javax.servlet.http.httpservletrequest; 7. import javax.servlet.http.httpservletresponse; 8. import javax.servlet.servletcontext; 9. import javax.servlet.requestdispatcher; 10. public class IncludeDestinationServlet extends HttpServlet { 11. protected void doget(httpservletrequest req, HttpServletResponse resp) 12. throws ServletException, IOException{ 13. PrintWriter out = resp.getwriter(); 14. out.println("<br/>this is from IncludeDestinationServlet<br/>"); 15. out.println("<br/><br/>"); 16. } 17. } 2. SOURCE 1. package com.test; 2. import java.io.ioexception; 3. import java.io.printwriter; 4. import javax.servlet.http.httpservlet; 5. import javax.servlet.servletexception; 6. import javax.servlet.http.httpservletrequest; 7. import javax.servlet.http.httpservletresponse; 22

23 8. import javax.servlet.servletcontext; 9. import javax.servlet.requestdispatcher; 10. public class IncludeSourceServlet extends HttpServlet { 11. protected void doget(httpservletrequest req, HttpServletResponse resp) 12. throws ServletException, IOException{ 13. resp.setcontenttype("text/html"); 14. PrintWriter out = resp.getwriter(); 15. out.println("<html><header><title>include Test</title></header>"); 16. out.println("<body>"); 17. ServletContext context = getservletcontext(); 18. RequestDispatcher headdispatcher = context.getrequestdispatcher("/in cludeheader.jsp"); 19. RequestDispatcher bodydispatcher = context.getrequestdispatcher("/in clude2"); 20. RequestDispatcher footdispatcher = context.getrequestdispatcher("/in cludefooter.jsp"); 21. headdispatcher.include(req, resp); 22. bodydispatcher.include(req, resp); 23. footdispatcher.include(req, resp); 24. out.println("</body></html>"); 25. out.close(); 26. } 27. } JSP: 1. HEADER 1. <%@ page language="java" import="java.util.*" pageencoding="iso "%> 2. <% 3. String path = request.getcontextpath(); 4. String basepath = request.getscheme()+"://"+request.getservername()+":"+requ est.getserverport()+path+"/"; 5. %> 6. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 7. <html> 8. <head> 9. <base href="<%=basepath%>"> 10. <title>my JSP 'MyJsp.jsp' starting page</title> 11. <meta http-equiv="pragma" content="no-cache"> 12. <meta http-equiv="cache-control" content="no-cache"> 13. <meta http-equiv="expires" content="0"> 14. <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> 15. <meta http-equiv="description" content="this is my page"> 23

24 16. <! <link rel="stylesheet" type="text/css" href="styles.css"> > 19. </head> 20. <body> 21. This is from includeheader.html <br/> 22. </body> 23. </html> 2. FOOTER 1. page language="java" import="java.util.*" pageencoding="iso "%> 2. <% 3. String path = request.getcontextpath(); 4. String basepath = request.getscheme()+"://"+request.getservername()+":"+requ est.getserverport()+path+"/"; 5. %> 6. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 7. <html> 8. <head> 9. <base href="<%=basepath%>"> 10. <title>my JSP 'includefooter.jsp' starting page</title> 11. <meta http-equiv="pragma" content="no-cache"> 12. <meta http-equiv="cache-control" content="no-cache"> 13. <meta http-equiv="expires" content="0"> 14. <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> 15. <meta http-equiv="description" content="this is my page"> 16. <! <link rel="stylesheet" type="text/css" href="styles.css"> > 19. </head> 20. <body> 21. This is from includefooter.html 22. <br/> 23. </body> 24. </html> WEB.XML 1. <pre name="code" class="html"><?xml version="1.0" encoding="utf-8"?> 2. <web-app xmlns:xsi=" xmlns=" /java.sun.com/xml/ns/javaee" xmlns:web=" b-app_2_5.xsd" xsi:schemalocation=" java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5" id="webapp_ "> 24

25 3. <display-name>1d</display-name> 4. <welcome-file-list> 5. <welcome-file>index.html</welcome-file> 6. <welcome-file>index.htm</welcome-file> 7. <welcome-file>index.jsp</welcome-file> 8. <welcome-file>default.html</welcome-file> 9. <welcome-file>default.htm</welcome-file> 10. <welcome-file>default.jsp</welcome-file> 11. </welcome-file-list> 12. <servlet> 13. <servlet-name>hello1</servlet-name> 14. <servlet-class>hello1</servlet-class> 15. </servlet> 16. <servlet> 17. <servlet-name>hello2</servlet-name> 18. <servlet-class>hello2</servlet-class> 19. </servlet> 20. <filter> 21. <filter-name>filter1</filter-name> 22. <filter-class>com.filter.servletfilter1</filter-class> 23. </filter> 24. <filter> 25. <filter-name>filter2</filter-name> 26. <filter-class>com.filter.servletfilter2</filter-class> 27. </filter> 28. <filter> 29. <filter-name>characterfilter</filter-name> 30. <filter-class>com.filter.encodingfilter</filter-class> 31. <init-param> 32. <param-name>encoding</param-name> 33. <param-value>utf-8</param-value> 34. </init-param> 35. </filter> 36. <servlet-mapping> 37. <servlet-name>hello1</servlet-name> 38. <url-pattern>/hello1</url-pattern> 39. </servlet-mapping> 40. <servlet-mapping> 41. <servlet-name>hello2</servlet-name> 42. <url-pattern>/hello2</url-pattern> 43. </servlet-mapping> 44. <filter-mapping> 45. <filter-name>filter1</filter-name> 46. <!-- 只是测试 filter 的执行流程 --> 25

26 47. <url-pattern>/test1</url-pattern> 48. </filter-mapping> 49. <filter-mapping> 50. <filter-name>filter2</filter-name> 51. <!-- 只是测试 filter 的执行流程 --> 52. <url-pattern>/test2</url-pattern> 53. </filter-mapping> 54. <filter-mapping> 55. <filter-name>characterfilter</filter-name> 56. <!-- 设置编码拦截所有的请求 --> 57. <url-pattern>/*</url-pattern> 58. </filter-mapping> 59. <servlet> 60. <servlet-name>test</servlet-name> 61. <servlet-class>com.filter.myfiltertestservlet</servlet-class> 62. </servlet> 63. <servlet-mapping> 64. <servlet-name>test</servlet-name> 65. <url-pattern>/test</url-pattern> 66. </servlet-mapping> 67. <servlet> 68. <servlet-name>forward1</servlet-name> 69. <servlet-class>com.test.forwardsourceservlet</servlet-class> 70. </servlet> 71. <servlet-mapping> 72. <servlet-name>forward1</servlet-name> 73. <url-pattern>/forward1</url-pattern> 74. </servlet-mapping> 75. <servlet> 76. <servlet-name>forward2</servlet-name> 77. <servlet-class>com.test.forwarddestinationservlet</servlet-class> 78. </servlet> 79. <servlet-mapping> 80. <servlet-name>forward2</servlet-name> 81. <url-pattern>/forward2</url-pattern> 82. </servlet-mapping> 83. <servlet> 84. <servlet-name>include1</servlet-name> 85. <servlet-class>com.test.includesourceservlet</servlet-class> 86. </servlet> 87. <servlet-mapping> 88. <servlet-name>include1</servlet-name> 89. <url-pattern>/include1</url-pattern> 90. </servlet-mapping> 26

27 91. <servlet> 92. <servlet-name>include2</servlet-name> 93. <servlet-class>com.test.includedestinationservlet</servlet-class> 94. </servlet> 95. <servlet-mapping> 96. <servlet-name>include2</servlet-name> 97. <url-pattern>/include2</url-pattern> 98. </servlet-mapping> 99. </web-app> 运行结果 : SERVICE 服务不同于 DOGET 方法, 它可以直接解析输出超文本代码 因此, 无论是包含 还是转发, 程序都会把 DESTINATION 调进来 但是, 对于包含模式,SOURCE 文件会把 DESTINATION 的内容以文本形式传进来 ; 而在转发模式下, 包含的内容以超文本显示 : 1. INCLUDE 2. FORWARD 27

28 实验四 : 权限验证与限制 工程目录 : CAPABILITY( 导入 xwork.jar): 过滤类 : 1. package filter; 2. import java.io.ioexception; 3. import java.util.hashset; 28

29 4. import java.util.set; 5. import javax.servlet.filter; 6. import javax.servlet.filterchain; 7. import javax.servlet.filterconfig; 8. import javax.servlet.servletexception; 9. import javax.servlet.servletrequest; 10. import javax.servlet.servletresponse; 11. import javax.servlet.http.httpservletrequest; 12. import javax.servlet.http.httpservletresponse; 13. import javax.servlet.http.httpsession; 14. public class sessioncheck implements Filter{ 15. protected FilterConfig filterconfig = null; 16. private String redirecturl = null; 17. private Set<String> notcheckurllist = new HashSet<String>(); 18. private String sessionkey = null; 20. public void destroy() { 21. notcheckurllist.clear(); 22. } 24. public void dofilter(servletrequest servletrequest, 25. ServletResponse servletresponse, FilterChain filterchain) 26. throws IOException, ServletException { 27. HttpServletRequest request = (HttpServletRequest) servletrequest; 28. HttpServletResponse response = (HttpServletResponse) servletresponse ; 29. HttpSession session = request.getsession(); 30. if (sessionkey == null) { 31. filterchain.dofilter(request, response); 32. return; 33. } 34. if ((!checkrequesturiintnotfilterlist(request)) 35. && session.getattribute(sessionkey) == null) { 36. response.sendredirect(request.getcontextpath() + redirecturl); 37. return; 38. } 39. filterchain.dofilter(servletrequest, servletresponse); 40. } 41. private boolean checkrequesturiintnotfilterlist(httpservletrequest req uest) { 42. String uri = request.getservletpath() (request.getpathinfo() == null? "" : request.getpathinfo()); 29

30 44. String temp = request.getrequesturi(); 45. temp = temp.substring(request.getcontextpath().length() + 1); 46. // System.out.println(" 是否包括 : "+uri+";"+notcheckurllist+"=="+notcheckurllist.contains(uri)); 47. return notcheckurllist.contains(uri); 48. } 50. public void init(filterconfig filterconfig) throws ServletException { 51. this.filterconfig = filterconfig; 52. redirecturl = filterconfig.getinitparameter("redirecturl"); 53. sessionkey = filterconfig.getinitparameter("checksessionkey"); 54. String notcheckurlliststr = filterconfig 55..getInitParameter("notCheckURLList"); 56. if (notcheckurlliststr!= null) { 57. System.out.println(notCheckURLListStr); 58. String[] params = notcheckurlliststr.split(","); 59. for (int i = 0; i < params.length; i++) { 60. notcheckurllist.add(params[i].trim()); 61. } 62. } 63. } 64. } 拦截类 : 1. package interceptor; 2. import java.util.map; 3. import com.opensymphony.xwork2.action; 4. import com.opensymphony.xwork2.actioncontext; 5. import com.opensymphony.xwork2.actioninvocation; 6. import com.opensymphony.xwork2.interceptor.abstractinterceptor; 7. public class authinterceptor extends AbstractInterceptor { 8. private static final long serialversionuid = L; 9. private String sessionkey="loginname"; 10. private String parmkey="withoutauthentication"; 11. private boolean excluded; 13. public String intercept(actioninvocation invocation) throws Exception { 14. ActionContext ac=invocation.getinvocationcontext(); 15. Map<?,?> session =ac.getsession(); 16. String parm=(string) ac.getparameters().get(parmkey); 17. if(parm!=null){ 30

31 18. excluded=parm.touppercase().equals("true"); 19. } 20. String user=(string)session.get(sessionkey); 21. if(excluded user!=null){ 22. return invocation.invoke(); 23. } 24. ac.put("tip", " 您还没有登录!"); 25. // 直接返回 login 的逻辑视图 26. return Action.LOGIN; 27. } 28. } LOGIN.JSP 与 INDEX.JSP 与登录注册界面中相同 配置文件 : 1. WEB.XML 1. <pre name="code" class="html"><?xml version="1.0" encoding="utf-8"?> 2. <web-app id="webapp_id"> 3. <display-name>1d</display-name> 4. <servlet> 5. <servlet-name>action</servlet-name> 6. <servlet-class>org.apache.struts.action.actionservlet</servlet-class> 7. <init-param> 8. <param-name>config</param-name> 9. <param-value>/web-inf/struts-config.xml</param-value> 10. </init-param> 11. <init-param> 12. <param-name>debug</param-name> 13. <param-value>3</param-value> 14. </init-param> 15. <init-param> 16. <param-name>detail</param-name> 17. <param-value>3</param-value> 18. </init-param> 19. <load-on-startup>0</load-on-startup> 20. </servlet> 21. <servlet-mapping> 22. <servlet-name>action</servlet-name> 23. <url-pattern>*.do</url-pattern> 24. </servlet-mapping> 25. <welcome-file-list> 26. <welcome-file>index.html</welcome-file> 31

32 27. <welcome-file>index.htm</welcome-file> 28. <welcome-file>index.jsp</welcome-file> 29. <welcome-file>default.html</welcome-file> 30. <welcome-file>default.htm</welcome-file> 31. <welcome-file>default.jsp</welcome-file> 32. </welcome-file-list> 33. <filter> 34. <filter-name>sessioninvalidate1</filter-name> 35. <filter-class>filter.sessioncheck</filter-class> 36. <init-param> 37. <param-name>checksessionkey</param-name> 38. <param-value>loginname</param-value> 39. </init-param> 40. <init-param> 41. <param-name>redirecturl</param-name> 42. <param-value>/login.jsp</param-value> 43. </init-param> 44. <init-param> 45. <param-name>notcheckurllist</param-name> 46. <param-value>/index.jsp,/login.jsp</param-value> 47. </init-param> 48. </filter> 49. <filter> 50. <filter-name>sessioninvalidate2</filter-name> 51. <filter-class>filter.sessioncheck</filter-class> 52. <init-param> 53. <param-name>checksessionkey</param-name> 54. <param-value>loginname</param-value> 55. </init-param> 56. <init-param> 57. <param-name>redirecturl</param-name> 58. <param-value>/index.jsp</param-value> 59. </init-param> 60. <init-param> 61. <param-name>notcheckurllist</param-name> 62. <param-value>/login.jsp,/index.jsp</param-value> 63. </init-param> 64. </filter> 65. <!-- 过滤 / 命名空间下所有 action --> 66. <filter-mapping> 67. <filter-name>sessioninvalidate1</filter-name> 68. <url-pattern>/jsp1</url-pattern> 69. </filter-mapping> 70. <!-- 过滤 / 文件夹下所有 jsp --> 32

33 71. <filter-mapping> 72. <filter-name>sessioninvalidate2</filter-name> 73. <url-pattern>/jsp2</url-pattern> 74. </filter-mapping> 75. </web-app> 2. STRUTS-CONFIG.XML 1. <?xml version="1.0" encoding="utf-8"?> 2. <!DOCTYPE struts PUBLIC 3. "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" 4. " 5. <struts> 6. <constant name="struts.devmode" value="true" /> 7. <package name="default" namespace="" extends="struts-default"> 8. <!-- 用户拦截器定义在该元素下 --> 9. <interceptors> 10. <!-- 定义了一个名为 authority 的拦截器 --> 11. <interceptor name="authenticationinterceptor" class="interceptor.a uthinterceptor" /> 12. <interceptor-stack name="defualtsecuritystackwithauthentication"> 13. <interceptor-ref name="defaultstack" /> 14. <interceptor-ref name="authenticationinterceptor" /> 15. </interceptor-stack> 16. </interceptors> 17. <!-- 全局 Result --> 18. <global-results> 19. <result name="index">/index.jsp</result> 20. <result name="login">/login.jsp</result> 21. </global-results> 22. <action name="login" class="action.loginaction"> 23. <param name="withoutauthentication">true</param> 24. <result name="success">/index.jsp</result> 25. <result name="input">/login.jsp</result> 26. </action> 27. </package> 28. </struts> 3. PROPERTIES 1. # Resources for parameter 'com.yourcompany.struts.applicationresources' 2. # Project servletfilter 33

34 运行结果 : 地址由 /url-pattern 跳转到 jsp, 输入 /jsp1,/jsp2 立刻跳转为 index.jsp,login.jsp 即实现了如下响应模式 : request filter interceptor action jsp 实验五 : 拦截器 (filter) 执行流程 工程目录 : 34

35 SERVLET 类 : 1. FILTER1 1. package com.filter; 2. import java.io.ioexception; 3. import javax.servlet.filter; 4. import javax.servlet.filterchain; 5. import javax.servlet.filterconfig; 6. import javax.servlet.servlet; 7. import javax.servlet.servletconfig; 8. import javax.servlet.servletexception; 9. import javax.servlet.servletrequest; 10. import javax.servlet.servletresponse; 11. public class ServletFilter1 implements Filter { 13. public void destroy() { 14. } 16. public void dofilter(servletrequest request, ServletResponse response, 17. FilterChain chain) throws IOException, ServletException { 18. System.out.println(" 第一个拦截器的 chain.dofilter() 之前 \t\t\t\t\t"+" "); 19. chain.dofilter(request, response); 20. System.out.println(" 第一个拦截器的 chain.dofilter() 之后 \t\t\t\t\t"+" "); 21. } 23. public void init(filterconfig arg0) throws ServletException { 24. } 25. } 2. FILTER2 1. package com.filter; 2. import java.io.ioexception; 3. import javax.servlet.filter; 4. import javax.servlet.filterchain; 5. import javax.servlet.filterconfig; 6. import javax.servlet.servlet; 7. import javax.servlet.servletconfig; 8. import javax.servlet.servletexception; 9. import javax.servlet.servletrequest; 10. import javax.servlet.servletresponse; 11. public class ServletFilter2 implements Filter { 35

36 13. public void destroy() { 14. } 16. public void dofilter(servletrequest request, ServletResponse response, 17. FilterChain chain) throws IOException, ServletException { 18. System.out.println(" 第二个拦截器的 chain.dofilter() 之 前 \t\t\t\t\t"+" "); 19. chain.dofilter(request, response); 20. System.out.println(" 第二个拦截器的 chain.dofilter() 之 后 \t\t\t\t\t"+" "); 21. } 23. public void init(filterconfig arg0) throws ServletException { 24. } 25. } 编码类 : 1. package com.filter; 2. import java.io.ioexception; 3. import java.io.unsupportedencodingexception; 4. import javax.servlet.filter; 5. import javax.servlet.filterchain; 6. import javax.servlet.filterconfig; 7. import javax.servlet.servletexception; 8. import javax.servlet.servletrequest; 9. import javax.servlet.servletresponse; 10. import javax.servlet.http.httpservletrequest; 11. import javax.servlet.http.httpservletrequestwrapper; 12. import javax.servlet.http.httpservletresponse; 13. public class EncodingFilter implements Filter { 14. private static String encoding; 15. private static final String DEFAULT_CHARSET="UTF-8"; 16. public void destroy() { 17. System.out.println(" destroy "); 18. } 19. public void dofilter(servletrequest request, ServletResponse response, 20. FilterChain chain) throws IOException, ServletException { 21. System.out.println(" doFilter "); 22. HttpServletRequest httprequest = (HttpServletRequest) request; 23. HttpServletResponse httpresponse=(httpservletresponse)response; 24. if("get".equals(httprequest.getmethod())){ 36

37 25. EncodingHttpServletRequest wrapper = new EncodingHttpServletRequ est(httprequest, encoding); 26. chain.dofilter(wrapper, response); 27. }else{ 28. httprequest.setcharacterencoding(encoding); 29. httpresponse.setcontenttype("text/html;charset="+encoding); 30. chain.dofilter(request, response); 31. } 32. } 33. private static class EncodingHttpServletRequest extends HttpServletRequ estwrapper{ 34. private HttpServletRequest request; 35. public EncodingHttpServletRequest(HttpServletRequest request,string encoding) { 36. super(request); 37. this.request = request; 38. } 40. public String getparameter(string name) { 41. String value = request.getparameter(name); 42. try { 43. value = new String(value.getBytes("iso8859-1"), encoding); 44. } catch (UnsupportedEncodingException e) { 45. e.printstacktrace(); 46. } 47. return super.getparameter(name); 48. } 49. } 50. public void init(filterconfig config) throws ServletException { System.out.println(" init "); 53. encoding = config.getinitparameter("encoding"); 54. if(encoding==null "".equals(encoding)) 55. encoding=default_charset; 56. } 57. } 测试类 : 1. package com.filter; 2. import java.io.ioexception; 3. import javax.servlet.servletexception; 4. import javax.servlet.http.httpservlet; 5. import javax.servlet.http.httpservletrequest; 6. import javax.servlet.http.httpservletresponse; 37

38 7. public class MyFilterTestServlet extends HttpServlet { 8. private static final long serialversionuid = 1L; 10. protected void service(httpservletrequest request, HttpServletResponse r esponse) 11. throws ServletException, IOException { 12. System.out.println(" 执行 servlet 中的 service() 方法 \t\t\t\t\t"+" "); 13. } 14. } WEB.XML 1. <?xml version="1.0" encoding="utf-8"?> 2. <web-app xmlns:xsi=" xmlns=" /java.sun.com/xml/ns/javaee" xmlns:web=" b-app_2_5.xsd" xsi:schemalocation=" java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5" id="webapp_ "> 3. <display-name>1d</display-name> 4. <welcome-file-list> 5. <welcome-file>index.html</welcome-file> 6. <welcome-file>index.htm</welcome-file> 7. <welcome-file>index.jsp</welcome-file> 8. <welcome-file>default.html</welcome-file> 9. <welcome-file>default.htm</welcome-file> 10. <welcome-file>default.jsp</welcome-file> 11. </welcome-file-list> 12. <servlet> 13. <servlet-name>hello1</servlet-name> 14. <servlet-class>hello1</servlet-class> 15. </servlet> 16. <servlet> 17. <servlet-name>hello2</servlet-name> 18. <servlet-class>hello2</servlet-class> 19. </servlet> 20. <filter> 21. <filter-name>filter1</filter-name> 22. <filter-class>com.filter.servletfilter1</filter-class> 23. </filter> 24. <filter> 25. <filter-name>filter2</filter-name> 26. <filter-class>com.filter.servletfilter2</filter-class> 27. </filter> 28. <filter> 38

39 29. <filter-name>characterfilter</filter-name> 30. <filter-class>com.filter.encodingfilter</filter-class> 31. <init-param> 32. <param-name>encoding</param-name> 33. <param-value>utf-8</param-value> 34. </init-param> 35. </filter> 36. <servlet-mapping> 37. <servlet-name>hello1</servlet-name> 38. <url-pattern>/hello1</url-pattern> 39. </servlet-mapping> 40. <servlet-mapping> 41. <servlet-name>hello2</servlet-name> 42. <url-pattern>/hello2</url-pattern> 43. </servlet-mapping> 44. <filter-mapping> 45. <filter-name>filter1</filter-name> 46. <!-- 只是测试 filter 的执行流程 --> 47. <url-pattern>/test1</url-pattern> 48. </filter-mapping> 49. <filter-mapping> 50. <filter-name>filter2</filter-name> 51. <!-- 只是测试 filter 的执行流程 --> 52. <url-pattern>/test2</url-pattern> 53. </filter-mapping> 54. <filter-mapping> 55. <filter-name>characterfilter</filter-name> 56. <!-- 设置编码拦截所有的请求 --> 57. <url-pattern>/*</url-pattern> 58. </filter-mapping> 59. <servlet> 60. <servlet-name>test</servlet-name> 61. <servlet-class>com.filter.myfiltertestservlet</servlet-class> 62. </servlet> 63. <servlet-mapping> 64. <servlet-name>test</servlet-name> 65. <url-pattern>/test</url-pattern> 66. </servlet-mapping> 67. </web-app> 项目部署 : 1. 执行第一 第二次拦截 39

40 2. 注册服务 3. 注销 4. 修改 Test 为星号 40

41 5. 拦截 - 注册服务 - 销毁 6. 去掉断点 41

42 实验六 : 监听器 (contextloaderlistener) 工程目录 : JAR 包 (SPRINGFRAMEWORK): 监听类 : 1. <pre name="code" class="java"> 2. import javax.servlet.servletcontext; 3. import javax.servlet.servletcontextevent; 4. import javax.servlet.servletcontextlistener; 5. import org.apache.commons.logging.log; 6. import org.springframework.context.applicationcontext; 7. import org.springframework.context.support.classpathxmlapplicationcontext; 8. import org.springframework.context.support.filesystemxmlapplicationcontext; 9. import org.springframework.util.assert; 42

43 10. import org.springframework.web.context.configurablewebapplicationcontext; 11. import org.springframework.web.context.contextcleanuplistener; 12. import org.springframework.web.context.contextloader; 13. import org.springframework.web.context.webapplicationcontext; 14. import com.sun.org.apache.commons.logging.logfactory; 15. public class ContextLoaderListener extends ContextLoader implements ServletC ontextlistener { 16. private ContextLoader contextloader; 17. private WebApplicationContext context; 18. public ContextLoaderListener() { 19. } 20. public ContextLoaderListener(WebApplicationContext context) { 21. super(context); 22. } 23. public void contextinitialized(servletcontextevent event) { 24. this.contextloader = createcontextloader(); 25. if (this.contextloader == null) { 26. this.contextloader = this; 27. } 28. this.contextloader.initwebapplicationcontext(event.getservletcontext ()); 29. } 31. protected ContextLoader createcontextloader() { 32. return null; 33. } 35. public ContextLoader getcontextloader() { 36. return this.contextloader; 37. } 38. public void contextdestroy(servletcontextevent event) { 39. if (this.contextloader!= null) { 40. this.contextloader.closewebapplicationcontext(event.getservl etcontext()); 41. } 42. } 43. public WebApplicationContext initwebapplicationcontext(servletcontext se rvletcontext) { 44. if (servletcontext.getattribute(webapplicationcontext.root_w EB_APPLICATION_CONTEXT_ATTRIBUTE)!= null) { 45. throw new IllegalStateException( 46. "Cannot initialize context because there is alr eady a root application context present - " + 43

44 47. "check whether you have multiple ContextLoader* definitions in your web.xml!"); 48. } 49. com.sun.org.apache.commons.logging.log logger = LogFactory.g etlog(contextloader.class); 50. servletcontext.log("initializing Spring root WebApplicationC ontext"); 51. if (logger.isinfoenabled()) { 52. logger.info("root WebApplicationContext: initialization started"); 53. } 54. long starttime = System.currentTimeMillis(); 55. try { 56. if (this.context == null) { 57. this.context = createwebapplicationcontext(servletco ntext); 58. } 59. if (this.context instanceof ConfigurableWebApplicationCo ntext) { 60. ConfigurableWebApplicationContext cwac = (Configurab lewebapplicationcontext) this.context; 61. if (!cwac.isactive()) { 62. if (cwac.getparent() == null) { 63. ApplicationContext parent = loadparentcontex t(servletcontext); 64. cwac.setparent(parent); 65. } 66. //configureandrefreshwebapplicationcontext(cwac, servletcontext); 67. } 68. } 69. servletcontext.setattribute(webapplicationcontext.root_ WEB_APPLICATION_CONTEXT_ATTRIBUTE, this.context); 70. ClassLoader ccl = Thread.currentThread().getContextClas sloader(); 71. if (ccl == ContextLoader.class.getClassLoader()) { 72. WebApplicationContext currentcontext = this.context ; 73. } 74. else if (ccl!= null) { 75. return null; 76. } 77. if (logger.isdebugenabled()) { 44

45 78. logger.debug("published root WebApplicationContext as ServletContext attribute with name [" WebApplicationContext.ROOT_WEB_APPLICATION_C ONTEXT_ATTRIBUTE + "]"); 80. } 81. if (logger.isinfoenabled()) { 82. long elapsedtime = System.currentTimeMillis() - sta rttime; 83. logger.info("root WebApplicationContext: initializa tion completed in " + elapsedtime + " ms"); 84. } 85. return this.context; 86. } 87. catch (RuntimeException ex) { 88. logger.error("context initialization failed", ex); 89. servletcontext.setattribute(webapplicationcontext.root_ WEB_APPLICATION_CONTEXT_ATTRIBUTE, ex); 90. throw ex; 91. } 92. catch (Error err) { 93. logger.error("context initialization failed", err); 94. servletcontext.setattribute(webapplicationcontext.root_ WEB_APPLICATION_CONTEXT_ATTRIBUTE, err); 95. throw err; 96. } 97. } 98. public static WebApplicationContext getwebapplicationcontext(servletcon text sc) { 99. return getwebapplicationcontext(sc, WebApplicationContext.R OOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE); 100. } 101. public static WebApplicationContext getwebapplicationcontext(servletco ntext sc, String attrname) { 102. Assert.notNull(sc, "ServletContext must not be null"); 103. Object attr = sc.getattribute(attrname); 104. if (attr == null) { 105. return null; 106. } 107. if (attr instanceof RuntimeException) { 108. throw (RuntimeException) attr; 109. } 110. if (attr instanceof Error) { 111. throw (Error) attr; 112. } 45

46 113. if (attr instanceof Exception) { 114. throw new IllegalStateException((Exception) attr); 115. } 116. if (!(attr instanceof WebApplicationContext)) { 117. throw new IllegalStateException("Context attribute is not of type WebApplicationContext: " + attr); 118. } 119. return (WebApplicationContext) attr; 120. } 121. public void contextdestroyed(servletcontextevent sce) { 122. // TODO Auto-generated method stub 123. } 124. } 配置文件 : 1. WEB.XML 1. <?xml version="1.0" encoding="utf-8"?> 2. <web-app xmlns=" xmlns:xsi=" org/2001/xmlschema-instance" version="2.5" xsi:schemalocation=" un.com/xml/ns/javaee 3. <display-name /> 4. <servlet> 5. <servlet-name>action</servlet-name> 6. <servlet-class>org.apache.struts.action.actionservlet</servlet-class> 7. <init-param> 8. <param-name>config</param-name> 9. <param-value>/web-inf/struts-config.xml</param-value> 10. </init-param> 11. <init-param> 12. <param-name>debug</param-name> 13. <param-value>3</param-value> 14. </init-param> 15. <init-param> 16. <param-name>detail</param-name> 17. <param-value>3</param-value> 18. </init-param> 19. <load-on-startup>0</load-on-startup> 20. </servlet> 21. <servlet-mapping> 22. <servlet-name>action</servlet-name> 23. <url-pattern>*.do</url-pattern> 24. </servlet-mapping> 46

47 25. <welcome-file-list> 26. <welcome-file>index.jsp</welcome-file> 27. </welcome-file-list> 28. <listener> 29. <listener-class>contextloaderlistener</listener-class> 30. </listener> 31. <context-param> 32. <param-name>contextconfiglocation</param-name> 33. <param-value>/web-inf/applicationcontext.xml</param-value> 34. </context-param> 35. </web-app> 2. APPLICATIONCONTEXT.XML 1. <pre name="code" class="html"><?xml version="1.0" encoding="utf-8"?> 2. <beans xmlns=" xmlns:context="ht tp:// xmlns:xsi=" 01/XMLSchema-instance" xmlns:aop=" 3. xmlns:tx=" xmlns:p=" springframework.org/schema/p" xmlns:util=" ema/util" xmlns:jdbc=" 4. xmlns:cache=" 5. xsi:schemalocation=" <!-- datasource 配置 --> 21. <bean id="datasource" class="com.alibaba.druid.pool.druiddatasource" ini t-method="init" destroy-method="close"> 22. <!-- 基本属性 url user password --> 23. <property name="url" value="${jdbc.url}" /> 24. <property name="username" value="${jdbc.username}" /> 25. <property name="password" value="${jdbc.password}" /> 47

48 26. <!-- 配置初始化大小 最小 最大 --> 27. <property name="initialsize" value="1" /> 28. <property name="minidle" value="1" /> 29. <property name="maxactive" value="20" /> 30. <!-- 配置获取连接等待超时的时间 --> 31. <property name="maxwait" value="60000" /> 32. <!-- 配置间隔多久才进行一次检测, 检测需要关闭的空闲连接, 单位是毫秒 --> 33. <property name="timebetweenevictionrunsmillis" value="60000" /> 34. <!-- 配置一个连接在池中最小生存的时间, 单位是毫秒 --> 35. <property name="minevictableidletimemillis" value="300000" /> 36. <property name="validationquery" value="select 'x'" /> 37. <property name="testwhileidle" value="true" /> 38. <property name="testonborrow" value="false" /> 39. <property name="testonreturn" value="false" /> 40. <!-- 打开 PSCache, 并且指定每个连接上 PSCache 的大小 --> 41. <property name="poolpreparedstatements" value="false" /> 42. <property name="maxpoolpreparedstatementperconnectionsize" value="20 " /> 43. <!-- 配置监控统计拦截的 filters --> 44. <property name="filters" value="stat" /> 45. </bean> 46. <!-- mybatis 文件配置, 扫描所有 mapper 文件 --> 47. <bean id="sqlsessionfactory" class="org.mybatis.spring.sqlsessionfactory Bean" p:datasource-ref="datasource" p:configlocation="classpath:mybatis-conf ig.xml" p:mapperlocations="classpath:com/eduoinfo/finances/bank/web/dao/*.xm l" /> 48. <!-- spring 与 mybatis 整合配置, 扫描所有 dao --> 49. <bean class="org.mybatis.spring.mapper.mapperscannerconfigurer" p:basepa ckage="com.eduoinfo.finances.bank.web.dao" p:sqlsessionfactorybeanname="sqls essionfactory" /> 50. <!-- 对 datasource 数据源进行事务管理 --> 51. <bean id="transactionmanager" class="org.springframework.jdbc.datasource.datasourcetransactionmanager" p:datasource-ref="datasource" /> 52. <!-- 配置使 Spring 采用 CGLIB 代理 --> 53. <aop:aspectj-autoproxy proxy-target-class="true" /> 54. <!-- 启用对事务注解的支持 --> 55. <tx:annotation-driven transaction-manager="transactionmanager" /> 56. <!-- Cache 配置 --> 57. <cache:annotation-driven cache-manager="cachemanager" /> 58. <bean id="ehcachemanagerfactory" class="org.springframework.cache.ehcach e.ehcachemanagerfactorybean" p:configlocation="classpath:ehcache.xml" /> 59. <bean id="cachemanager" class="org.springframework.cache.ehcache.ehcache CacheManager" p:cachemanager-ref="ehcachemanagerfactory" /> 48

49 60. </beans> 运行结果 (init_webapp): 实验七 : 文件上传下载 1. 断点下载 ( 续传 ) 工程目录 : 49

50 SERVLET 类 : 1. import java.io.file; 2. import java.io.fileinputstream; 3. import java.io.ioexception; 4. import java.io.inputstream; 5. import java.io.outputstream; 6. import javax.servlet.servletexception; 7. import javax.servlet.http.httpservlet; 8. import javax.servlet.http.httpservletrequest; 9. import javax.servlet.http.httpservletresponse; 10. public class downloadtest1 extends HttpServlet { 11. protected void doget(httpservletrequest req, HttpServletResponse resp) 12. throws ServletException, IOException { 13. // TODO Auto-generated method stub 14. dopost(req, resp); 15. } 16. protected void dopost(httpservletrequest req, HttpServletResponse resp) 17. throws ServletException, IOException { 18. // TODO Auto-generated method stub 19. // 被下载文件路径名称 20. String path = "D:\\",fileName="1.txt"; 21. File file = new File(path+fileName); 22. InputStream in = new FileInputStream(file); 23. OutputStream os= resp.getoutputstream(); 24. // 清空 response 缓存中数据, 仅保留状态码及 Header 25. resp.reset(); 26. byte [] buffer = new byte [128]; 27. long downloaded=0; 28. String range = req.getheader("range"); 29. if(range!= null){ 30. downloaded = Long.parseLong(range.split("-")[0].split("=")[1]) ; 31. // 设置 206 状态表示可以断点下载 32. resp.setstatus(206); 33. // 设置下载的范围 34. resp.setheader("content-range","bytes "+downloaded+"-"+file.le ngth()+"/"+file.length()); 35. } 36. resp.setcontenttype("application/octet-stream"); 37. // 文件名 38. resp.addheader("content-disposition", "attachment; filename="+new String(fileName.getBytes())); 50

51 39. // 文件大小 40. resp.addheader("content-length", file.length() + ""); 41. // 接受范围 bytes 42. resp.setheader("accept-ranges", "bytes"); 43. int len = 0; 44. while ((len=in.read(buffer))!=-1){ 45. os.write(buffer,0,len); 46. } 47. in.close(); 48. os.flush(); 49. os.close(); 50. } 51. } WEB.XML 1. <?xml version="1.0" encoding="utf-8"?> 2. <web-app version="2.5" 3. xmlns=" 4. xmlns:xsi=" 5. xsi:schemalocation=" <display-name></display-name> 8. <welcome-file-list> 9. <welcome-file>index.jsp</welcome-file> 10. </welcome-file-list> 11. <servlet> 12. <servlet-name>login</servlet-name> 13. <servlet-class>showmsgservlet1</servlet-class> 14. </servlet> 15. <servlet-mapping> 16. <servlet-name>login</servlet-name> 17. <url-pattern>/</url-pattern> 18. </servlet-mapping> 19. <servlet> 20. <servlet-name>test</servlet-name> 21. <servlet-class>downloadtest1</servlet-class> 22. </servlet> 23. <servlet-mapping> 24. <servlet-name>test</servlet-name> 25. <url-pattern>/test</url-pattern> 26. </servlet-mapping> 27. </web-app> 51

52 项目部署 : 1. 启动 2. 下载 3. 临时目录 4. 转存 52

53 2. 文件上传 工程目录 : UPLOADSERVLET 1. import java.io.file; 2. import java.io.fileoutputstream; 3. import java.io.ioexception; 4. import java.io.inputstream; 5. import javax.servlet.servletexception; 6. import javax.servlet.http.httpservlet; 7. import javax.servlet.http.httpservletrequest; 8. import javax.servlet.http.httpservletresponse; 9. import java.io.ioexception; 10. import java.io.printwriter; 11. import javax.servlet.servletexception; 12. import javax.servlet.http.httpservlet; 13. import javax.servlet.http.httpservletrequest; 14. import javax.servlet.http.httpservletresponse; 15. import javax.servlet.*; 16. import javax.servlet.http.*; 17. import java.io.*; 18. import java.util.*; 19. import java.io.datainputstream; 20. import java.io.fileoutputstream; 21. import java.io.ioexception; 22. import javax.servlet.servletexception; 23. import javax.servlet.http.httpservlet; 24. import javax.servlet.http.httpservletrequest; 25. import javax.servlet.http.httpservletresponse; 53

54 = "UploadServlet", urlpatterns = {"/UploadServlet"}) 27. public class UploadServlet extends HttpServlet { 28. protected void processrequest(httpservletrequest request, HttpServletRes ponse response) 29. throws ServletException, IOException { 30. response.setcontenttype("text/html;charset=utf-8"); 31. // 读取请求 Body 32. byte[] body = readbody(request); 33. // 取得所有 Body 内容的字符串表示 34. String textbody = new String(body, "UTF-8"); 35. // 取得上传的文件名称 36. String filename = getfilename(textbody); 37. // 取得文件开始与结束位置 38. Position p = getfileposition(request, textbody); 39. // 输出至文件 40. writeto(filename, body, p); 41. } 42. // 构造类 43. class Position { 44. int begin; 45. int end; 46. public Position(int begin, int end) { 47. this.begin = begin; 48. this.end = end; 49. } 50. } 51. private byte[] readbody(httpservletrequest request) throws IOException { 52. // 获取请求文本字节长度 53. int formdatalength = request.getcontentlength(); 54. // 取得 ServletInputStream 输入流对象 55. DataInputStream datastream = new DataInputStream(request.getInputStr eam()); 56. byte body[] = new byte[formdatalength]; 57. int totalbytes = 0; 58. while (totalbytes < formdatalength) { 59. int bytes = datastream.read(body, totalbytes, formdatalength); 60. totalbytes += bytes; 61. } 62. return body; 63. } 64. private Position getfileposition(httpservletrequest request, String text Body) throws IOException { 65. // 取得文件区段边界信息 54

55 66. String contenttype = request.getcontenttype(); 67. String boundarytext = contenttype.substring(contenttype.lastindexof( "=") + 1, contenttype.length()); 68. // 取得实际上传文件的起始与结束位置 69. int pos = textbody.indexof("filename=\""); 70. pos = textbody.indexof("\n", pos) + 1; 71. pos = textbody.indexof("\n", pos) + 1; 72. pos = textbody.indexof("\n", pos) + 1; 73. int boundaryloc = textbody.indexof(boundarytext, pos) - 4; 74. int begin = ((textbody.substring(0, pos)).getbytes("iso ")).le ngth; 75. int end = ((textbody.substring(0, boundaryloc)).getbytes("iso ")).length; 76. return new Position(begin, end); 77. } 78. private String getfilename(string requestbody) { 79. String filename = requestbody.substring(requestbody.indexof("filenam e=\"") + 10); 80. filename = filename.substring(0, filename.indexof("\n")); 81. filename = filename.substring(filename.indexof("\n") + 1, filename.i ndexof("\"")); 82. return filename; 83. } 84. private void writeto(string filename, byte[] body, Position p) throws IO Exception { 85. FileOutputStream fileoutputstream = new FileOutputStream("d:/" + fil ename); 86. fileoutputstream.write(body, p.begin, (p.end - p.begin)); 87. fileoutputstream.flush(); 88. fileoutputstream.close(); 89. } 90. // <editor-fold defaultstate="collapsed" desc="httpservlet methods. Clic k on the + sign on the left to edit the code."> 92. protected void doget(httpservletrequest request, HttpServletResponse res ponse) 93. throws ServletException, IOException { 94. processrequest(request, response); 95. } 97. protected void dopost(httpservletrequest request, HttpServletResponse re sponse) 98. throws ServletException, IOException { 99. processrequest(request, response); 55

56 100. } 102. public String getservletinfo() { 103. return "Short description"; 104. }// </editor-fold> 105. } WEBSERVLET 1. WebServlet { 2. String[] name(); 3. String[] urlpatterns(); 4. } UPLOAD.JSP 1. <%@ page language="java" import="java.util.*" pageencoding="utf-8"%> 2. <% 3. String path = request.getcontextpath(); 4. String basepath = request.getscheme()+"://"+request.getservername()+":"+requ est.getserverport()+path+"/"; 5. %> 6. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 7. <html> 8. <head> 9. <base href="<%=basepath%>"> 10. <title>my JSP 'upload.jsp' starting page</title> 11. <meta http-equiv="pragma" content="no-cache"> 12. <meta http-equiv="cache-control" content="no-cache"> 13. <meta http-equiv="expires" content="0"> 14. <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> 15. <meta http-equiv="description" content="this is my page"> 16. <! <link rel="stylesheet" type="text/css" href="styles.css"> > 19. </head> 20. <body> 21. <form action="uploadservlet" method="post" enctype="multipart/form-data" > 22. <input type="file" name="file"> 23. <input type="submit" name="upload"value=" 上传 "> 24. </form> 25. </body> 26. </html> 56

57 WEB.XML 1. <?xml version="1.0" encoding="utf-8"?> 2. <web-app version="2.5" 3. xmlns=" 4. xmlns:xsi=" 5. xsi:schemalocation=" <display-name></display-name> 8. <welcome-file-list> 9. <welcome-file>index.jsp</welcome-file> 10. </welcome-file-list> 11. <servlet> 12. <servlet-name>login</servlet-name> 13. <servlet-class>showmsgservlet1</servlet-class> 14. </servlet> 15. <servlet-mapping> 16. <servlet-name>login</servlet-name> 17. <url-pattern>/</url-pattern> 18. </servlet-mapping> 19. <servlet> 20. <servlet-name>test</servlet-name> 21. <servlet-class>downloadtest1</servlet-class> 22. </servlet> 23. <servlet-mapping> 24. <servlet-name>test</servlet-name> 25. <url-pattern>/test</url-pattern> 26. </servlet-mapping> 27. <servlet> 28. <servlet-name>upload</servlet-name> 29. <servlet-class>uploadservlet</servlet-class> 30. </servlet> 31. <servlet-mapping> 32. <servlet-name>upload</servlet-name> 33. <url-pattern>/*</url-pattern> 34. </servlet-mapping> 35. </web-app> 运行结果 : 1. 启动 57

58 2. 选择文件 3. 上传 4. 保存目录 进入断点调试模式后, 报错 formdatalength=-1( 负长度数组错误 ) 修改方案 : 修改 UploadServlet 为临时存放 - 保存目录形式, 用缓存取代线程 58

59 导入 JAR 包及 CAPABILITY: UPLOADSERVLET 1. import java.io.bufferedinputstream; 2. import java.io.bufferedoutputstream; 3. import java.io.file; 4. import java.io.fileoutputstream; 5. import java.io.ioexception; 6. import javax.servlet.servletexception; 7. import javax.servlet.http.httpservletrequest; 8. import javax.servlet.http.httpservletresponse; 9. import org.apache.commons.fileupload.defaultfileitemfactory; 10. import org.apache.commons.fileupload.fileitemfactory; 11. import org.apache.commons.fileupload.fileitemiterator; 12. import org.apache.commons.fileupload.fileitemstream; 13. import org.apache.commons.fileupload.disk.diskfileitemfactory; 14. import org.apache.commons.fileupload.servlet.servletfileupload; 15. import org.apache.commons.fileupload.util.streams; 16. /** 17. * 18. Servlet implementation class for Servlet: UploadServlet 19. * 20. */ 21. public class UploadServlet extends javax.servlet.http.httpservlet implements javax.servlet.servlet { 22. File tmpdir = null;// 初始化上传文件的临时存放目录 23. File savedir = null;// 初始化上传文件后的保存目录 24. public UploadServlet() { 25. super(); 26. } 59

60 27. protected void doget(httpservletrequest request, HttpServletResponse respons e) throws ServletException, IOException { 28. dopost(request,response); 29. } 30. protected void dopost(httpservletrequest request, HttpServletResponse respon se) throws ServletException, IOException { 31. try{ 32. if(servletfileupload.ismultipartcontent(request)){ 33. DiskFileItemFactory dff = new DiskFileItemFactory();// 创建该对象 34. dff.setrepository(tmpdir);// 指定上传文件的临时目录 35. dff.setsizethreshold( );// 指定在内存中缓存数据大小, 单位为 byte 36. ServletFileUpload sfu = new ServletFileUpload(dff);// 创建该对象 37. sfu.setfilesizemax( );// 指定单个上传文件的最大尺寸 38. sfu.setsizemax( );// 指定一次上传多个文件的总尺寸 39. FileItemIterator fii = sfu.getitemiterator(request);// 解析 request 请求, 并返回 FileItemIterator 集合 40. while(fii.hasnext()){ 41. FileItemStream fis = fii.next();// 从集合中获得一个文件流 42. if(!fis.isformfield() && fis.getname().length()>0){// 过滤掉表单中非文件域 43. String filename = fis.getname().substring(fis.getname().lastindexof(""));// 获得上传文件的文件名 44. BufferedInputStream in = new BufferedInputStream(fis.openStream());// 获得文件输入流 45. BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(new File(saveDir+fileName)));// 获得文件输出流 46. Streams.copy(in, out, true);// 开始把文件写到你指定的上传文件夹 47. } 48. } 49. response.getwriter().println("file upload successfully!!!");// 终于成功了, 还不到你的上传文件中看看, 你要的东西都到齐了吗 50. } 51. }catch(exception e){ 52. e.printstacktrace(); 53. } 54. } 55. public void init() throws ServletException { 56. /* 对上传文件夹和临时文件夹进行初始化 57. * 58. */ 59. super.init(); 60. String tmppath = "c:/tmpdir"; 61. String savepath = "c:/updir"; 62. tmpdir = new File("c:/tmpdir/1.txt"); 63. savedir = new File("c:/updir/1.txt"); 60

61 64. if(!tmpdir.isdirectory()) 65. tmpdir.mkdir(); 66. if(!savedir.isdirectory()) 67. savedir.mkdir(); 68. } 69. } 配置文件 : 1. WEB.XML 1. <?xml version="1.0" encoding="utf-8"?> 2. <web-app version="2.5" 3. xmlns=" 4. xmlns:xsi=" 5. xsi:schemalocation=" <display-name></display-name> 8. <welcome-file-list> 9. <welcome-file>index.jsp</welcome-file> 10. </welcome-file-list> 11. <servlet> 12. <servlet-name>upload</servlet-name> 13. <servlet-class>uploadservlet</servlet-class> 14. </servlet> 15. <servlet-mapping> 16. <servlet-name>upload</servlet-name> 17. <url-pattern>/*</url-pattern> 18. </servlet-mapping> 19. </web-app> 2. 导入 STRUTS-CONFIG.XML( 与权限验证类似 ) 1. <?xml version="1.0" encoding="utf-8"?> 2. <!DOCTYPE struts PUBLIC 3. "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" 4. " 5. <struts> 6. <constant name="struts.devmode" value="true" /> 7. <package name="default" namespace="" extends="struts-default"> 8. <!-- 用户拦截器定义在该元素下 --> 9. <interceptors> 10. <!-- 定义了一个名为 authority 的拦截器 --> 11. <interceptor name="authenticationinterceptor" class="interceptor.a uthinterceptor" /> 61

62 12. <interceptor-stack name="defualtsecuritystackwithauthentication"> 13. <interceptor-ref name="defaultstack" /> 14. <interceptor-ref name="authenticationinterceptor" /> 15. </interceptor-stack> 16. </interceptors> 17. <!-- 全局 Result --> 18. <global-results> 19. <result name="index">/index.jsp</result> 20. <result name="login">/login.jsp</result> 21. </global-results> 22. <action name="login" class="action.loginaction"> 23. <param name="withoutauthentication">true</param> 24. <result name="success">/index.jsp</result> 25. <result name="input">/login.jsp</result> 26. </action> 27. </package> 28. </struts> 运行结果 : 1. 上传 2. 临时存放 62

63 3. 保存目录 实验八 :SERVLET 多线程 工程目录 : SERVLET 测试类 : 1. import java.util.hashmap; 2. import java.util.map; 3. import javax.servlet.servlet; 4. public class servlet { 5. private static servlet instance=new servlet(); 6. private servlet(){ 7. } 63

64 8. public static servlet getinstance(){ 9. return instance; 10. } 11. public void services(){ 12. System.out.println("do something"); 13. } 14. static class Client extends Thread{ 15. private servlet servlet; 16. public Client(servlet servlet){ 17. this.servlet=servlet; 18. } 19. public void run(){ 20. ((servlet) servlet).services(); 21. System.out.println("do something"); 22. } 23. } 24. public static void main(string[] args){ 25. servlet servlet=new servlet(); 26. servlet.getinstance(); 27. for(int i=0;i<10;i++){ 28. Client client=new Client(servlet); 29. client.start(); 30. } 31. } 32. } 运行结果 : 分别执行 doget() 与 dopost() 方法, 控制台输出 10*2=20 例线程 64

65 实验九 :DEMO 服务 1. AJAX 脚本 工程目录 : LIBRARY 与 CAPABILITY( 导入 cxf.jar): SERVLET 类 1. import java.io.ioexception; 2. import java.io.printwriter; 3. import javax.servlet.servletexception; 4. import javax.servlet.http.httpservlet; 5. import javax.servlet.http.httpservletrequest; 65

66 6. import javax.servlet.http.httpservletresponse; 7. import org.springframework.context.applicationcontext; 8. import org.springframework.context.support.filesystemxmlapplicationcontext; 9. public class controller extends HttpServlet { 10. protected void processrequest(httpservletrequest request, 11. HttpServletResponse response, String method) 12. throws ServletException, IOException {// 自定义的一个方法, 因为 get 与 post 都要用到 参数跟 dopost\doget 差不多, 抛出的异常也差不多 13. //Set content type of the response to text/xml 14. //response.setcontenttype("application/json"); 15. response.setcontenttype("text/html"); 16. //Get the user's input 17. String firstname = request.getparameter("firstname"); 18. String middlename = request.getparameter("middlename"); 19. String birthday = request.getparameter("birthday"); 20. //Create the response text 21. String responsetext = "Hello " + firstname + " " + middlename ". Your birthday is " + birthday + "." " [Method: " + method + "]"; 24. //Write the response back to the browser 25. PrintWriter out = response.getwriter(); 26. out.println(responsetext); 27. //Close the writer 28. out.close(); 29. } 30. protected void doget(httpservletrequest request, HttpServletResponse response) 31. throws ServletException, IOException { 32. //Process the request in method processrequest 33. processrequest(request, response, "GET"); 34. } 35. protected void dopost(httpservletrequest request, HttpServletRespons e response) 36. throws ServletException, IOException { 37. //Process the request in method processrequest 38. processrequest(request, response, "POST"); 39. } 40. } JSP: 1. AJAX.JSP 66

67 1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " 3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2. <html xmlns=" 3. <head> 4. <title>sending Request Data Using GET and POST</title> 5. <script type="text/javascript"> 6. var xmlhttp; 7. function createxmlhttprequest() {// 创建 xmlhttprequest 对象 8. if (window.activexobject) { 9. xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 10. } 11. else if (window.xmlhttprequest) { 12. xmlhttp = new XMLHttpRequest(); 13. } 14. } 15. function createquerystring() {// 创建查询串 16. var firstname = document.getelementbyid("firstname").value; 17. var middlename = document.getelementbyid("middlename").value; 18. var birthday = document.getelementbyid("birthday").value; 19. var querystring = "firstname=" + firstname + "&middlename=" + middlename "&birthday=" + birthday; 21. return querystring; 22. } 23. function dorequestusingget() {//Get 的主 js 24. createxmlhttprequest(); 25. var querystring = "GetAndPostExample?"; 26. querystring = querystring + createquerystring() "&timestamp=" + new Date().getTime(); 28. xmlhttp.onreadystatechange = handlestatechange; 29. xmlhttp.open("get", querystring, true); 30. xmlhttp.send(null); 31. } 32. function dorequestusingpost() {//POST 的主 js 33. createxmlhttprequest(); 34. var url = "GetAndPostExample?timeStamp=" + new Date().getTime(); 35. var querystring = createquerystring(); 36. xmlhttp.open("post", url, true); 37. xmlhttp.onreadystatechange = handlestatechange; 38. xmlhttp.setrequestheader("content-type", "application/x-www-form-urlenco ded"); // 这句话不能去, 否则得不到数据 确保服务器知道请求体中有参数 39. xmlhttp.send(querystring); 40. } 41. function handlestatechange() { 67

68 42. if(xmlhttp.readystate == 4) { 43. if(xmlhttp.status == 200) { 44. parseresults(); 45. } 46. } 47. } 48. function parseresults() { 49. var responsediv = document.getelementbyid("serverresponse"); 50. if(responsediv.haschildnodes()) { 51. responsediv.removechild(responsediv.childnodes[0]); 52. } 53. var responsetext = document.createtextnode(xmlhttp.responsetext); 54. responsediv.appendchild(responsetext); 55. } 56. </script> 57. </head> 58. <body> 59. <h1>enter your first name, middle name, and birthday:</h1> 60. <table> 61. <tbody> 62. <tr> 63. <td>first name:</td> 64. <td><input type="text" id="firstname"/> 65. </tr> 66. <tr> 67. <td>middle name:</td> 68. <td><input type="text" id="middlename"/> 69. </tr> 70. <tr> 71. <td>birthday:</td> 72. <td><input type="text" id="birthday"/> 73. </tr> 74. </tbody> 75. </table> 76. <form action="#"> 77. <input type="button" value="send parameters using GET" onclick="doreques tusingget();"/> 78. <br/><br/> 79. <input type="button" value="send parameters using POST" onclick="doreque stusingpost();"/> 80. </form> <br/> 81. <h2>server Response:</h2> 82. <div id="serverresponse"></div> 83. </body> 68

69 84. </html> 2. INDEX.JSP 1. page language="java" import="java.util.*" pageencoding="utf-8"%> 2. <% 3. String path = request.getcontextpath(); 4. String basepath = request.getscheme()+"://"+request.getservername()+":"+requ est.getserverport()+path+"/"; 5. %> 6. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 7. <html> 8. <head> 9. <base href="<%=basepath%>"> 10. <title>my JSP 'index.jsp' starting page</title> 11. <meta http-equiv="pragma" content="no-cache"> 12. <meta http-equiv="cache-control" content="no-cache"> 13. <meta http-equiv="expires" content="0"> 14. <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> 15. <meta http-equiv="description" content="this is my page"> 16. <! <link rel="stylesheet" type="text/css" href="styles.css"> > 19. </head> 20. <body> 21. <h1>helloworld</h1> 22. </body> 23. </html> 运行结果 (GET/POST): 69

70 2. CXF 兼容性 SERVLET 类 bean 与 servlet 共存, 分别通过 cxf-extension-soap 与 cxf-servlet 实现映射 1. import java.io.ioexception; 2. import java.io.printwriter; 3. import java.util.hashmap; 4. import javax.servlet.servletexception; 5. import javax.servlet.http.httpservlet; 6. import javax.servlet.http.httpservletrequest; 7. import javax.servlet.http.httpservletresponse; 8. import org.springframework.context.applicationcontext; 9. import org.springframework.context.support.filesystemxmlapplicationcontext; 10. import com.sun.xml.xsom.impl.scd.iterators.map; 11. public class controller extends HttpServlet { 12. protected void processrequest(httpservletrequest request, 13. HttpServletResponse response, String method) 14. throws ServletException, IOException {// 自定义的一个方法, 因为 get 与 post 都要用到 参数跟 dopost\doget 差不多, 抛出的异常也差不多 15. ApplicationContext ctx =new FileSystemXmlApplicationContext("C:\ \Documents and Settings\\Administrator\\Workspaces\\MyEclipse 10\\servletdem o\\webroot\\web-inf\\applicationcontext.xml"); 16. client client = (client)ctx.getbean("client"); 17. //Set content type of the response to text/xml 18. response.setcontenttype("application/json"); 19. //response.setcontenttype("text/html"); 20. //Get the user's input 21. String firstname = request.getparameter("firstname"); 22. String middlename = request.getparameter("middlename"); 23. String birthday = request.getparameter("birthday"); 24. client.setfirstname(request.getparameter("firstname")); 25. client.setmiddlename(request.getparameter("middlename")); 26. client.setbirthday(request.getparameter("birthday")); 27. //Create the response text 28. String responsetext = "Hello " + firstname + " " + middlename ". Your birthday is " + birthday + "." " [Method: " + method + "]"; 31. //Write the response back to the browser 32. PrintWriter out = response.getwriter(); 33. out.println(responsetext); 34. //Close the writer 70

71 35. out.close(); 36. } 37. protected void doget(httpservletrequest request, HttpServletResponse response) 38. throws ServletException, IOException { 39. //Process the request in method processrequest 40. processrequest(request, response, "GET"); 41. } 42. protected void dopost(httpservletrequest request, HttpServletRespons e response) 43. throws ServletException, IOException { 44. //Process the request in method processrequest 45. processrequest(request, response, "POST"); 46. } 47. } 客户类 1. public class client { 2. private String firstname; 3. private String middlename; 4. private String birthday; 5. public String getfirstname() { 6. return firstname; 7. } 8. public void setfirstname(string firstname) { 9. this.firstname = firstname; 10. } 11. public String getmiddlename() { 12. return middlename; 13. } 14. public void setmiddlename(string middlename) { 15. this.middlename = middlename; 16. } 17. public String getbirthday() { 18. return birthday; 19. } 20. public void setbirthday(string birthday) { 21. this.birthday = birthday; 22. } 23. } 配置文件 : 1. WEB.XML 71

72 1. <?xml version="1.0" encoding="utf-8"?> 2. <web-app xmlns:xsi=" xmlns=" /java.sun.com/xml/ns/javaee" xmlns:web=" b-app_2_5.xsd" xsi:schemalocation=" java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5" id="webapp_ "> 3. <welcome-file-list> 4. <welcome-file>index.html</welcome-file> 5. <welcome-file>index.htm</welcome-file> 6. </welcome-file-list> 7. <context-param> 8. <param-name>contextconfiglocation</param-name> 9. <param-value>/web-inf/applicationcontext.xml</param-value> 10. </context-param> 11. <listener> 12. <listener-class> 13. org.springframework.web.context.contextloaderlistener 14. </listener-class> 15. </listener> 16. <servlet> 17. <servlet-name>cxfservlet</servlet-name> 18. <servlet-class>controller</servlet-class> 19. </servlet> 20. <servlet-mapping> 21. <servlet-name>cxfservlet</servlet-name> 22. <url-pattern>/test</url-pattern> 23. </servlet-mapping> 24. <servlet> 25. <servlet-name>test</servlet-name> 26. <servlet-class>controller</servlet-class> 27. </servlet> 28. <servlet-mapping> 29. <servlet-name>test</servlet-name> 30. <url-pattern>/</url-pattern> 31. </servlet-mapping> 32. </web-app> 2. APPLICATIONCONTEXT.XML 调用 ajax 并删除 cxf.xml 头文件 1. <?xml version="1.0" encoding="utf-8"?> 72

73 2. <beans xmlns=" 3. xmlns:xsi=" 4. xmlns:http-conf=" " 5. xmlns:jaxws=" 6. xsi:schemalocation=" <!-- 引入 cxf 基础配置 --> 13. <import resource="classpath:meta-inf/cxf/cxf-extension-soap.xml"/> 14. <import resource="classpath:meta-inf/cxf/cxf-servlet.xml"/> 15. <bean id="client" class="client"> 16. </bean> 17. </beans> 3. CXF.XML 1. <?xml version="1.0" encoding="utf-8"?> 2. <!-- 3. Licensed to the Apache Software Foundation (ASF) under one 4. or more contributor license agreements. See the NOTICE file 5. distributed with this work for additional information 6. regarding copyright ownership. The ASF licenses this file 7. to you under the Apache License, Version 2.0 (the 8. "License"); you may not use this file except in compliance 9. with the License. You may obtain a copy of the License at Unless required by applicable law or agreed to in writing, 12. software distributed under the License is distributed on an 13. "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 14. KIND, either express or implied. See the License for the 15. specific language governing permissions and limitations 16. under the License > 18. <beans xmlns=" xmlns:xsi=" / xmlns:http=" ports/http/configuration" xmlns:jaxws=" xsi:sche malocation=" s/jaxws.xsd pache.org/schemas/configuration/http-conf.xsd 73

74 /schema/beans < name="{ onport.http-conduit"> 20. < ConnectionTimeout=" " ReceiveTimeout=" "/> 21. </ 22. </beans> 项目部署 : 1. 启动 2. 运行 3. 头文件 74

75 若 jar 包冲突, 重新导入 spring(3.0)core.library; 如果出现端口跳转, 则干掉 javaw 进程 实验十 : 数据连接池 工程目录与 JAR 包 : ORACLE 界面 : 1. 获得连接 1. import java.io.ioexception; 2. import java.io.printwriter; 3. import java.sql.connection; 4. import java.util.linkedlist; 5. import javax.servlet.servletexception; 75

76 6. import javax.servlet.http.httpservlet; 7. import javax.servlet.http.httpservletrequest; 8. import javax.servlet.http.httpservletresponse; 9. public class getconnection extends HttpServlet { 10. private static final long serialversionuid = L; 11. private static final Connection conn = null; 12. public void doget(httpservletrequest request, HttpServletResponse respon se)throws ServletException, IOException { 13. dopost(request,response); 14. } 15. public void dopost(httpservletrequest request, HttpServletResponse respo nse)throws ServletException, IOException { 16. PrintWriter out = response.getwriter(); 17. try{ 18. Connection conn = new JDBC_POOL().getConnection(); 19. out.print(conn+" : " + conn.hashcode()); 20. }catch(exception e){ 21. System.out.println(e.getMessage()); 22. e.printstacktrace(); 23. }finally{ 24. } 25. } 26. public static void main(string[] args){ 27. HttpServlet getconnection=new getconnection(); 28. Object JDBC_POOL=new JDBC_POOL(); 29. Connection myconnection=new myconnection(conn); 30. System.out.println("connection created!"); 31. } 32. } 2. 连接池 1. import java.sql.connection; 2. import java.sql.drivermanager; 3. import java.util.arraylist; 4. import java.util.linkedlist; 5. import java.util.list; 6. public class JDBC_POOL { 7. private static final String URL = "jdbc:oracle:thin:@ :1521:ora9 "; 8. private static final String DRIVER = "oracle.jdbc.driver.oracledriver"; 9. private static final String USER_NAME = "pqrs008"; 10. private static final String PASSWORD = " "; 11. /** 76

77 12. * 用来装连接池的容器 13. */ 14. public static LinkedList<myConnection> list = new LinkedList<myConnectio n>(); 15. /** 16. * 设置容器的大小 17. */ 18. public static int size = 100; 19. static{ 20. try{ 21. for(int i=0;i<3;i++){ 22. Connection conn= DriverManager.getConnection(URL,USER_NAME, PASSWORD); 23. System.out.println(" 创建了数据库连 接 : " + conn + " : " + conn.hashcode()); 24. myconnection mc = new myconnection(conn); 25. list.add(mc); 26. } 27. }catch(exception e){ 28. System.out.println(e.getMessage()); 29. e.printstacktrace(); 30. } 31. } 32. public myconnection getconnection()throws Exception{ 33. if(list.size()==0 list.size()<0){ 34. // 连接池已经满了 35. throw new Exception(" 连接池已经没有连接对象 "); 36. }else{ 37. System.out.println(" 程序获取连接对 象 : " + list.get(0).getconnection()); 38. return list.removefirst(); 39. } 40. } 41. } 3. 事务处理 1. import java.sql.array; 2. import java.sql.blob; 3. import java.sql.callablestatement; 4. import java.sql.clob; 5. import java.sql.connection; 6. import java.sql.databasemetadata; 7. import java.sql.nclob; 8. import java.sql.preparedstatement; 77

78 9. import java.sql.sqlclientinfoexception; 10. import java.sql.sqlexception; 11. import java.sql.sqlwarning; 12. import java.sql.sqlxml; 13. import java.sql.savepoint; 14. import java.sql.statement; 15. import java.sql.struct; 16. import java.util.map; 17. import java.util.properties; 18. import java.util.concurrent.executor; 19. public class myconnection implements Connection{ 20. private Connection conn; 21. public myconnection(connection conn){ 22. this.conn = conn; 23. } 24. public <T> T unwrap(class<t> iface) throws SQLException { 25. // TODO Auto-generated method stub 26. return conn.unwrap(iface); 27. } 28. public boolean iswrapperfor(class<?> iface) throws SQLException { 29. // TODO Auto-generated method stub 30. return conn.iswrapperfor(iface); 31. } 32. public Statement createstatement() throws SQLException { 33. // TODO Auto-generated method stub 34. return conn.createstatement(); 35. } 36. public PreparedStatement preparestatement(string sql) throws SQLExceptio n { 37. // TODO Auto-generated method stub 38. return conn.preparestatement(sql); 39. } 40. public CallableStatement preparecall(string sql) throws SQLException { 41. // TODO Auto-generated method stub 42. return conn.preparecall(sql); 43. } 44. public String nativesql(string sql) throws SQLException { 45. // TODO Auto-generated method stub 46. return conn.nativesql(sql); 47. } 48. public void setautocommit(boolean autocommit) throws SQLException { 49. // TODO Auto-generated method stub 50. conn.setautocommit(autocommit); 51. } 78

79 52. public boolean getautocommit() throws SQLException { 53. // TODO Auto-generated method stub 54. return conn.getautocommit(); 55. } 56. public void commit() throws SQLException { 57. // TODO Auto-generated method stub 58. conn.commit(); 59. } 60. public void rollback() throws SQLException { 61. // TODO Auto-generated method stub 62. conn.rollback(); 63. } 64. public void close() throws SQLException { 65. // TODO Auto-generated method stub 66. // 在这里将连接对象还给连接池 67. System.out.println(" 将连接对象还给连接池 : " + conn); 68. JDBC_POOL.list.add(new myconnection(conn)); 69. } 70. public boolean isclosed() throws SQLException { 71. // TODO Auto-generated method stub 72. return conn.isclosed(); 73. } 74. public DatabaseMetaData getmetadata() throws SQLException { 75. // TODO Auto-generated method stub 76. return conn.getmetadata(); 77. } 78. public void setreadonly(boolean readonly) throws SQLException { 79. // TODO Auto-generated method stub 80. conn.setreadonly(readonly); 81. } 82. public boolean isreadonly() throws SQLException { 83. // TODO Auto-generated method stub 84. return conn.isreadonly(); 85. } 86. public void setcatalog(string catalog) throws SQLException { 87. // TODO Auto-generated method stub 88. conn.setcatalog(catalog); 89. } 90. public String getcatalog() throws SQLException { 91. // TODO Auto-generated method stub 92. return conn.getcatalog(); 93. } 94. public void settransactionisolation(int level) throws SQLException { 95. // TODO Auto-generated method stub 79

80 96. conn.settransactionisolation(level); 97. } 98. public int gettransactionisolation() throws SQLException { 99. // TODO Auto-generated method stub 100. return conn.gettransactionisolation(); 101. } 102. public SQLWarning getwarnings() throws SQLException { 103. // TODO Auto-generated method stub 104. return conn.getwarnings(); 105. } 106. public void clearwarnings() throws SQLException { 107. // TODO Auto-generated method stub 108. conn.clearwarnings(); 109. } 110. public Statement createstatement(int resultsettype, int resultsetconcur rency) 111. throws SQLException { 112. // TODO Auto-generated method stub 113. return conn.createstatement(resultsettype, resultsetconcurrency); 114. } 115. public PreparedStatement preparestatement(string sql, int resultsettype, 116. int resultsetconcurrency) throws SQLException { 117. // TODO Auto-generated method stub 118. return conn.preparestatement(sql, resultsettype,resultsetconcurrenc y); 119. } 120. public CallableStatement preparecall(string sql, int resultsettype, 121. int resultsetconcurrency) throws SQLException { 122. // TODO Auto-generated method stub 123. return conn.preparecall(sql, resultsettype, resultsetconcurrency, r esultsetconcurrency); 124. } 125. public Map<String, Class<?>> gettypemap() throws SQLException { 126. // TODO Auto-generated method stub 127. return conn.gettypemap(); 128. } 129. public void settypemap(map<string, Class<?>> map) throws SQLException { 130. // TODO Auto-generated method stub 131. conn.settypemap(map); 132. } 133. public void setholdability(int holdability) throws SQLException { 134. // TODO Auto-generated method stub 80

81 135. conn.setholdability(holdability); 136. } 137. public int getholdability() throws SQLException { 138. // TODO Auto-generated method stub 139. return conn.getholdability(); 140. } 141. public Savepoint setsavepoint() throws SQLException { 142. // TODO Auto-generated method stub 143. return conn.setsavepoint(); 144. } 145. public Savepoint setsavepoint(string name) throws SQLException { 146. // TODO Auto-generated method stub 147. return conn.setsavepoint(name); 148. } 149. public void rollback(savepoint savepoint) throws SQLException { 150. // TODO Auto-generated method stub 151. conn.rollback(savepoint); 152. } 153. public void releasesavepoint(savepoint savepoint) throws SQLException { 154. // TODO Auto-generated method stub 155. conn.releasesavepoint(savepoint); 156. } 157. public Statement createstatement(int resultsettype, 158. int resultsetconcurrency, int resultsetholdability) 159. throws SQLException { 160. // TODO Auto-generated method stub 161. return conn.createstatement(resultsettype, resultsetconcurrency, re sultsetholdability); 162. } 163. public PreparedStatement preparestatement(string sql, int resultsettyp e, 164. int resultsetconcurrency, int resultsetholdability) 165. throws SQLException { 166. // TODO Auto-generated method stub 167. return conn.preparestatement(sql, resultsettype, resultsetconcurren cy,resultsetholdability); 168. } 169. public CallableStatement preparecall(string sql, int resultsettype, 170. int resultsetconcurrency, int resultsetholdability) 171. throws SQLException { 172. // TODO Auto-generated method stub 173. return conn.preparecall( sql, resultsettype, 174. resultsetconcurrency, resultsetholdability); 81

82 175. } 176. public PreparedStatement preparestatement(string sql, int autogenerated Keys) 177. throws SQLException { 178. // TODO Auto-generated method stub 179. return conn.preparestatement( sql, autogeneratedkeys); 180. } 181. public PreparedStatement preparestatement(string sql, int[] columnindex es) 182. throws SQLException { 183. // TODO Auto-generated method stub 184. return conn.preparestatement( sql, columnindexes); 185. } 186. public PreparedStatement preparestatement(string sql, String[] columnna mes) 187. throws SQLException { 188. // TODO Auto-generated method stub 189. return conn.preparestatement( sql, columnnames); 190. } 191. public Clob createclob() throws SQLException { 192. // TODO Auto-generated method stub 193. return conn.createclob(); 194. } 195. public Blob createblob() throws SQLException { 196. // TODO Auto-generated method stub 197. return conn.createblob(); 198. } 199. public NClob createnclob() throws SQLException { 200. // TODO Auto-generated method stub 201. return conn.createnclob(); 202. } 203. public SQLXML createsqlxml() throws SQLException { 204. // TODO Auto-generated method stub 205. return conn.createsqlxml(); 206. } 207. public boolean isvalid(int timeout) throws SQLException { 208. // TODO Auto-generated method stub 209. return conn.isvalid(timeout); 210. } 211. public void setclientinfo(string name, String value) 212. throws SQLClientInfoException { 213. // TODO Auto-generated method stub 214. conn.setclientinfo(name, value); 215. } 82

83 216. public void setclientinfo(properties properties) 217. throws SQLClientInfoException { 218. // TODO Auto-generated method stub 219. conn.setclientinfo(properties); 220. } 221. public String getclientinfo(string name) throws SQLException { 222. // TODO Auto-generated method stub 223. return conn.getclientinfo(name); 224. } 225. public Properties getclientinfo() throws SQLException { 226. // TODO Auto-generated method stub 227. return conn.getclientinfo(); 228. } 229. public Array createarrayof(string typename, Object[] elements) 230. throws SQLException { 231. // TODO Auto-generated method stub 232. return conn.createarrayof(typename, elements); 233. } 234. public Struct createstruct(string typename, Object[] attributes) 235. throws SQLException { 236. // TODO Auto-generated method stub 237. return conn.createstruct(typename, attributes); 238. } 239. public Connection getconnection(){ 240. return this.conn; 241. } 242. public void setschema(string schema) throws SQLException { 243. // TODO Auto-generated method stub 244. } 245. public String getschema() throws SQLException { 246. // TODO Auto-generated method stub 247. return null; 248. } 249. public void abort(executor executor) throws SQLException { 250. // TODO Auto-generated method stub 251. } 252. public void setnetworktimeout(executor executor, int milliseconds) 253. throws SQLException { 254. // TODO Auto-generated method stub 255. } 256. public int getnetworktimeout() throws SQLException { 257. // TODO Auto-generated method stub 258. return 0; 259. } 83

84 260. } 运行结果 : 在测试类 getconnection 中添加 Object JDBC_POOL=new JDBC_POOL(), 建立三次连接 : 启动 tomcat-servlet, 关闭连接池 : 1. WEB.XML 1. <?xml version="1.0" encoding="utf-8"?> 2. <web-app version="2.5" 3. xmlns=" 4. xmlns:xsi=" 5. xsi:schemalocation=" <display-name></display-name> 8. <welcome-file-list> 9. <welcome-file>index.jsp</welcome-file> 10. </welcome-file-list> 11. <servlet> 12. <servlet-name>database</servlet-name> 13. <servlet-class>getconnection</servlet-class> 14. </servlet> 15. <servlet-mapping> 16. <servlet-name>database</servlet-name> 17. <url-pattern>/test</url-pattern> 18. </servlet-mapping> 84

85 19. </web-app> 2. 启动 3. 连接已满 补充说明 : 本框架的公用 jar 包还包括 : spring-framework release(lib),spring-web,httpclient,oracle-jdbc,commons-io, commons-pool,commons-beanutils,log4j 等 85

86 附录 1. 修改 tomcat 最大连接数 (server.xml) 2. 去除断点 打开 SHOW_VIEW 对话框 选择 BREAKPOINTS 点击 double 叉去掉所有断点 86

87 参考文献 [1] [2] [3] [4] [5] address : pqrs008@126.com 版权说明 : 本文中涉及代码多可从网上直接转载, 或通过参考本专业的编程书籍得到, 并没有任何不合 情理的难度 87

D getinitparameternames() 9 下 列 选 项 中, 属 于 Servlet API 中 提 供 的 request 对 象 的 包 装 类 的 是 ( ) A HttpServletRequestWrapper B HttpServletRequest C HttpServ

D getinitparameternames() 9 下 列 选 项 中, 属 于 Servlet API 中 提 供 的 request 对 象 的 包 装 类 的 是 ( ) A HttpServletRequestWrapper B HttpServletRequest C HttpServ 第 四 章 Filter( 过 滤 器 ) 样 题 A 卷 一 选 择 题 ( 每 小 题 2 分, 共 20 分 ) 1 下 面 选 项 中, 用 于 实 现 初 始 化 过 滤 器 的 方 法 是 ( ) A init(filterconfig filterconfig) B dofilter(servletrequest req,servletresponse resp,filterchain

More information

(TestFailure) JUnit Framework AssertionFailedError JUnit Composite TestSuite Test TestSuite run() run() JUnit

(TestFailure) JUnit Framework AssertionFailedError JUnit Composite TestSuite Test TestSuite run() run() JUnit Tomcat Web JUnit Cactus JUnit Java Cactus JUnit 26.1 JUnit Java JUnit JUnit Java JSP Servlet JUnit Java Erich Gamma Kent Beck xunit JUnit boolean JUnit Java JUnit Java JUnit Java 26.1.1 JUnit JUnit How

More information

1.JasperReport ireport JasperReport ireport JDK JDK JDK JDK ant ant...6

1.JasperReport ireport JasperReport ireport JDK JDK JDK JDK ant ant...6 www.brainysoft.net 1.JasperReport ireport...4 1.1 JasperReport...4 1.2 ireport...4 2....4 2.1 JDK...4 2.1.1 JDK...4 2.1.2 JDK...5 2.1.3 JDK...5 2.2 ant...6 2.2.1 ant...6 2.2.2 ant...6 2.3 JasperReport...7

More information

Microsoft Word - Hibernate与Struts2和Spring组合指导.doc

Microsoft Word - Hibernate与Struts2和Spring组合指导.doc 1.1 组合 Hibernate 与 Spring 1. 在 Eclipse 中, 新建一个 Web project 2. 给该项目增加 Hibernate 开发能力, 增加 Hibernate 相关类库到当前项目的 Build Path, 同时也提供了 hibernate.cfg.xml 这个配置文件 3. 给该项目增加 Spring 开发能力, 增加 spring 相关类库到当前项目的 Build

More information

本章学习目标 小风 Java 实战系列教程 SpringMVC 简介 SpringMVC 的入门案例 SpringMVC 流程分析 配置注解映射器和适配器 注解的使用 使用不同方式的跳转页面 1. SpringMVC 简介 Spring web mvc

本章学习目标 小风 Java 实战系列教程 SpringMVC 简介 SpringMVC 的入门案例 SpringMVC 流程分析 配置注解映射器和适配器 注解的使用 使用不同方式的跳转页面 1. SpringMVC 简介 Spring web mvc 本章学习目标 SpringMVC 简介 SpringMVC 的入门案例 SpringMVC 流程分析 配置注解映射器和适配器 配置视图解析器 @RequestMapping 注解的使用 使用不同方式的跳转页面 1. SpringMVC 简介 Spring web mvc 和 Struts2 都属于表现层的框架, 它是 Spring 框架的一部分, 我们可 以从 Spring 的整体结构中看得出来 :

More information

Servlet

Servlet Servlet Allen Long Email: allen@huihoo.com http://www.huihoo.com 2004-04 Huihoo - Enterprise Open Source http://www.huihoo.com 1 Huihoo - Enterprise Open Source http://www.huihoo.com 2 GET POST Huihoo

More information

EJB-Programming-4-cn.doc

EJB-Programming-4-cn.doc EJB (4) : (Entity Bean Value Object ) JBuilder EJB 2.x CMP EJB Relationships JBuilder EJB Test Client EJB EJB Seminar CMP Entity Beans Session Bean J2EE Session Façade Design Pattern Session Bean Session

More information

基于CDIO一体化理念的课程教学大纲设计

基于CDIO一体化理念的课程教学大纲设计 Java 语 言 程 序 设 计 课 程 教 学 大 纲 Java 语 言 程 序 设 计 课 程 教 学 大 纲 一 课 程 基 本 信 息 1. 课 程 代 码 :52001CC022 2. 课 程 名 称 :Java 语 言 程 序 设 计 3. 课 程 英 文 名 称 :Java Programming 4. 课 程 类 别 : 理 论 课 ( 含 实 验 上 机 或 实 践 ) 5. 授

More information

没 有 多 余 的 Contruol 或 Action 了 原 来 Domain 层 被 服 务 层 Service layer 遮 挡, 在 右 边 图 中, 则 Domain 层 直 接 暴 露 给 前 台 了, 没 有 被 遮 挡, 裸 露 了 这 样 一 步 到 位 实 现 领 域 模 型

没 有 多 余 的 Contruol 或 Action 了 原 来 Domain 层 被 服 务 层 Service layer 遮 挡, 在 右 边 图 中, 则 Domain 层 直 接 暴 露 给 前 台 了, 没 有 被 遮 挡, 裸 露 了 这 样 一 步 到 位 实 现 领 域 模 型 文 章 编 号 :1007-757X(2012)1-0036-04 领 域 驱 动 模 型 的 WEB 软 件 系 统 设 计 研 究 摘 要 : J2EE 3 JDK1.7 Tomcat WEB 关 键 词 : 中 图 分 类 号 :TP311 文 献 标 志 码 :A 0 引 言 Web 软 件 系 统 的 分 层 结 构 典 型 的 J2EE 软 件 系 统 开 发 方 法 分 为 三 层 结

More information

Microsoft Word - 01.DOC

Microsoft Word - 01.DOC 第 1 章 JavaScript 简 介 JavaScript 是 NetScape 公 司 为 Navigator 浏 览 器 开 发 的, 是 写 在 HTML 文 件 中 的 一 种 脚 本 语 言, 能 实 现 网 页 内 容 的 交 互 显 示 当 用 户 在 客 户 端 显 示 该 网 页 时, 浏 览 器 就 会 执 行 JavaScript 程 序, 用 户 通 过 交 互 式 的

More information

resp.getwriter().print(j + "*" + i + "=" + j * i+" "); resp.getwriter().print("<br/>"); protected void dopost(httpservletrequest req, HttpServletRespo

resp.getwriter().print(j + * + i + = + j * i+ ); resp.getwriter().print(<br/>); protected void dopost(httpservletrequest req, HttpServletRespo 第三章补充案例 案例 3-1 HttpServlet 一 案例描述 1 考核知识点名称 :HttpServlet 编号 : 2 练习目标 掌握 HttpServlet 的 doget() 方法和 dopost() 方法 3 需求分析由于大多数 Web 应用都是通过 HTTP 协议和客户端进行交互, 因此, 在 Servlet 接口中, 提供了 一个抽象类 javax.servlet.http.httpservlet,

More information

untitled

untitled JavaEE+Android - 6 1.5-2 JavaEE web MIS OA ERP BOSS Android Android Google Map office HTML CSS,java Android + SQL Sever JavaWeb JavaScript/AJAX jquery Java Oracle SSH SSH EJB+JBOSS Android + 1. 2. IDE

More information

RUN_PC連載_10_.doc

RUN_PC連載_10_.doc PowerBuilder 8 (10) Jaguar CTS ASP Jaguar CTS PowerDynamo Jaguar CTS Microsoft ASP (Active Server Pages) ASP Jaguar CTS ASP Jaguar CTS ASP Jaguar CTS ASP Jaguar CTS ASP Jaguar CTS ASP Jaguar Server ASP

More information

在所有的项目开发中, 一定是多人协作的团队开发, 但是使用框架就会出现一个问题, 我们所 有的 Action 以及相关的路径都要求在我们的 struts.xml 文件中配置, 如果所有的人去修改一个 文件, 那么就会变得混乱, 而且有可能出现冲突, 那么在 struts.xml 文件中为了解决这个问

在所有的项目开发中, 一定是多人协作的团队开发, 但是使用框架就会出现一个问题, 我们所 有的 Action 以及相关的路径都要求在我们的 struts.xml 文件中配置, 如果所有的人去修改一个 文件, 那么就会变得混乱, 而且有可能出现冲突, 那么在 struts.xml 文件中为了解决这个问 内置对象的取得和多人开发 一 内置对象的取得 在使用的 servlet 的时候可以通过 HttpServletResquest 获取到一些内置对象, 但是在 struts2 中为了方便取得内置对象, 专门提供了一个 ServletActionContext 这个类取得取得内置对象, 观察如下方法 public static javax.servlet.jsp.pagecontext() 取得 pagecontext

More information

5-1 nav css 5-2

5-1 nav css 5-2 5 HTML CSS HTML CSS Ê Ê Ê Ê 5-1 nav css 5-2 5-1 5 5-1-1 5-01 css images 01 index.html 02 5-3 style.css css 03 CH5/5-01/images 04 images index.html style.css 05

More information

J2EE MVC with Webwork2 Xwork, to J2EE MVC with Webwork2 Xwork

J2EE MVC with Webwork2 Xwork,  to J2EE MVC with Webwork2 Xwork MVC with Webwork2 Xwork Action...1 ActionContext...3 ActionProxyFactory Factory...4 ActionProxyFactory Proxy AOP...7 XworkInterceptor...8 Interceptor...9 LoginAction...10 LoginInterceptor...12 Action Result

More information

Microsoft Word - json入门.doc

Microsoft Word - json入门.doc Json 入门 送给亲爱的女朋友, 祝她天天快乐 作者 :hlz QQ:81452743 MSN/Email:hulizhong2008@163.com json 入门 (1) json 是 JavaScript Object Notation 的简称 ; 在 web 系统开发中与 AJAX 相结合用的比较多 在 ajax 中数据传输有 2 中方式 : 文本类型, 常用 responsetext 属性类获取

More information

EJB-Programming-3.PDF

EJB-Programming-3.PDF :, JBuilder EJB 2.x CMP EJB Relationships JBuilder EJB Test Client EJB EJB Seminar CMP Entity Beans Value Object Design Pattern J2EE Design Patterns Value Object Value Object Factory J2EE EJB Test Client

More information

Microsoft PowerPoint - 02-Servlet-Basics-Chinese.ppt

Microsoft PowerPoint - 02-Servlet-Basics-Chinese.ppt 2004 Marty Hall servlet 基础 JSP, Servlet, & Struts Training Courses: http://courses.coreservlets.com Available in US, China, Taiwan, HK, and Worldwide 2 JSP and Servlet Books from Sun Press: http://www.coreservlets.com

More information

Microsoft Word - 第4章 Filter(过滤器)—样章.doc

Microsoft Word - 第4章 Filter(过滤器)—样章.doc 第 4 章 Filter( 过滤器 ) 学习目标 u 了解什么是 Filter u 能够用 Filter 实现用户自动登录的案例 u 了解什么是装饰设计模式, 学会用 Filter 实现统一全站编码和页面静态化技术在 Web 开发过程中, 为了实现某些特殊的功能, 经常需要对请求和响应消息进行处理 例如记录用户访问信息, 统计页面访问次数, 验证用户身份等 Filter 作为 Servlet2.3

More information

untitled

untitled PowerBuilder Tips 利 PB11 Web Service 年度 2 PB Tips PB9 EAServer 5 web service PB9 EAServer 5 了 便 web service 來說 PB9 web service 力 9 PB11 release PB11 web service 力更 令.NET web service PB NVO 論 不 PB 來說 說

More information

1 1 大概思路 创建 WebAPI 创建 CrossMainController 并编写 Nuget 安装 microsoft.aspnet.webapi.cors 跨域设置路由 编写 Jquery EasyUI 界面 运行效果 2 创建 WebAPI 创建 WebAPI, 新建 -> 项目 ->

1 1 大概思路 创建 WebAPI 创建 CrossMainController 并编写 Nuget 安装 microsoft.aspnet.webapi.cors 跨域设置路由 编写 Jquery EasyUI 界面 运行效果 2 创建 WebAPI 创建 WebAPI, 新建 -> 项目 -> 目录 1 大概思路... 1 2 创建 WebAPI... 1 3 创建 CrossMainController 并编写... 1 4 Nuget 安装 microsoft.aspnet.webapi.cors... 4 5 跨域设置路由... 4 6 编写 Jquery EasyUI 界面... 5 7 运行效果... 7 8 总结... 7 1 1 大概思路 创建 WebAPI 创建 CrossMainController

More information

在Spring中使用Kafka:Producer篇

在Spring中使用Kafka:Producer篇 在某些情况下, 我们可能会在 Spring 中将一些 WEB 上的信息发送到 Kafka 中, 这时候我们就需要在 Spring 中编写 Producer 相关的代码了 ; 不过高兴的是,Spring 本身提供了操作 Kafka 的相关类库, 我们可以直接通过 xml 文件配置然后直接在后端的代码中使用 Kafka, 非常地方便 本文将介绍如果在 Spring 中将消息发送到 Kafka 在这之前,

More information

jsp

jsp JSP Allen Long Email: allen@huihoo.com http://www.huihoo.com 2004-04 Huihoo - Enterprise Open Source http://www.huihoo.com 1 JSP JSP JSP JSP MVC Huihoo - Enterprise Open Source http://www.huihoo.com 2

More information

第03章 控制反转(Spring IoC)

第03章  控制反转(Spring IoC) 3 Spring IoC GoF Design Patterns: Elements of Reusable Object-Oriented Software Programming to an Interface not an Implementation Java Java Java GoF Service Locator IoC IoC Spring IoC 3.1 IoC IoC IoC Dependency

More information

Chapter 9: Objects and Classes

Chapter 9: Objects and Classes Java application Java main applet Web applet Runnable Thread CPU Thread 1 Thread 2 Thread 3 CUP Thread 1 Thread 2 Thread 3 ,,. (new) Thread (runnable) start( ) CPU (running) run ( ) blocked CPU sleep(

More information

untitled

untitled 1 Outline 數 料 數 數 列 亂數 練 數 數 數 來 數 數 來 數 料 利 料 來 數 A-Z a-z _ () 不 數 0-9 數 不 數 SCHOOL School school 數 讀 school_name schoolname 易 不 C# my name 7_eleven B&Q new C# (1) public protected private params override

More information

Microsoft PowerPoint - 05-Status-Codes-Chinese.ppt

Microsoft PowerPoint - 05-Status-Codes-Chinese.ppt 2004 Marty Hall 服务器响应的生成 : HTTP 状态代码 JSP, Servlet, & Struts Training Courses: http://courses.coreservlets.com Available in US, China, Taiwan, HK, and Worldwide 2 JSP and Servlet Books from Sun Press: http://www.coreservlets.com

More information

雲端 Cloud Computing 技術指南 運算 應用 平台與架構 10/04/15 11:55:46 INFO 10/04/15 11:55:53 INFO 10/04/15 11:55:56 INFO 10/04/15 11:56:05 INFO 10/04/15 11:56:07 INFO

雲端 Cloud Computing 技術指南 運算 應用 平台與架構 10/04/15 11:55:46 INFO 10/04/15 11:55:53 INFO 10/04/15 11:55:56 INFO 10/04/15 11:56:05 INFO 10/04/15 11:56:07 INFO CHAPTER 使用 Hadoop 打造自己的雲 8 8.3 測試 Hadoop 雲端系統 4 Nodes Hadoop Map Reduce Hadoop WordCount 4 Nodes Hadoop Map/Reduce $HADOOP_HOME /home/ hadoop/hadoop-0.20.2 wordcount echo $ mkdir wordcount $ cd wordcount

More information

(CIP) Web /,. :,2005. 1 ISBN 7 81058 782 X.W............T P393.4 CIP (2004) 118797 Web ( 99 200436) ( http:/ / www.shangdapress.com 66135110) : * 787

(CIP) Web /,. :,2005. 1 ISBN 7 81058 782 X.W............T P393.4 CIP (2004) 118797 Web ( 99 200436) ( http:/ / www.shangdapress.com 66135110) : * 787 Web (CIP) Web /,. :,2005. 1 ISBN 7 81058 782 X.W............T P393.4 CIP (2004) 118797 Web ( 99 200436) ( http:/ / www.shangdapress.com 66135110) : * 787 1092 1/ 16 30.75 748 2005 1 1 2005 1 1 : 1 3 100

More information

1: public class MyOutputStream implements AutoCloseable { 3: public void close() throws IOException { 4: throw new IOException(); 5: } 6:

1: public class MyOutputStream implements AutoCloseable { 3: public void close() throws IOException { 4: throw new IOException(); 5: } 6: Chapter 15. Suppressed Exception CH14 Finally Block Java SE 7 try-with-resources JVM cleanup try-with-resources JVM cleanup cleanup Java SE 7 Throwable getsuppressed Throwable[] getsuppressed() Suppressed

More information

Microsoft Word - PHP7Ch01.docx

Microsoft Word - PHP7Ch01.docx PHP 01 1-6 PHP PHP HTML HTML PHP CSSJavaScript PHP PHP 1-6-1 PHP HTML PHP HTML 1. Notepad++ \ch01\hello.php 01: 02: 03: 04: 05: PHP 06:

More information

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 odps-sdk 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基 开放数据处理服务 ODPS SDK SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基础功能的主体接口, 搜索关键词 "odpssdk-core" 一些

More information

拦截器(Interceptor)的学习

拦截器(Interceptor)的学习 二 拦截器 (Interceptor) 的学习 拦截器可以监听程序的一个或所有方法 拦截器对方法调用流提供了细粒度控制 可以在无状态会话 bean 有状态会话 bean 和消息驱动 bean 上使用它们 拦截器可以是同一 bean 类中的方法或是一个外部类 下面介绍如何在 Session Bean 类中使用外部拦截器类 @Interceptors 注释指定一个或多个在外部类中定义的拦截器 下面拦截器

More information

RUN_PC連載_8_.doc

RUN_PC連載_8_.doc PowerBuilder 8 (8) Web DataWindow ( ) DataWindow Web DataWindow Web DataWindow Web DataWindow PowerDynamo Web DataWindow / Web DataWindow Web DataWindow Wizard Web DataWindow Web DataWindow DataWindow

More information

设计模式 Design Patterns

设计模式 Design Patterns 丁勇 Email:18442056@QQ.com 学习目标 掌握 Model I 体系结构 掌握 Model II 体系结构 掌握 MVC 应用程序 Model I 体系结构 6 1 Model I 体系结构结合使用 JSP 页面和 Bean 来开发 Web 应用程序 应用服务器 请求 JSP 页面 响应 Bean 数据库服务器 Model I 体系结构 6 2 Model I 体系结构用于开发简单的应用程序

More information

untitled

untitled ArcGIS Server Web services Web services Application Web services Web Catalog ArcGIS Server Web services 6-2 Web services? Internet (SOAP) :, : Credit card authentication, shopping carts GIS:, locator services,

More information

詞 彙 表 編 號 詞 彙 描 述 1 預 約 人 資 料 中 文 姓 名 英 文 姓 名 身 份 證 字 號 預 約 人 電 話 性 別 2 付 款 資 料 信 用 卡 別 信 用 卡 號 信 用 卡 有 效 日 期 3 住 房 條 件 入 住 日 期 退 房 日 期 人 數 房 間 數 量 入

詞 彙 表 編 號 詞 彙 描 述 1 預 約 人 資 料 中 文 姓 名 英 文 姓 名 身 份 證 字 號 預 約 人 電 話 性 別 2 付 款 資 料 信 用 卡 別 信 用 卡 號 信 用 卡 有 效 日 期 3 住 房 條 件 入 住 日 期 退 房 日 期 人 數 房 間 數 量 入 100 年 特 種 考 試 地 方 政 府 公 務 人 員 考 試 試 題 等 別 : 三 等 考 試 類 科 : 資 訊 處 理 科 目 : 系 統 分 析 與 設 計 一 請 參 考 下 列 旅 館 管 理 系 統 的 使 用 案 例 圖 (Use Case Diagram) 撰 寫 預 約 房 間 的 使 用 案 例 規 格 書 (Use Case Specification), 繪 出 入

More information

chp6.ppt

chp6.ppt Java 软 件 设 计 基 础 6. 异 常 处 理 编 程 时 会 遇 到 如 下 三 种 错 误 : 语 法 错 误 (syntax error) 没 有 遵 循 语 言 的 规 则, 出 现 语 法 格 式 上 的 错 误, 可 被 编 译 器 发 现 并 易 于 纠 正 ; 逻 辑 错 误 (logic error) 即 我 们 常 说 的 bug, 意 指 编 写 的 代 码 在 执 行

More information

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

KillTest 质量更高 服务更好 学习资料   半年免费更新服务 KillTest 质量更高 服务更好 学习资料 http://www.killtest.cn 半年免费更新服务 Exam : 310-055Big5 Title : Sun Certified Programmer for the Java 2 Platform.SE 5.0 Version : Demo 1 / 22 1. 11. public static void parse(string str)

More information

1 4 1.1 4 1.2..4 2..4 2.1..4 3.4 3.1 Java.5 3.1.1..5 3.1.2 5 3.1.3 6 4.6 4.1 6 4.2.6 5 7 5.1..8 5.1.1 8 5.1.2..8 5.1.3..8 5.1.4..9 5.2..9 6.10 6.1.10

1 4 1.1 4 1.2..4 2..4 2.1..4 3.4 3.1 Java.5 3.1.1..5 3.1.2 5 3.1.3 6 4.6 4.1 6 4.2.6 5 7 5.1..8 5.1.1 8 5.1.2..8 5.1.3..8 5.1.4..9 5.2..9 6.10 6.1.10 Java V1.0.1 2007 4 10 1 4 1.1 4 1.2..4 2..4 2.1..4 3.4 3.1 Java.5 3.1.1..5 3.1.2 5 3.1.3 6 4.6 4.1 6 4.2.6 5 7 5.1..8 5.1.1 8 5.1.2..8 5.1.3..8 5.1.4..9 5.2..9 6.10 6.1.10 6.2.10 6.3..10 6.4 11 7.12 7.1

More information

北 风 网 讲 师 原 创 作 品 ---- 仅 供 学 员 内 部 交 流 使 用 前 言 吾 尝 终 日 而 思 矣, 不 如 须 臾 之 所 学 也 ; 吾 尝 跂 而 望 矣, 不 如 登 高 之 博 见 也 登 高 而 招, 臂 非 加 长 也, 而 见

北 风 网 讲 师 原 创 作 品 ---- 仅 供  学 员 内 部 交 流 使 用 前 言 吾 尝 终 日 而 思 矣, 不 如 须 臾 之 所 学 也 ; 吾 尝 跂 而 望 矣, 不 如 登 高 之 博 见 也 登 高 而 招, 臂 非 加 长 也, 而 见 北 风 网 讲 师 原 创 作 品 ---- 仅 供 www.ibeifeng.com 学 员 内 部 交 流 使 用 前 言 吾 尝 终 日 而 思 矣, 不 如 须 臾 之 所 学 也 ; 吾 尝 跂 而 望 矣, 不 如 登 高 之 博 见 也 登 高 而 招, 臂 非 加 长 也, 而 见 者 远 ; 顺 风 而 呼, 声 非 加 疾 也, 而 闻 者 彰 假 舆 马 者, 非 利 足 也,

More information

Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0,

Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0, http://debut.cis.nctu.edu.tw/~chi Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0, : POSITIVE_INFINITY NEGATIVE_INFINITY

More information

优迈科技教学大纲2009版本

优迈科技教学大纲2009版本 java 软 件 工 程 师 培 训 教 学 大 纲 1 JAVA 软 件 工 程 师 培 训 教 学 大 纲 深 圳 软 件 园 人 才 实 训 基 地 2009 年 3 月 目 录 java 软 件 工 程 师 培 训 教 学 大 纲 2 教 学 阶 段...3 第 一 章 JAVA 起 步...3 第 二 章 面 向 对 象 的 编 程...4 第 三 章 数 据 结 构 IO 线 程 网 络...5

More information

使用Cassandra和Spark 2.0实现Rest API服务

使用Cassandra和Spark 2.0实现Rest API服务 使用 Cassandra 和 Spark 2.0 实现 Rest API 服务 在这篇文章中, 我将介绍如何在 Spark 中使用 Akkahttp 并结合 Cassandra 实现 REST 服务, 在这个系统中 Cassandra 用于数据的存储 我们已经见识到 Spark 的威力, 如果和 Cassandra 正确地结合可以实现更强大的系统 我们先创建一个 build.sbt 文件, 内容如下

More information

RunPC2_.doc

RunPC2_.doc PowerBuilder 8 (5) PowerBuilder Client/Server Jaguar Server Jaguar Server Connection Cache Thin Client Internet Connection Pooling EAServer Connection Cache Connection Cache Connection Cache Connection

More information

Microsoft Word - 第4章 Servlet开发—教学设计.doc

Microsoft Word - 第4章 Servlet开发—教学设计.doc 传智播客 JavaWeb 程序开发入门 教学设计 课程名称 : JavaWeb 程序开发入门 授课年级 : 2014 年级 授课学期 : 2014 学年第一学期 教师姓名 : 某某老师 2014 年 09 月 09 日 课题名称内容分析教学目标及基本要求重点及措施 计划第 4 章 Servlet 技术 6 课时学时随着 Web 应用业务需求的增多, 动态 Web 资源的开发变得越来越重要, 为此 Sun

More information

实验六 JSP/Servlet

实验六   JSP/Servlet Web Lab 5 JSP/Servlet 实验目的 1) 复习和掌握 TOMCAT 配置 2) 掌握 JSP 基本语法 3) 掌握使用 JSP,JavaBean,Servlet 进行编程 4) 掌握使用 Session 进行数据传递的方法 实验任务 通过设计 JSP Servlet JavaBean 使用 MVC 模式实现用户登录验证 注销, 购物车的添加 移除以及清除商品, 页面之间使用 session

More information

untitled

untitled 1 .NET sln csproj dll cs aspx 說 料 料 利 來 料 ( 來 ) 利 [] [] 來 說 切 切 理 [] [ ] 來 說 拉 類 類 [] [ ] 列 連 Web 行流 來 了 不 不 不 流 立 行 Page 類 Load 理 Click 滑 料 Response 列 料 Response HttpResponse 類 Write 料 Redirect URL Response.Write("!!

More information

關於本書 l 3 PhoneGap Appcelerator Titanium Sencha Touch (wrapper framework) Native App PhoneGap Build Native App Hybrid App Java Objective-C Android SDK

關於本書 l 3 PhoneGap Appcelerator Titanium Sencha Touch (wrapper framework) Native App PhoneGap Build Native App Hybrid App Java Objective-C Android SDK 2 l 跨裝置網頁設計 Android ios Windows 8 BlackBerry OS Android HTML 5 HTML 5 HTML 4.01 HTML 5 CSS 3 CSS 3 CSS 2.01 CSS 3 2D/3D PC JavaScript

More information

WebSphere Studio Application Developer IBM Portal Toolkit... 2/21 1. WebSphere Portal Portal WebSphere Application Server stopserver.bat -configfile..

WebSphere Studio Application Developer IBM Portal Toolkit... 2/21 1. WebSphere Portal Portal WebSphere Application Server stopserver.bat -configfile.. WebSphere Studio Application Developer IBM Portal Toolkit... 1/21 WebSphere Studio Application Developer IBM Portal Toolkit Portlet Doug Phillips (dougep@us.ibm.com),, IBM Developer Technical Support Center

More information

IoC容器和Dependency Injection模式.doc

IoC容器和Dependency Injection模式.doc IoC Dependency Injection /Martin Fowler / Java Inversion of Control IoC Dependency Injection Service Locator Java J2EE open source J2EE J2EE web PicoContainer Spring Java Java OO.NET service component

More information

Microsoft PowerPoint - 10-JSP-Scripting-Elements-Chinese.ppt

Microsoft PowerPoint - 10-JSP-Scripting-Elements-Chinese.ppt 2004 Marty Hall 用 JSP 脚 本 元 素 调 用 Java 代 码 JSP, Servlet, & Struts Training Courses: http://courses.coreservlets.com Available in US, China, Taiwan, HK, and Worldwide 2 JSP and Servlet Books from Sun Press:

More information

2 Java 语 言 程 序 设 计 教 程 1.2.1 简 单 性 Java 语 言 的 语 法 与 C 语 言 和 C++ 语 言 很 接 近, 使 得 大 多 数 程 序 员 很 容 易 学 习 和 使 用 Java 另 一 方 面,Java 丢 弃 了 C++ 中 很 少 使 用 的 很 难

2 Java 语 言 程 序 设 计 教 程 1.2.1 简 单 性 Java 语 言 的 语 法 与 C 语 言 和 C++ 语 言 很 接 近, 使 得 大 多 数 程 序 员 很 容 易 学 习 和 使 用 Java 另 一 方 面,Java 丢 弃 了 C++ 中 很 少 使 用 的 很 难 第 1 章 Java 概 述 Java 的 诞 生 Java 的 特 点 Java 开 发 环 境 安 装 与 配 置 创 建 并 运 行 一 个 简 单 的 Java 程 序 Java 语 言 是 当 今 计 算 机 软 件 行 业 中 最 热 门 的 网 络 编 程 语 言, 以 Java 为 核 心 的 芯 片 技 术 编 译 技 术 数 据 库 连 接 技 术, 以 及 基 于 企 业 级

More information

第一章 章标题-F2 上空24,下空24

第一章 章标题-F2 上空24,下空24 Web 9 XML.NET Web Web Service Web Service Web Service Web Service Web Service ASP.NET Session Application SOAP Web Service 9.1 Web Web.NET Web Service Web SOAP Simple Object Access Protocol 9.1.1 Web Web

More information

59 1 CSpace 2 CSpace CSpace URL CSpace 1 CSpace URL 2 Lucene 3 ID 4 ID Web 1. 2 CSpace LireSolr 3 LireSolr 3 Web LireSolr ID

59 1 CSpace 2 CSpace CSpace URL CSpace 1 CSpace URL 2 Lucene 3 ID 4 ID Web 1. 2 CSpace LireSolr 3 LireSolr 3 Web LireSolr ID 58 2016. 14 * LireSolr LireSolr CEDD Ajax CSpace LireSolr CEDD Abstract In order to offer better image support services it is necessary to extend the image retrieval function of our institutional repository.

More information

D C 93 2

D C 93 2 D9223468 3C 93 2 Java Java -- Java UML Java API UML MVC Eclipse API JavadocUML Omendo PSPPersonal Software Programming [6] 56 8 2587 56% Java 1 epaper(2005 ) Java C C (function) C (reusability) eat(chess1,

More information

Microsoft Word - Learn Objective-C.doc

Microsoft Word - Learn Objective-C.doc Learn Objective C http://cocoadevcentral.com/d/learn_objectivec/ Objective C Objective C Mac C Objective CC C Scott Stevenson [object method]; [object methodwithinput:input]; output = [object methodwithoutput];

More information

设计模式 Design Patterns

设计模式 Design Patterns 丁勇 Email:18442056@QQ.com 学习目标 理解 Struts 框架的工作原理 掌握使用 Struts 框架开发 Web 应用的基本步骤 熟悉 MyEclipse 对 Struts 开发的支持 Web 框架事实标准 : Web 框架的事实标准 http://struts.apache.org Java EE 主流技术趋势图 主流 Web 框架趋势图 使用 Struts 实现加法器 使用开发的

More information

基于ECO的UML模型驱动的数据库应用开发1.doc

基于ECO的UML模型驱动的数据库应用开发1.doc ECO UML () Object RDBMS Mapping.Net Framework Java C# RAD DataSetOleDbConnection DataGrod RAD Client/Server RAD RAD DataReader["Spell"].ToString() AObj.XXX bug sql UML OR Mapping RAD Lazy load round trip

More information

1. 2. Flex Adobe 3.

1. 2. Flex Adobe 3. 1. 2. Flex Adobe 3. Flex Adobe Flex Flex Web Flex Flex Flex Adobe Flash Player 9 /rich Internet applications/ria Flex 1. 2. 3. 4. 5. 6. SWF Flash Player Flex 1. Flex framework Adobe Flex 2 framework RIA

More information

互動網頁技術系列課程 HTML與CSS網站基礎設計 [12pt]

互動網頁技術系列課程 HTML與CSS網站基礎設計 [12pt] HTML CSS / 2011 HTML CSS 1/ 47 1 2 HTML 3 4 HTML 5 5 : CSS 6 CSS 7 HTML CSS 2/ 47 HTML CSS 3/ 47 ( BOM) UTF-8 Notepad++ (Winodws), Fraise/Smultron (Mac), VIM ( ) HTML CSS 4/ 47 UTF-8? UTF-8 (unicode),

More information

使用MapReduce读取XML文件

使用MapReduce读取XML文件 使用 MapReduce 读取 XML 文件 XML( 可扩展标记语言, 英语 :extensible Markup Language, 简称 : XML) 是一种标记语言, 也是行业标准数据交换交换格式, 它很适合在系统之间进行数据存储和交换 ( 话说 Hadoop H ive 等的配置文件就是 XML 格式的 ) 本文将介绍如何使用 MapReduce 来读取 XML 文件 但是 Had oop

More information

Stateless Session Beans(无状态bean)的学习

Stateless Session Beans(无状态bean)的学习 一 Stateless Session Beans( 无状态 bean) 的学习 第一步 : 要定义一个会话 Bean, 首先需要定义一个包含他所有业务方法的接口 这个接口不需要任何注释, 就像普通的 java 接口那样定义 调用 EJB 的客户端通过使用这个接口引用从 EJB 容器得到的会话 Bean 对象 stub 接口的定义如下: HelloWorld.java package com.foshanshop.ejb3;

More information

JavaIO.PDF

JavaIO.PDF O u t p u t S t ream j a v a. i o. O u t p u t S t r e a m w r i t e () f l u s h () c l o s e () public abstract void write(int b) throws IOException public void write(byte[] data) throws IOException

More information

ebook

ebook 26 JBuilder RMI Java Remote Method Invocation R M I J a v a - - J a v a J a v J a v a J a v a J a v a R M I R M I ( m a r s h a l ) ( u n m a r c h a l ) C a ff e i n e J a v a j a v a 2 i i o p J a v

More information

關於本書 Part 3 CSS XHTML Ajax Part 4 HTML 5 API JavaScript HTML 5 API Canvas API ( ) Video/Audio API ( ) Drag and Drop API ( ) Geolocation API ( ) Part 5

關於本書 Part 3 CSS XHTML Ajax Part 4 HTML 5 API JavaScript HTML 5 API Canvas API ( ) Video/Audio API ( ) Drag and Drop API ( ) Geolocation API ( ) Part 5 網頁程式設計 HTML JavaScript CSS HTML JavaScript CSS HTML 5 JavaScript JavaScript HTML 5 API CSS CSS Part 1 HTML HTML 5 API HTML 5 Apple QuickTime Adobe Flash RealPlayer Ajax XMLHttpRequest HTML 4.01 HTML 5

More information

untitled

untitled 1 行 行 行 行.NET 行 行 類 來 行 行 Thread 類 行 System.Threading 來 類 Thread 類 (1) public Thread(ThreadStart start ); Name 行 IsAlive 行 行狀 Start 行 行 Suspend 行 Resume 行 行 Thread 類 (2) Sleep 行 CurrentThread 行 ThreadStart

More information

untitled

untitled 1 .NET 利 [] [] 來 說 切 切 理 [] [ ] 來 說 拉 類 類 [] [ ] 列 連 Web 行流 來 了 不 不 不 流 立 行 Page 類 Load 理 Response 類 Write 料 Redirect URL Response.Write("!! ives!!"); Response.Redirect("WebForm2.aspx"); (1) (2) Web Form

More information

spc

spc 网站的静态页面生成方案 yanrong79@gmail.com 提升网站性能的方式有很多, 例如有效的使用缓存, 生成静态页面等等 今天要说的就是生成静态页面的方式 什么叫生成静态页面呢? 很简单, 例如我们如果访问一个链接 http://xyz.com/index.do, 那么服务器就会解析这个请求, 让特定的 Action 去处理 这其中的缺点是显而易见的 : 如果访问的人, 那么就会加重应用服务器的压力,

More information

XXXXXXXX http://cdls.nstl.gov.cn 2 26

XXXXXXXX http://cdls.nstl.gov.cn 2 26 [ ] [ ] 2003-7-18 1 26 XXXXXXXX http://cdls.nstl.gov.cn 2 26 (2003-7-18) 1...5 1.1...5 1.2...5 1.3...5 2...6 2.1...6 2.2...6 2.3...6 3...7 3.1...7 3.1.1...7 3.1.2...7 3.1.2.1...7 3.1.2.1.1...8 3.1.2.1.2...10

More information

epub83-1

epub83-1 C++Builder 1 C + + B u i l d e r C + + B u i l d e r C + + B u i l d e r C + + B u i l d e r 1.1 1.1.1 1-1 1. 1-1 1 2. 1-1 2 A c c e s s P a r a d o x Visual FoxPro 3. / C / S 2 C + + B u i l d e r / C

More information

Microsoft Word - 第3章.doc

Microsoft Word - 第3章.doc 第 3 章 Struts2 框架是 Apache 开源社区原有的 Struts 框架和 Open Symphony 社区 WebWork2 框架的合并版本, 它集成了这两大流行的 MVC 框架各自的优点, 主要以 WebWork 的设计思想为核心, 提供了更加灵活的控制层和组件实现技术 Struts2 的体系结构 Struts2 的安装与配置 Struts2 框架的主要配置文件 3.1 Struts2

More information

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double

More information

使用 XFire 与 Spring 开发 Web Service 2 实现功能与特点 基于 J2EE 平台的 Web Service 服务 开发方便, 配置简单 设计接口 实现服务 配置暴露接口 XFire 将自动生成对应的 wsdl 支持高级详细配置 与 Spring 无缝集成 运行环境 JDK

使用 XFire 与 Spring 开发 Web Service 2 实现功能与特点 基于 J2EE 平台的 Web Service 服务 开发方便, 配置简单 设计接口 实现服务 配置暴露接口 XFire 将自动生成对应的 wsdl 支持高级详细配置 与 Spring 无缝集成 运行环境 JDK 使用 XFire 与 Spring 开发 Web Service 1 使用 XFire 与 Spring 开发 Web Service 王啸宇信易诚 wangxiao1@mail.yuchengtech.com 目录 实现功能与特点... 2 运行环境... 2 开发平台... 2 实施步骤... 2 概述... 2 新建 Java Project... 3 新建 WTP 动态 WEB 工程...

More information

(Microsoft Word - \272\364\263q\245|\244A_49636107_\304\254\253\330\336\263__\272\353\302\262\263\370\247i.doc)

(Microsoft Word - \272\364\263q\245|\244A_49636107_\304\254\253\330\336\263__\272\353\302\262\263\370\247i.doc) SCJP (Oracle Certified Professional, Java SE5/6 Programmer) 學 制 / 班 級 : 四 年 制 / 網 通 四 乙 指 導 老 師 : 方 信 普 老 師 學 生 學 號 / 姓 名 : 49636107 蘇 建 瑋 繳 交 年 份 : 100 年 6 月 一 SCJP 介 紹 SCJP 是 Sun Certified Java Programmer

More information

untitled

untitled 4.1AOP AOP Aspect-oriented programming AOP 來說 AOP 令 理 Cross-cutting concerns Aspect Weave 理 Spring AOP 來 AOP 念 4.1.1 理 AOP AOP 見 例 來 例 錄 Logging 錄 便 來 例 行 留 錄 import java.util.logging.*; public class HelloSpeaker

More information

《大话设计模式》第一章

《大话设计模式》第一章 第 1 章 代 码 无 错 就 是 优? 简 单 工 厂 模 式 1.1 面 试 受 挫 小 菜 今 年 计 算 机 专 业 大 四 了, 学 了 不 少 软 件 开 发 方 面 的 东 西, 也 学 着 编 了 些 小 程 序, 踌 躇 满 志, 一 心 要 找 一 个 好 单 位 当 投 递 了 无 数 份 简 历 后, 终 于 收 到 了 一 个 单 位 的 面 试 通 知, 小 菜 欣 喜

More information

2 WF 1 T I P WF WF WF WF WF WF WF WF 2.1 WF WF WF WF WF WF

2 WF 1 T I P WF WF WF WF WF WF WF WF 2.1 WF WF WF WF WF WF Chapter 2 WF 2.1 WF 2.2 2. XAML 2. 2 WF 1 T I P WF WF WF WF WF WF WF WF 2.1 WF WF WF WF WF WF WF WF WF WF EDI API WF Visual Studio Designer 1 2.1 WF Windows Workflow Foundation 2 WF 1 WF Domain-Specific

More information

Microsoft PowerPoint - 03-Form-Data-Chinese.ppt

Microsoft PowerPoint - 03-Form-Data-Chinese.ppt 2004 Marty Hall 客户请求的处理 : 表单数据 JSP, Servlet, & Struts Training Courses: http://courses.coreservlets.com Available in US, China, Taiwan, HK, and Worldwide 2 JSP and Servlet Books from Sun Press: http://www.coreservlets.com

More information

p.2 1 <HTML> 2 3 <HEAD> 4 <TITLE> </TITLE> 5 </HEAD> 6 7 <BODY> 8 <H3><B> </B></H3> 9 <H4><I> </I></H4> 10 </BODY> </HTML> 1. HTML 1. 2.

p.2 1 <HTML> 2 3 <HEAD> 4 <TITLE> </TITLE> 5 </HEAD> 6 7 <BODY> 8 <H3><B> </B></H3> 9 <H4><I> </I></H4> 10 </BODY> </HTML> 1. HTML 1. 2. 2005-06 p.1 HTML HyperText Mark-up Language 1. HTML Logo, Pascal, C++, Java HTML 2. HTML (tag) 3. HTML 4. HTML 1. HTML 2. 3. FTP HTML HTML html 1. html html html cutehtmleasyhtml 2. wyswyg (What you see

More information

PrintWriter s = new PrintWriter(writer); ex.printstacktrace(s); mv.addobject("exception", writer.tostring()); mv.setviewname("error"); return

PrintWriter s = new PrintWriter(writer); ex.printstacktrace(s); mv.addobject(exception, writer.tostring()); mv.setviewname(error); return 本章学习目标 小风 Java 实战系列教程 SpringMVC 异常处理 SpringMVC 文件上传 SpringMVC 处理 JSON 格式数据 SpringMVC 拦截器 SpringMVC 对 restful 风格的支持 1. SpringMVC 异常处理 1.1. @ExceptionHandler 注解处理异常 @ExceptionHandler 该注解使用在异常处理方法上面 1.1.1.

More information

05 01 accordion UI containers 03 Accordion accordion UI accordion 54

05 01 accordion UI containers 03 Accordion accordion UI accordion 54 jquery UI plugin Accordion 05 01 accordion UI containers 03 Accordion accordion UI accordion 54 05 jquery UI plugin 3-1

More information

JSP基础编程

JSP基础编程 JSP 基础编程 报告人 : 包亮 邮箱 :rslab@lzb.ac.cn HTTP 基础 HTTP is a simple, stateless protocol. A client, such as a web browser, makes a request, the web server responds, and the transaction is done. Client 发出一个请求

More information

IP505SM_manual_cn.doc

IP505SM_manual_cn.doc IP505SM 1 Introduction 1...4...4...4...5 LAN...5...5...6...6...7 LED...7...7 2...9...9...9 3...11...11...12...12...12...14...18 LAN...19 DHCP...20...21 4 PC...22...22 Windows...22 TCP/IP -...22 TCP/IP

More information

javaexample-02.pdf

javaexample-02.pdf n e w. s t a t i c s t a t i c 3 1 3 2 p u b l i c p r i v a t e p r o t e c t e d j a v a. l a n g. O b j e c t O b j e c t Rect R e c t x 1 y 1 x 2 y 2 R e c t t o S t r i n g ( ) j a v a. l a n g. O

More information

用手機直接傳值不透過網頁連接, 來當作搖控器控制家電 ( 電視遙控器 ) 按下按鍵發送同時會回傳值來確定是否有送出 問題 :1. 應該是使用了太多 thread 導致在傳值上有問題 2. 一次按很多次按鈕沒辦法即時反應

用手機直接傳值不透過網頁連接, 來當作搖控器控制家電 ( 電視遙控器 ) 按下按鍵發送同時會回傳值來確定是否有送出 問題 :1. 應該是使用了太多 thread 導致在傳值上有問題 2. 一次按很多次按鈕沒辦法即時反應 專題進度 老師 : 趙啟時老師 學生 : 陳建廷 2013/10/13 用手機直接傳值不透過網頁連接, 來當作搖控器控制家電 ( 電視遙控器 ) 按下按鍵發送同時會回傳值來確定是否有送出 問題 :1. 應該是使用了太多 thread 導致在傳值上有問題 2. 一次按很多次按鈕沒辦法即時反應 程式碼 : package com.example.phone; import java.util.arraylist;

More information

JBuilder Weblogic

JBuilder Weblogic JUnit ( bliu76@yeah.net) < >6 JUnit Java Erich Gamma Kent Beck JUnit JUnit 1 JUnit 1.1 JUnit JUnit java XUnit JUnit 1.2 JUnit JUnit Erich Gamma Kent Beck Erich Gamma Kent Beck XP Extreme Programming CRC

More information

二 Synchronized 1. Java 语 言 的 关 键 字, 当 它 用 来 修 饰 一 个 方 法 或 者 一 个 代 码 块 的 时 候, 能 够 保 证 在 同 一 时 刻 最 多 只 有 一 个 线 程 执 行 该 段 代 码 2. 当 两 个 并 发 线 程 访 问 同 一 个

二 Synchronized 1. Java 语 言 的 关 键 字, 当 它 用 来 修 饰 一 个 方 法 或 者 一 个 代 码 块 的 时 候, 能 够 保 证 在 同 一 时 刻 最 多 只 有 一 个 线 程 执 行 该 段 代 码 2. 当 两 个 并 发 线 程 访 问 同 一 个 Java 基 础 包 括 多 线 程 (Thread 和 Runable 的 区 别 ) 同 步 异 步 (Synchronized) 线 程 池 集 合 序 列 化 反 射 实 例 化 过 程 JDBC 常 用 类 IBatis Java 类 生 命 周 期 Java Web 生 命 周 期 Tomcat 出 去 Http 请 求 过 程 Java 垃 圾 回 收 机 制 Java 性 能 优 化

More information

Important Notice SUNPLUS TECHNOLOGY CO. reserves the right to change this documentation without prior notice. Information provided by SUNPLUS TECHNOLO

Important Notice SUNPLUS TECHNOLOGY CO. reserves the right to change this documentation without prior notice. Information provided by SUNPLUS TECHNOLO Car DVD New GUI IR Flow User Manual V0.1 Jan 25, 2008 19, Innovation First Road Science Park Hsin-Chu Taiwan 300 R.O.C. Tel: 886-3-578-6005 Fax: 886-3-578-4418 Web: www.sunplus.com Important Notice SUNPLUS

More information

输入 project name 选择完成

输入 project name 选择完成 JAVA 程序访问 HighGo DB 的环境准备 山东瀚高科技有限公司版权所有仅允许不作任何修改的转载和转发 Hibernate 的配置 MyEclipse 中创建新项目 : 选择菜单栏 file---new---project 选择 web project 进行下一步 输入 project name 选择完成 4. 单击 " 添加 JAR/ 文件夹 ", 会如下图出现 JDBC 下载 Hibernate

More information

FileMaker 16 ODBC 和 JDBC 指南

FileMaker 16 ODBC 和 JDBC 指南 FileMaker 16 ODBC JDBC 2004-2017 FileMaker, Inc. FileMaker, Inc. 5201 Patrick Henry Drive Santa Clara, California 95054 FileMaker FileMaker Go FileMaker, Inc. FileMaker WebDirect FileMaker Cloud FileMaker,

More information

Microsoft Word - ch04三校.doc

Microsoft Word - ch04三校.doc 4-1 4-1-1 (Object) (State) (Behavior) ( ) ( ) ( method) ( properties) ( functions) 4-2 4-1-2 (Message) ( ) ( ) ( ) A B A ( ) ( ) ( YourCar) ( changegear) ( lowergear) 4-1-3 (Class) (Blueprint) 4-3 changegear

More information

OSWorkflow Documentation

OSWorkflow Documentation OSWorkflow Documentation Update Time: 05/09/15 OSWorkflow Java workflow engine API 理 flow 行 XML 來 流 Database UI 不 流 GUI Designer end user 行 JSP+Servlet 行 OSWorkflow 2.8 說 2.7 2.7 了 OSWorkflow library library

More information

untitled

untitled -JAVA 1. Java IDC 20 20% 5 2005 42.5 JAVA IDC JAVA 60% 70% JAVA 3 5 10 JAVA JAVA JAVA J2EE J2SE J2ME 70% JAVA JAVA 20 1 51 2. JAVA SUN JAVA J2EE J2EE 3. 1. CSTP CSTP 2 51 2. 3. CSTP IT CSTP IT IT CSTP

More information

Android Service

Android Service Android Service- 播放音樂 建國科技大學資管系 饒瑞佶 2013/7 V1 Android Service Service 是跟 Activity 並行 一個音樂播放程式若沒使用 Service, 即使按 home 鍵畫面離開之後, 音樂還是照播 如果再執行一次程式, 新撥放的音樂會跟先前撥放的一起撥, 最後程式就會出錯 執行中的程式完全看不到! 但是, 寫成 Service 就不同了

More information

1. 访 问 最 新 发 行 公 告 信 息 jconnect for JDBC 7.0 1. 访 问 最 新 发 行 公 告 信 息 最 新 版 本 的 发 行 公 告 可 以 从 网 上 获 得 若 要 查 找 在 本 产 品 发 布 后 增 加 的 重 要 产 品 或 文 档 信 息, 请 访

1. 访 问 最 新 发 行 公 告 信 息 jconnect for JDBC 7.0 1. 访 问 最 新 发 行 公 告 信 息 最 新 版 本 的 发 行 公 告 可 以 从 网 上 获 得 若 要 查 找 在 本 产 品 发 布 后 增 加 的 重 要 产 品 或 文 档 信 息, 请 访 发 行 公 告 jconnect for JDBC 7.0 文 档 ID:DC74874-01-0700-01 最 后 修 订 日 期 :2010 年 3 月 2 日 主 题 页 码 1. 访 问 最 新 发 行 公 告 信 息 2 2. 产 品 摘 要 2 3. 特 殊 安 装 说 明 2 3.1 查 看 您 的 jconnect 版 本 3 4. 特 殊 升 级 指 导 3 4.1 迁 移 3

More information

中 国 矿 业 大 学

中 国 矿 业 大 学 实验一动态网页设计基础 实验目的 : 1 掌握 HTML 的常用标签 2 掌握 HTML 设计基本网页 3 掌握 HTML 设计网络中常用的表单 4 了解 JavaScript 的简单应用, 实验环境 : 操作系统 Windows XP 或更高版本实验内容 : 1 编写一个简单的学生信息注册页面, 包括学号 姓名 密码 专业, 其中学号 姓名用单行文本框 密码使用密码框 专业使用下拉菜单 ; 2 使用框架将一个页面均分为四个区域,

More information

INTRODUCTION TO COM.DOC

INTRODUCTION TO COM.DOC How About COM & ActiveX Control With Visual C++ 6.0 Author: Curtis CHOU mahler@ms16.hinet.net This document can be freely release and distribute without modify. ACTIVEX CONTROLS... 3 ACTIVEX... 3 MFC ACTIVEX

More information