Java web开发教程部分 (2)
JavaWeb程序设计教程课后练习答案

答案:
<load-on-startup>元素用于要求服务器启动时就加载和初始化Servlet。
(
<%!
int number=0;//声明一个变量
public int getNum(int i){//声明一个方法
return i;
}
%>
习题答案
1
答案:
SQL语言由以下3部分组成,分别是:
数据库模式定义语言(DDL):CREATE、DROP、ALTER等语句。
5
答案:
<action>元素用来配置Action,它包含的属性如下表所示:
属性名称
是否必须
功能描述
name
是
请求的Action名称
class
否
Action处理类对应具体路径
method
否
指定Action中的方法名
converter
否
指定Action使用的类型转换器
习题答案
1.
答案:
使用<interceptors>元素的子元素<interceptor>引入指定的拦截器,在引入时需指定该拦截器的名称及其实现类。下面是部署拦截器的示例代码:
rs = stmt.executeQuery(sql);
return null;
}catch(Exception e) {
return null;
}
returnrs;
}
}
public voidcloseConnection(){//关闭数据库连接
if(con==null){
try{
con.close();
4
答案:
4《Java_Web应用开发实用教程》练习答案

1.7 习题1. 单选题(1)在HTML中超链接标记为()A.<a>和</a>B. <title>和</title>C. <html>和</html>D. <body>和</body>答案:A(2)表单中的数据要提交到的处理文件由表单的()属性指定。
A.methodB. nameC. actionD. 以上都不对答案:C(3)当<input>标记的type属性值为()时,代表一个多选框。
A.textB. radioC. checkboxD. button答案:C(4)以下URL中语法不正确的是()A.:80/software/home.htmlB.telnet://:70C.ftp://答案:D2. 上机练习用记事本或Dreamweaver制作如下几个页面(建议用Dreamweaver制作):link.html:此页面只有一个超级链接,用户单击此链接后将链接到login.html登录页面。
login.html:此页面为用户登录页面,用户可以在此页面输入用户名和密码,然后提交表单。
login_success.jsp:接收用户输入并显示“登录成功!”。
三个页面运行后的效果如图1.8所示。
图1.8 练习题页面运行效果答案:link.html代码如下:<html><head><title>HTML练习</title></head><body><a href="login.html">点击这里登录</a></body></html>login.html代码如下:<html><head><title>登录页面</title></head><body><form action="login_success.jsp" method=”post”>用户名<input type="text" name="textfield"><br>密 码<input type="password" name="textfield"><br><label> <input type="submit" name="Submit" value="提交"></label><label> <input type="reset" name="Submit2" value="重置"></label></form></body></html>login_success.jsp代码如下:<%@ page contentType="text/html; charset=gb2312"%><html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>无标题文档</title></head><body>登录成功!</body></html>2.7 习题1. 单选题(1)要运行JSP程序,下列说法不正确的是()A.服务器端需要安装Servlet容器,如Tomcat等。
JavaWeb编程技术第2版源代码

Java Web编程技术(第2版)程序1.1 register.html<!DOCTYPE html><html><head><meta charset="UTF-8"><title>用户注册</title></head><body><form action="register.action" method="post"><p>用户注册</p>姓名:<input type="text" name="name" size="15">年龄:<input type="text" name="age" size="5"><br>性别:<input type="radio" name ="sex" value="male">男<input type="radio" name ="sex" value="female">女<br> 兴趣:<input type="checkbox" name="hobby" value="read">文学<input type="checkbox" name="hobby" value="sport">体育<input type="checkbox" name="hobby" value="computer">电脑<br> 学历:<select name="education"><option value="bachelor">学士</option><option value="master">硕士</option><option value="doctor">博士</option></select>邮件地址:<input type="text" name="email" size="20"><br><input type="submit" name="submit" value="提交"><input type="reset" name="reset" value="重置"></form></body></html>程序1.2 index.html<!DOCTYPE html><html><head><meta charset="UTF-8"><title>派派电子商城</title><link href="css\layout.css" rel="stylesheet" type="text/css" /></head><body><div id="container"><div id="header"><img alt="Here is a logo." src="images/logo.jpg" /></div><div id="topmenu"><form action="LoginServlet" method="post" name="login" ><p>用户名<input type="text" name="username" size="13" />密码 <input type="password" name="password" size="13" /><input type="submit" name="Submit" value="登录"><input type="button" name="register" value="注册"onclick="check();"><input type="button" name="myorder" value="我的订单" /><input type="button" name="shopcart" value="查看购物车" /></form></div><div id="middle"><div id="leftmenu"><p align="center"><b>商品分类</b></p><ul><li><a href="goods.do?catalog=mobilephone">手机数码</a></li><li><a href="goods.do?catalog=electrical">家用电器</a></li><li><a href="goods.do?catalog=automobile">汽车用品</a></li><li><a href="goods.do?catalog=clothes">服饰鞋帽</a></li><li><a href="goods.do?catalog=health">运动健康</a></li></ul></div><div id="content"><table><tr><td><img src="images/phone.jpg"><td><p>三星 S5830领取手机节优惠券,立减100元!再送:200元移动手机卡!派派价:2068元</p></td><td><img src="images/comp.jpg"></td><td><p>联想(Lenovo)G460AL-ITH 14.0英寸笔记本电脑(i3-370M 2G 500G 512独显 DVD刻录摄像头 Win7)特价:3199元!</p></td></tr></table></div></div><div id="footer"><hr size="1" color="blue"/>Copyright © 2013 派派电子商城有限责任公司,8899123.</div></div></body></html>程序1.3 layout.cssbody {font-family:Verdana; font-size:14px; margin:10;}#container {margin:0 auto; width:100%;}#header {height:50px; background:#9c6; margin-bottom:5px;}#topmenu {height:30px; background:#c0c0c0; margin-bottom:5px;}#middle {margin-bottom:5px;}#leftmenu {float:left; width:180px; background:#cf9;}#content {float:left; background:#ffa;}#footer {height:60px; background:#9c6;clear:both;}程序1.4 inputCheck.html<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>用户注册</title><script language="JavaScript" type="text/javascript">function custCheck(){var custName = document.getElementById("custName");var email = document.getElementById("email");var phone = document.getElementById("phone");if(custName.value==""){alert("客户名不能为空!");return false;}else if(email.value.indexOf("@")==-1){alert("电子邮件中应包含@字符!");return false;}else if(phone.value.length!=8){alert("电话号码应是8位数字!");return false;}}</script><style type="text/css">*,input {font-size:11pt;color:black}</style></head><body><form action="/helloweb/inputCustomer"method="post" onSubmit="return custCheck()">请输入客户信息:<table><tr><td>客户名:</td><td><input type="text" name="custName" id="custName"></td> </tr><tr><td>Email地址:</td><td><input type="text" name="email" id="email"></td></tr><tr><td>电话:</td><td><input type="text" name="phone" id="phone"></td></tr></table><input type="submit" value="确定"><input type="reset" value="重置"></form></body></html>程序1.5 HelloServlet.javapackage com.demo;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.*;@WebServlet(name = "helloServlet", urlPatterns = { "/helloServlet.do" }) public class HelloServlet extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html;charset=UTF-8");PrintWriter out = response.getWriter();out.println("<html>");out.println("<body><title>Hello Servlet</title>");out.println("<h3 style='color:#00f'>Hello,World!</h3>");out.println("现在的时间是:"+new java.util.Date());out.println("</body>");out.println("</html>");}}程序1.6 hello.jsp<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><html><head><title>简单的JSP页面</title></head><body><h3 style='color:#00f'>Hello,World!</h3>现在的时间是:<%=new java.util.Date() %></body></html>程序2.1 login.jsp<%@ page contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><html><head><title>登录页面</title></head><body><form action="login.do" method="post"><table><tr><td>用户名:</td><td><input type="text" name="username"/></td></tr><tr><td>密 码:</td><td><input type="password" name="password"/></td></tr><tr><td><input type="submit" value="登录"/></td><td><input type="reset" value="取消"/></td></tr></table></form></body></html>程序2.2 LoginServlet.javapackage com.demo;import java.io.*;import javax.servlet.*;import javax.servlet.http.*;import javax.servlet.annotation.WebServlet;@WebServlet(name="LoginServlet",urlPatterns={"/login.do"})public class LoginServlet extends HttpServlet {public void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException {String username = request.getParameter("username");String password = request.getParameter("password");response.setContentType("text/html;charset=UTF-8");PrintWriter out = response.getWriter();out.println("<html><body>");if("admin".equals(username)&& "admin".equals(password)){out.println("登录成功!欢迎您, "+username);}else{out.println("对不起!您的用户名或密码不正确.");}out.println("</body></html>");}}程序2.3 ClientInfoServlet.javapackage com.demo;import java.io.*;import javax.servlet.*;import javax.servlet.http.*;import javax.servlet.annotation.WebServlet;@WebServlet("/ClientInfoServlet")public class ClientInfoServlet extends HttpServlet {public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8");PrintWriter out = response.getWriter();out.println("<html><head>");out.println("<title>获取客户端信息</title></head>");out.println("<body>");out.println("<h4>客户端信息:</h4>");out.println("<table border=’1’>");out.println("<tr><td>客户主机名</td>");out.println("<td>" + request.getRemoteHost() + "</td></tr>");out.println("<tr><td>客户IP地址</td>");out.println("<td>" + request.getRemoteAddr() + "</td></tr>");out.println("<tr><td>端口</td>");out.println("<td>" + request.getRemotePort() + "</td></tr>");out.println("<tr><td>请求方法</td>");out.println("<td>" + request.getMethod() + "</td></tr>");out.println("<tr><td>请求协议</td>");out.println("<td>" + request.getProtocol() + "</td></tr>");out.println("<tr><td>请求URI</td>");out.println("<td>" + request.getRequestURI() + "</td></tr>");out.println("</table>");out.println("</body></html>");}public void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}程序2.4 ShowHeadersServlet.javapackage com.demo;import java.io.*;import javax.servlet.*;import javax.servlet.http.*;import java.util.Enumeration;import javax.servlet.annotation.WebServlet;@WebServlet("/ShowHeaders")public class ShowHeadersServlet extends HttpServlet{ public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException{response.setContentType("text/html;charset=UTF-8");PrintWriter out = response.getWriter();out.println("<html><body>");out.println("<head><title>请求头信息</title></head>");out.println("服务器收到的请求头信息<p>");out.println(request.getMethod()+" "+request.getRequestURI()+" "+request.getQueryString()+" "+request.getProtocol()+"<br>");Enumeration<String> headers = request.getHeaderNames();while(headers.hasMoreElements()){String header = (String) headers.nextElement();String value = request.getHeader(header);out.println(header+" = "+value+"<br>");}out.println("</body></html>");}}程序2.5 LoginServlet.javapackage com.demo;import java.io.*;import javax.servlet.*;import javax.servlet.http.*;import javax.servlet.annotation.WebServlet;@WebServlet(name="LoginServlet",urlPatterns={"/login.do"}) public class LoginServlet extends HttpServlet {public void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException { String username = request.getParameter("username");String password = request.getParameter("password");// 用户名和口令均为admin,认为登录成功if(username.equals("admin")&&password.equals("admin")){ request.setAttribute("username", username);RequestDispatcher rd =request.getRequestDispatcher("/welcome.jsp");rd.forward(request, response);}else{RequestDispatcher rd =request.getRequestDispatcher("/login.jsp");rd.forward(request, response);}}}程序2.6 welcome.jsp<html><body><h4>Your are welcome!</h4>${username}</body></html>程序2.7 questions.jsp<%@ page contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><html><head><title>简单测试</title></head><body><p>请回答下面的问题:</p><form action="simpletest.do" method="post"><p> 1. Sun公司于2010年被Oracle公司收购。
javaweb程序设计任务教程第二版

JavaWeb程序设计任务教程第二版本教程旨在向初学者介绍JavaWeb程序设计的基本知识和技巧。
通过本教程,您将学习如何设计和开发简单但功能强大的JavaWeb应用程序。
目录1.介绍2.准备工作3.创建基本的JavaWeb项目4.建立数据库连接5.设计页面6.处理用户输入与输出7.实现业务逻辑8.部署与测试介绍随着互联网的快速发展,JavaWeb应用程序的需求也越来越大。
JavaWeb程序设计是一项非常重要的技能,对于想要成为合格开发员的人来说,掌握这一技术是必不可少的。
本教程将带您逐步了解JavaWeb程序设计的基础知识和相应的操作技巧。
无论您是新手还是有一定编程经验的人,本教程都将为您提供足够的指导,使您能够轻松掌握JavaWeb程序设计的核心概念和技术。
准备工作在开始本教程之前,您需要具备以下基本知识和工具:•Java编程基础知识•Java开发环境(如Eclipse、IntelliJ IDEA等)•Tomcat服务器•MySQL数据库如果您尚未安装所需的软件,请先下载并安装它们。
创建基本的JavaWeb项目在开始编写JavaWeb应用程序之前,您需要创建一个基本的JavaWeb项目。
按照以下步骤进行:1.打开您选择的Java开发环境(如Eclipse)并创建一个新的JavaWeb项目。
2.选择项目的名称和位置,然后点击“确定”按钮。
3.在新建的项目中,您将看到一些默认的目录和文件,如src、WebContent等。
4.接下来,您可以开始编写您的JavaWeb应用程序。
建立数据库连接在编写JavaWeb应用程序时,我们通常需要与数据库进行交互。
在本节中,我们将学习如何建立与MySQL数据库的连接。
1.首先,您需要下载并安装MySQL数据库。
2.在您的JavaWeb项目中,创建一个新的Java类,用于处理数据库连接。
3.在这个类中,使用JDBC连接MySQL数据库。
您需要提供数据库的URL、用户名和密码。
JavaWeb程序设计任务教程第二版

Javaweb程序设计任务教程第二版介绍本教程是针对初学者而设计的一本Javaweb程序设计任务教程第二版。
通过本教程,读者将学习如何使用Java编程语言和相关的技术开发一个完整的Javaweb应用程序。
本教程包含了从基本概念到实际项目开发的全面内容,方便读者逐步学习和掌握Javaweb开发的过程。
目录1.第一章:Javaweb基础 .1 HTTP协议基础 .2 Servlet入门 .3 JSP入门 .4 MVC模式介绍2.第二章:数据库操作 .1 MySQL数据库入门 .2 JDBC基础 .3 ORM框架介绍 .4 数据库连接池配置3.第三章:Javaweb开发进阶 .1 Javaweb框架介绍 .2Maven项目管理工具 .3 Spring框架入门 .4 SpringMVC框架入门 .5 搭建Javaweb开发环境4.第四章:项目实战 .1 项目需求分析 .2 项目架构设计 .3 前端页面开发 .4 后端功能开发 .5 项目测试与部署5.第五章:Javaweb安全与优化 .1 Javaweb安全防护 .2 性能优化技巧 .3 Javaweb项目部署与维护第一章:Javaweb基础1.1 HTTP协议基础HTTP协议是Javaweb开发的基础,本节将介绍HTTP协议的基本概念和运作原理。
1.1.1 HTTP协议概述HTTP(Hypertext Transfer Protocol)是一种用于传输超文本的应用层协议,采用TCP作为传输协议。
它是Web的基础,通过HTTP协议,Web浏览器与Web服务器之间可以进行通信和数据传输。
1.1.2 HTTP请求与响应HTTP协议通过客户端发送请求到服务器,并获得服务器的响应来实现通信。
本节将介绍HTTP请求和响应的结构和内容。
1.1.2.1 HTTP请求一个HTTP请求包含了请求行、请求头和请求体三个部分。
请求行指定了请求的方法(GET、POST等)、请求的URL和HTTP协议的版本。
基于JAVA的WEB应用开发实训教程

基于JAVA的WEB应用开发实训教程JAVA是一种常用的编程语言,广泛应用于WEB应用开发。
在实际开发中,许多开发人员会选择使用JAVA作为开发语言,因为它具有强大的功能和灵活性。
为了帮助初学者快速入门JAVAWEB应用开发,以下是一份基于JAVA的WEB应用开发实训教程。
第一部分:环境搭建在开始实际开发之前,首先需要搭建好JAVA开发环境。
步骤如下:2.配置JAVA开发环境变量。
将JDK的安装路径添加到系统的环境变量中,以便可以在命令行中直接使用JAVA命令。
第二部分:创建一个简单的WEB应用在学习JAVAWEB应用开发之前,首先创建一个简单的WEB应用,以了解整个开发过程。
步骤如下:1.创建一个新的JAVAWEB项目。
在IDE中选择新建项目,并选择JAVAWEB项目模板。
填写项目的名称和位置。
2. 配置项目的依赖。
在项目中引入必需的库文件,包括Servlet API和JSP API等。
5. 配置WEB应用的部署描述符。
在项目中创建一个web.xml文件,并配置Servlet和JSP的映射关系。
第三部分:开发一个完整的JAVAWEB应用在完成了简单的WEB应用之后,可以开始开发一个更复杂的JAVAWEB 应用。
以下是一些建议的步骤:1.设计应用的功能和架构。
确定应用需要实现的功能,并设计相应的类和数据库结构。
2.创建数据访问层。
编写数据库操作的代码,包括连接数据库、执行SQL语句等。
3.创建业务逻辑层。
编写处理业务逻辑的代码,包括用户验证、数据处理等。
4. 创建控制器层。
编写Servlet类,负责调用业务逻辑层的方法,并处理请求和响应。
5.创建视图层。
编写JSP页面,负责展示动态内容。
可以使用JSTL和EL表达式简化页面的开发。
6.测试和调试应用。
在开发过程中,及时进行测试和调试,保证应用的稳定性和可靠性。
第四部分:发布和部署应用当应用开发完成后,需要将应用发布和部署到服务器上,以供用户访问。
java web应用开发教程第二版于静实验九代码

java web应用开发教程第二版于静实验九代码Java Web应用开发教程第二版于静实验九代码在本次文章中,我们将深入探讨Java Web应用开发教程第二版中的于静实验九代码。
通过对该代码的全面评估,希望能为读者提供有价值的信息,并对这一主题有更深入的理解。
1. 实验环境准备在开始探讨于静实验九代码之前,首先需要准备好实验所需的环境。
根据教程要求,我们需要安装JDK、Tomcat、Eclipse等开发工具,确保环境能够正常运行。
接下来,我们将详细介绍如何配置这些环境,并确保能够顺利地进行后续的实验。
2. 代码结构分析于静实验九代码是基于Java Web开发的,因此在分析其代码结构时,需要考虑到Web应用的特点和架构。
我们将从Servlet、JSP、数据库交互等方面逐步展开分析,帮助读者更好地理解这一代码的设计理念和实现方式。
3. 主要功能实现于静实验九代码实现了哪些主要功能?这是我们需要重点关注的一个方面。
从用户登录、数据展示到权限控制,我们将逐一分析这些功能的实现细节,并深入探讨其中涉及到的技术和原理,帮助读者对Web 应用开发有更全面的认识。
4. 个人观点和理解在学习和探讨于静实验九代码的过程中,我深刻感受到了Java Web应用开发的魅力和复杂性。
通过深入分析这一实验的代码,我对Servlet、JSP的交互、数据库设计等方面有了更深入的理解,也更加明确了自己在Web开发中需要加强的知识点和技能。
我认为,通过不断地学习和实践,才能更好地掌握Web应用开发的核心技术,实现对于于静实验九代码以及整个Java Web应用开发教程的深刻理解。
5. 总结在本文中,我们对于于静实验九代码进行了深入的探讨和分析,希望能够为读者提供有价值的信息,并帮助他们对这一主题有更深入的理解。
通过对实验环境的准备、代码结构的分析、主要功能的实现等方面的全面评估,我相信读者能够对Java Web应用开发有更全面、深刻和灵活的理解。
《JavaWeb课件-完整版》

课程简介
1 课程目标
了解JavaWeb的基本概念与 应用场景。
2 课程内容概述
介绍JavaWeb开发环境搭建 和常用技术。
3 学习要求
具备Java编程基础和Web开发基础知识。
JavaWeb简介
1 JavaWeb的定义
2 JavaWeb的优势
JavaWeb指的是使用Java 技术进行Web开发的方式。
3 项目部署和运行
将项目部署到Tomcat服务器并进行测试运行。
JavaWeb的主要技术
1 JSP技术
Java Server Pages,用于动态生成HTML页面。
2 Servlet技术
Java Servlet,用于处理客户端请求和生成响应数据。
3 JSTL技术
JSP Standard Tag Library,简化JSP页面中的逻辑操作。
具备跨平台性、安全性和 可扩展性等优点。
3 JavaWeb的应用领域
广泛应用于企业级Web应 用和电子商务系统等领域。
JavaWeb开发环境搭建
1 开发工具选择
选择适合自己开发需求的集成开发环境 (IDE)。
2 安装和配置JDK
下载JDK并设置环境变量,确保能够正常编 译和运行Java程序。
3 安装和配置Tomcat
下载Tomcat并进行相关设置,用于部署和运 行JavaWeb应用。
4 开发环境测试
验证开发环境配置的正确性和可Hale Waihona Puke 性。JavaWeb项目结构
1 Web项目的组成部分
2 搭建项目基本结构
HTML、CSS、JavaScript、 Servlet、JSP等组成一个完 整的Web项目。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
对于我这样一个爱书、爱开源及爱Spring的人来说,每一次读市面上关于Spring的图书,都会让我对Spring有新的认识及体验,因为每一个作者都会用他所认识的方式来告诉我们什么是Spring、怎么用Spring。
由所选择的点不同,角度的不540C,因此读多了就知道Spring真正是什么。
2007年,我跟ErikChang、船长、stef等曾经打算合作写一本能“深入Spring 2”的书籍,然而由于工作的原因,却没能坚持到最后,遗憾的同时,也让我深深体会到了写作的艰辛。
2008年春节刚过,ErikChang突然告诉我,他已写完了一本关于Spring 2的书籍。
给我发了《精通Spring 2.x Java Web开发》的几章,我一口气读完,感到非常欣慰与惊叹。
欣慰的是我读到了一本真正“Spring 2”的书,惊叹的是ErikChang在几个月的时间里奇迹般地写出这么多的东西。
不管您是Spring的新手还是老手,我相信你从这本书中一定能读到以前所不了解的Spring,在应用好Spring的同时,了解他的设计原理,了解他里面的设计精华及编码艺术,这将会为您增加不少的财富。
只是能简单地应用Spring,这没意义;反复不断地深入学习Spring的源码,并把收获及心得拿出来与大家分享,这有意义。
因此,ErikChang做了一件非常有意义的事。
用心能做好一件事,执着能让我们取得成功。
祝愿每一位读者朋友工作顺利,事业成功!EasyJF 创始人 技术总监 蔡世友,第1章 开始Spring之旅自从Spring问世以来就引起了J2EE业界的关注,J2EE开发原本就是一个很复杂的领域,很多初级程序员都不敢涉足,Spring改变了这个局面,Spring出现以后迅速使J2EE开发越来越简单,某种程度上促进了软件生产力的发展,Spring已经成为众多程序员都日益青睐的开发框架,本章将带领大家开始学习Spring,主要内容如下。
●Spring源码的获取●源码内容说明●第一个Spring实例1.1 获取并查看Spring在使用Spring之前首先要获取该框架的jar包,同时Spring是一个开源项目,有兴趣的读者可以查看Spring源码,了解Spring的设计思想及源码的编写,本节带领读者一步步来获取并查看Spring源码,使读者学会独立获取Spring并在Eclipse IDE中查看Spring源码,对Spring有个概念的认识。
1.1.1 获取Spring首先到官方网站下载Spring, Spring的官方网址是/,单击download栏目,进入下载页面,如图1-1所示。
图1-1 Spring官方下载界面然后单击需要下载的Spring版本,笔者推荐尽量选择最新的版本,如当前的SpringFramework 2.0.7(到本书撰写完毕Spring最新版本已经涉及到2.5),可进入www.source 中下载Spring的源代码,如图1-2所示。
图1-2 sourceForge下载主界面备注:SourceForge是全球最大的开放源代码软件开发平台和仓库。
它集成了很多开放源代码应用程序,为软件开发提供了整套生命周期服务。
是开放源代码软件的开发者进行开发管理的集中式场所,也是源代码仓库。
通过单击SourceForge中Spring项目相应的链接,即下载Spring 2.0的整个项目源码,如图1-3所示。
图1-3 sourceForge下载界面1.1.2 Spring项目文件简介下载完成后,得到一个类似Spring-framework-2..0.7.zip的压缩包,然后解压该压缩文件,即可见到Spring的项目文件,如图1-4所示。
图1-4 Spring项目文件列表1.根目录在根目录上,主要是Spring开源项目的ant脚本文件build.xml, maven脚本maven.xml等,可以在命令行输入ant tests来运行Spring的所有测试代码,另外,还可以使用ant build及ant alljars实现在本机上根据自己的jdk重新编译Spring,并生成相关的jar包等。
在根目录上,还有Spring的发布协议说明license.txt、项目说明readme.txt、变更日志changelog.txt和注意事项notice.txt等。
2.dist目录在Spring项目的文件中,dist是已经编译打包好的发布jar, dist 中的文件结构如图1-5所示。
图1-5 Spring项目中dist目录文件列表其中spring-src.zip是Spring源码的压缩包,spring.jar是经过编译后的打包文件,spring-mock.jar是spring提供用于单元测试中模仿对象的相关类,spring-aspects.jar是spring与aspectj集成的jar 包。
resources目录是Spring项目的相关资源文件,如配置文件描述符spring-beans.dtd等。
dist中的modules目录是spring各组成部分发布jar包,因为Spring的各组成部分是完全独立的,用户可以在只选择使用Spring中的一部分功能,而不是全部的时候,直接使用相关部分jar即可,比如,只用spring mvc选择spring-webmvc.jar,要用Spring中的jdbc封装可以直接选择spring-jdbc.jar, modules中的内容如图1-6所示。
图1-6 Spring项目的modules目录列表3.docs目录docs目录是Spring项目的文档目录,里面主要包括Spring项目使用说明文档及系统API等,在Spring 2.0的项目中,包括api文档,spring mvc应用简单示例、spring参考手册和spring标签库简介等几个部分,如图1-7所示。
图1-7 spring项目docs目录列表4.mock目录mock目录是Spring用于单元测试中模仿对象的mock实现源代码,也就是spring-mock.jar中的源码。
5.Aspectj目录Aspectj目录是Spring与Aspectj集成的源代码及应用测试代码。
6.Src目录Src目录是Spring项目的全部源代码。
7.Samples目录Samples目录是Spring项目的应用程序示例源代码,主要包括一个简单的网上商店jpetstore,一个宠物医院petclinic。
另外,还简单演示一些特殊功能的countries和imagedb等。
通过这些示例程序代码,可以快速地学习到Spring的使用方法。
8.Test目录Test目录是Spring项目的单元测试代码,Spring作为测试驱动开发的推崇者,有着非常详细的单元测试用例,通过单元测试代码,可以快速地掌握Spring各个类的方法。
9.tiger目录tiger是Spring项目中使用java tiger版中的新功能及特性的源代码,包括注解等。
10.Lib目录Lib目录中包括了Spring项目用到的所有jar文件,Spring的很多功能都是在一些现存的项目上搭建起来的,另外,Spring集成了很多优秀的开源项目。
因此,要使用这些特性,必须在项目中引入相关的jar。
在Spring的lib目录中,这些jar文件分门别类地存放于lib的子目录中,如图1-8所示。
图1-8 Spring项目lib目录列表1.1.3 查看Spring源码由于Spring的功能相当强大,其源代码的数据及源代码的层次结构等都相当复杂,因此需要借助专业的Java开发工具来查看Spring的项目源码。
Spring 2.0的源代码需要在Jdk 1.5以上的版本中才能全部正常编译。
下面演示在Eclipse中如何打开Spring的源代码。
(1)在Eclipse中新建一个工程,在“新建工程”对话框中,选择“create project from existing source”,然后通过“浏览文件夹”对话框选择Spring项目的解压目录,如图1-9所示。
图1-9 查看Spring源码步骤1(2)选择好Spring项目的目录后,单击【Next】按钮,Eclipse 会加载Spring项目文件,进入项目的setting配置对话框。
在该对话框中主要检查Source(源代码目录)及Libraries(相关jar包)两个部分,分别如图1-10和图1-11所示。
图1-10 查看Spring源码步骤2(Spring项目的源码路径)图1-11 查看Spring源码步骤3(Spring项目所需要的jar库文件)(3)单击【Finish】按钮,完成项目的建立,这里即可通过Eclipse的package explorer视图面板查看Spring项目的源代码,如图1-12所示。
图1-12 查看Spring源码步骤41.2 开始使用Spring可以直接利用Spring的相关jar包,开始使用Spring。
下面演示使用Eclipse开发一个简单的Spring示例的程序。
(1)使用Eclipse的new project向导,新建一个名为spring-hello的工程,如图1-13所示。
图1-13 建立一个Java工程(2)新建一个名为Hello的类,Package设置为spring.chapter1,如图1-14所示。
图1-14 新建一个类(3)把所需要使用的Spring项目的jar文件加入到当前工程的Libraries中,本例中只使用Spring中简单的IOC功能,只需要spring-beans.jar、spring-core.jar及commons-logging.jar 3个包即可。
用鼠标右键单击工程名称,查看工程属性,选择工程属性中的Java Builder Path,然后选择Libraries选项,通过单击【add external jar】按钮把外部的jar文件添加到工程项目中,如图1-15所示。
图1-15 添加相关jar到classpath中(4)输入Hello.java的完整源代码,其中Hello这个类有一个msg 属性,有一个setMsg方法用于设置msg属性的值。
另外,直接在Hello 的main方法中使用Spring的Bean工厂来从配置文件中加载一个名为helloBean,类型为package spring.chapter1.Hello的Bean。
然后调用这个Bean的sayHello方法。
全部源代码如下所示:(5)在与Hello.java同级的目录下,建一个名为bean.xml的Spring配置文件,在这个Bean配置文件中定义helloBean,并通过依赖注入设置helloBean的msg属性值,其内容如下:完成后的工程项目如图1-16所示。