锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
Junit鏄敱 Erich Gamma 鍜?span lang="EN-US"> Kent Beck 緙栧啓鐨勪竴涓洖褰掓祴璇曟鏋訛紙regression testing framework錛夈?span lang="EN-US">Junit鏄竴濂楁鏋訛紝緇ф壙TestCase綾伙紝灝卞彲浠ョ敤Junit榪涜鑷姩嫻嬭瘯浜嗐?/p>
1 junit鐗規?span lang="EN-US">
銆銆
junit
Junit鏄竴涓紑鏀炬簮浠g爜鐨?span lang="EN-US">Java嫻嬭瘯妗嗘灦錛岀敤浜庣紪鍐欏拰榪愯鍙噸澶嶇殑嫻嬭瘯銆備粬鏄敤浜庡崟鍏冩祴璇曟鏋朵綋緋?span lang="EN-US">xUnit鐨勪竴涓疄渚嬶紙鐢ㄤ簬java璇█錛夈傚畠鍖呮嫭浠ヤ笅鐗規э細
銆銆鈶?鐢ㄤ簬嫻嬭瘯鏈熸湜緇撴灉鐨勬柇璦錛?span lang="EN-US">Assertion錛?span lang="EN-US">
銆銆鈶?鐢ㄤ簬鍏變韓鍏卞悓嫻嬭瘯鏁版嵁鐨勬祴璇曞伐鍏?span lang="EN-US">
銆銆鈶?鐢ㄤ簬鏂逛究鐨勭粍緇囧拰榪愯嫻嬭瘯鐨勬祴璇曞浠?span lang="EN-US">
鈶?鍥懼艦鍜屾枃鏈殑嫻嬭瘯榪愯鍣?span lang="EN-US">
鍙沖嚮瑕佷嬌鐢ㄧ殑junit鐨勯」鐩紝鐐瑰嚮properties鈥攋ava bulid path-libraries錛岀偣鍑?span lang="EN-US">Add External JARs,鍔犱笂JUNIT鍖呫?span lang="EN-US">
3 鐢ㄦ硶
- 鍒涘緩錛屼粠junit.framework.TestCase媧劇敓nuit test闇瑕佺殑test case.
- 涔﹀啓嫻嬭瘯鏂規硶
- 緙栬瘧 涔﹀啓鐜?span lang="EN-US">test case鍚庯紝緙栬瘧鎵鍐欑殑test case綾?span lang="EN-US">
- 榪愯錛屽惎鍔?span lang="EN-US">junit test runnner 鏉ヨ繍琛岃繖涓?span lang="EN-US">test case銆?span lang="EN-US">
瀹炰緥浠g爜錛?span lang="EN-US">
package com.dr.test;
import java.util.List;
import junit.framework.TestCase;
import com.dr.dao.StudentDao;
import com.dr.dao.impl.StudentDaoImpl;
import com.dr.vo.Student;
public class StudentDaoImplTest extends TestCase{
StudentDao dao;
protected void setUp() throws Exception{
dao=new StudentDaoImpl();
}
protected void tearDown() throws Exception{
}
public void testAdd(){
Student stu=new Student();
stu.setName("ling");
stu.setAge(1);
stu.setEmail("ling@126.com");
dao.addStudent(stu);
}
public void testListStudent(){
List<Student> list=dao.getStudentList();
System.out.println(list.size());
}
}
Junit涓殑涓や釜鍑芥暟錛?span lang="EN-US">setUp涓?span lang="EN-US">tearDown,鏄?span lang="EN-US">junit framework涓彁渚涘垵濮嬪寲閲戦鍙嶅垵濮嬪寲姣忎釜嫻嬭瘯鏂規硶鐨勩?span lang="EN-US">setUp鍦ㄦ瘡涓祴璇曟柟娉曡皟鐢ㄥ墠琚皟鐢紝璐熻矗鍒濆鍖栨祴璇曟柟娉曟墍闇瑕佺殑嫻嬭瘯鐜錛?span lang="EN-US">teardown鍦ㄦ瘡涓祴璇曟柟娉曡璋冪敤涔嬪悗琚皟鐢紝璐熻矗鎾ら攢嫻嬭瘯鐜銆?span lang="EN-US">
嫻嬭瘯緇撴灉錛?br />
鍦?/span>JUnit鐨勭獥鍙d腑鏄劇ず浜嗕竴涓豢鏉★紝緇挎潯璇佹槑嫻嬭瘯鎴愬姛銆?/span>
ServletContextListener鐩戝惉ServletContext銆傚綋鍒涘緩ServletContext鏃訛紝嬋鍙?/span> contextInitialized(ServletContextEvent sce)鏂規硶錛涘綋閿姣?/span>ServletContext鏃訛紝嬋鍙?/span>contextDestroyed(ServletContextEvent sce)鏂規硶銆?/span>
ServletContextAttributeListener鐩戝惉瀵?/span>ServletContext灞炴х殑鎿嶄綔錛屾瘮濡傚鍔犮佸垹闄ゃ佷慨鏀瑰睘鎬с?/span>
HttpSessionListener鐩戝惉HttpSession鐨勬搷浣溿傚綋鍒涘緩涓涓?/span>Session鏃訛紝嬋鍙?/span>session Created(HttpSessionEvent se)鏂規硶錛涘綋閿姣佷竴涓?/span>Session鏃訛紝嬋鍙?/span>sessionDestroyed (HttpSessionEvent se)鏂規硶銆?/span>
HttpSessionAttributeListener鐩戝惉HttpSession涓殑灞炴х殑鎿嶄綔銆傚綋鍦?/span>Session澧炲姞涓涓睘鎬ф椂錛屾縺鍙?/span> attributeAdded(HttpSessionBindingEvent se) 鏂規硶錛涘綋鍦?/span>Session鍒犻櫎涓涓睘鎬ф椂錛屾縺鍙?/span>attributeRemoved(HttpSessionBindingEvent se)鏂規硶錛涘綋鍦?/span>Session灞炴ц閲嶆柊璁劇疆鏃訛紝嬋鍙?/span>attributeReplaced(HttpSessionBindingEvent se) 鏂規硶銆?/span>
涓嬮潰鎴戜滑寮鍙戜竴涓叿浣撶殑渚嬪瓙錛岃繖涓洃鍚櫒鑳藉緇熻鍦ㄧ嚎鐨勪漢鏁般?br />
紼嬪簭婧愪唬鐮侊細
package com.dr.web.listener;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
publicclass UserCountListener implements ServletContextListener,
HttpSessionListener {
//姣忎釜web搴旂敤閮芥湁涓斾粎鏈変竴涓?/span>ServletContext瀵硅薄錛岃繖涓璞″湪鎵鏈夌殑Servlet閮藉彲浠ヤ嬌鐢ㄣ?/span>
/**
* 鍥犱負涓涓?/span>web搴旂敤灝變竴涓?/span>ServletContext 瀵硅薄錛屽洜姝ゅ彲浠ヤ嬌鐢?/span>ServletContext 鏉ュ仛涓浜涘叏灞鎬х殑灞炴ц緗瓑銆?/span>
* 姣斿緗戠珯璁塊棶璁℃暟鍣ㄧ瓑絳?/span>
*
*
* ServletContext 鏄竴涓簲鐢ㄧ▼搴忎笌Web瀹瑰櫒(tomcat涔嬬被)浜や簰鐨勬帴鍙?/span>,鍚屾椂瀹冧篃鏄鐞嗗簲鐢ㄧ▼搴忚祫婧愮殑瀵硅薄錛?/span>
閫氳繃瀹冨彲浠ヨ鍙?/span>web.xml涓竴浜涢厤緗紝濡?/span><context-param>涓殑淇℃伅錛岃鍙栧簲鐢ㄤ腑鐨勮祫婧愮瓑銆?/span>
Session 鏄竴涓細璇濆璞★紝涔熷氨鏄褰撳鎴風璁塊棶鏈嶅姟鍣ㄩ〉闈㈡椂錛屽畠鎵嶄駭鐢燂紝
鍘熺悊鏄湇鍔″櫒瀵規瘡涓鎴風浜х敓涓涓?/span>sessionid鍊?/span>,騫舵妸瀹冧篃淇濆瓨鍦ㄥ鎴風錛?/span>
姣忔璇鋒眰鏃墮獙璇佽繖涓?/span>sessionid鏄惁鏄垱寤轟簡sessionid鐨勫鎴風錛屽湪鏈嶅姟鍣ㄧ瀵瑰簲榪欎釜sessionid浼氬垱寤轟竴涓紦瀛樺尯錛?/span>
瀛樺偍涓浜涚浉鍏充俊鎭?/span>,紼嬪簭鍛樺彲浠ユ搷浣滐紝濡傝鐢ㄤ簬璐墿杞︼紝瀛樺偍鐢ㄦ埛淇℃伅絳夛紝榪欎釜鍖哄煙鍙湁瀵圭壒瀹氱敤鎴鋒湁璁塊棶鏉冮檺錛屽鍏朵粬瀹㈡埛鏄嫆緇濊闂殑錛岃繖灝辨槸涓涓細璇濄?/span>
Request 鏄竴涓姹傚璞★紝涔熷氨鏄瀹冪殑鐢熷懡寰堢煭鏆傦紝鍙湪涓涓姹備腑瀛樺湪錛屽涓涓〉闈㈠埌鍙︿竴涓〉闈紝
涓涓〉闈㈠埌servlet鎴?/span>action,涓涓?/span>servlet鎴?/span>action鍒?/span>jsp欏甸潰絳?/span>,浣犲彲浠ョ敤瀹冪殑setAttribute鏂規硶浼犻掗渶瑕佺殑淇℃伅(瀵硅薄),楠岃瘉璇鋒眰鏂圭殑淇℃伅,鑾峰緱璇鋒眰鏂瑰彂榪囨潵鐨勬枃浠跺唴瀹圭瓑銆?/span>
*/
private ServletContext sc;
publicvoid contextDestroyed(ServletContextEvent arg0) {
}
publicvoid contextInitialized(ServletContextEvent event) {
ServletContext sc = event.getServletContext();
sc.setAttribute("Users", new Integer(0));
this.sc = sc;
}
publicvoid sessionCreated(HttpSessionEvent event) {//鍦ㄧ嚎
System.out.println("new user login our web site");
Integer users = (Integer)sc.getAttribute("Users");
sc.setAttribute("Users", ++users);
}
publicvoid sessionDestroyed(HttpSessionEvent event) {
Integer users = (Integer)sc.getAttribute("Users");
sc.setAttribute("Users", --users);
}
}
Web.xml涓厤緗涓嬶細
<listener>
<listener-class>com.dr.web.listener.UserCountListener</listener-class>
</listener>
鍦?/span>UserCountListener閲岋紝鐢?/span>users浠h〃褰撳墠鍦ㄧ嚎鐨勪漢鏁幫紝UserCountListener灝嗗湪Web鏈嶅姟鍣ㄥ惎鍔ㄦ椂鑷姩鎵ц銆傚綋UserCountListener鏋勯犲ソ鍚庯紝鎶?/span>users璁劇疆涓?/span> 0銆傛瘡澧炲姞涓涓?/span>Session錛?/span>UserCountListener浼氳嚜鍔ㄨ皟鐢?/span>sessionCreated(HttpSessionEvent event)鏂規硶錛涙瘡閿姣佷竴涓?/span>Session錛?/span>UserCountListener浼氳嚜鍔ㄨ皟鐢?/span> sessionDestroyed(HttpSessionEvent se)鏂規硶銆傚綋璋冪敤sessionCreated(HttpSessionEvent event)鏂規硶鏃訛紝璇存槑鍙堟湁涓涓鎴峰湪璇鋒眰錛屾鏃朵嬌鍦ㄧ嚎鐨勪漢鏁幫紙users錛夊姞1錛屽茍涓旀妸user鍐欏埌ServletContext涓?/span> ServletContext鐨勪俊鎭槸鎵鏈夊鎴風鍏變韓鐨勶紝榪欐牱錛屾瘡涓鎴風閮藉彲浠ヨ鍙栧埌褰撳墠鍦ㄧ嚎鐨勪漢鏁般?/span>
榪愯緇撴灉錛?br />
榪囨護鍣ㄤ唬鐮侊細
package com.dr.course;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import com.dr.common.Global;
import com.dr.vo.User;
public class IsLoginFilter implements Filter {
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain filterChain) throws IOException, ServletException {
System.out.println("every request pass here");
HttpServletRequest hrequest=(HttpServletRequest)request;
HttpSession session=hrequest.getSession();
User user = (User)session.getAttribute(Global.USER);
if(user == null){
//璺寵漿鍒扮櫥闄嗛〉闈?/span>
hrequest.getRequestDispatcher("/index.jsp").forward(request,response);
}
filterChain.doFilter(request, response);
}
public void init(FilterConfig filterConfig) throws ServletException {
}
}
LoginServlet綾伙紝榪涜鐧誨綍涔嬪悗鐨勫鐞嗭細
package com.dr.course;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.dr.common.Global;
import com.dr.vo.User;
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");
System.out.println("userName | " + userName);
System.out.println("passWord | " + passWord);
User user = new User();
user.setUserName(userName);
user.setPassWord(passWord);
HttpSession session = request.getSession();
//鐧誨綍鎴愬姛錛屾妸User鏀懼埌session錛岀劧鍚庡湪鎷︽埅鍣ㄤ腑鍒ゆ柇
//key--value
session.setAttribute(Global.USER, user);
request.getRequestDispatcher("/admin/main.jsp").forward(request, response);
}
}
web.xml涓厤緗涓嬶細
- <filter>
<filter-name>isLogin</filter-name>
<filter-class>com.dr.course.IsLoginFilter</filter-class>
</filter>
- <filter-mapping>
<filter-name>isLogin</filter-name>
<url-pattern>/admin/*</url-pattern>
</filter-mapping>
- <servlet>
<servlet-name>login</servlet-name>
<servlet-class>com.dr.course.LoginServlet</servlet-class>
</servlet>
- <servlet-mapping>
<servlet-name>login</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
鏈櫥褰曠晫闈細
鎴愬姛鐧誨綍鐨勭晫闈細
鎴戜滑鍦ㄧ櫥褰?/span>126閭鏃訛紝濡傛灉鍕鵑変笂涓ゅ懆鍐呰嚜鍔ㄧ櫥褰曪紝涓ゅ懆鍐呬笉鐢ㄨ緭鍏ョ敤鎴峰悕鍜屽瘑鐮侀偖綆變細鑷姩鐧誨綍錛岃繖鏄洜涓虹涓嬈$櫥褰曟椂鏈嶅姟鍣ㄥ皢鐢ㄦ埛鍚嶅拰瀵嗙爜鍐欏叆cookie涓紝騫惰繑鍥炵粰瀹㈡埛绔?/span>
涓嬫鐧誨綍鏃?/span>Http鍗忚浼氬甫鐫鐢ㄦ埛鐨?/span>cookie鍘繪湇鍔″櫒楠岃瘉錛屽洜涓烘湇鍔″櫒宸茬粡瀛樺偍鐢ㄦ埛鐨勪俊鎭紝鎵浠ヤ細鑷姩鐧誨綍銆?/span>
鐧誨綍浠g爜錛?/span>
package com.dr.course;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LoginServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String username=request.getParameter("username");
String password=request.getParameter("password");
String savetime=request.getParameter("saveTime");
if(CheckLogin.login(username, password)){
if(null!=savetime){
int saveTime=Integer.parseInt(savetime);//榪欓噷鎺ュ彈鐨勮〃鍗曞間負澶╂潵璁$畻鐨?/span>
int seconds=saveTime*24*60*60;
Cookie cookie = new Cookie("user", username+"=="+password);
cookie.setMaxAge(seconds);
response.addCookie(cookie);
}
request.setAttribute("username",username);
request.getRequestDispatcher("/main126.jsp").forward(request,response);
}else{
request.getRequestDispatcher("/failure.jsp").forward(request,response);
}
}
}
楠岃瘉浠g爜錛?/span>
package com.dr.course;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class IndexFilter implements Filter {
public void destroy() {
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
System.out.println("every request pass here haha");
HttpServletRequest request = (HttpServletRequest) arg0;
HttpServletResponse response = (HttpServletResponse) arg1;
Cookie[] cookies = request.getCookies();
String[] cooks = null;
String username = null;
String password = null;
if (cookies != null) {
for (Cookie coo : cookies) {
String aa = coo.getValue();
cooks = aa.split("==");
if (cooks.length == 2) {
username = cooks[0];
password = cooks[1];
}
}
}
System.out.println("cookie username | " + username);
System.out.println("cookie password | " + password);
if (CheckLogin.login(username, password)) {
System.err.println("check successfully cookie data ");
request.getSession().setAttribute("username",username);
request.getRequestDispatcher("/main126.jsp").forward(request, response);
}else{
arg2.doFilter(request,response );
}
}
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
package com.dr.course;
public class CheckLogin {
public static boolean login(String username, String password) {
if ("admin".equals(username) && "123456".equals(password)) {
return true;
} else {
return false;
}
}
}
web.xml涓厤緗涓嬶細
- <filter>
<filter-name>loginFilter</filter-name>
<filter-class>com.dr.course.IndexFilter</filter-class>
</filter>
- <filter-mapping>
<filter-name>loginFilter</filter-name>
<url-pattern>/main126.jsp</url-pattern>
</filter-mapping>
- <servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>com.dr.course.LoginServlet</servlet-class>
</servlet>
- <servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/login.do</url-pattern>
</servlet-mapping>
灝嗙洰褰曞姞鍏ュ埌Tomcat涓紝寮鍚?/span>Tomcat錛屾墦寮嫻忚鍣ㄨ緭鍏ョ綉鍧:http://127.0.0.1:8080/AutoLogin/login.do榪涜嫻嬭瘯銆?/span>
涓洪槻姝腑鏂囦貢鐮佸嚭鐜幫紝棣栧厛鎴戜滑瑕佹妸欏圭洰涓瘡涓綉欏電殑緙栫爜褰㈠紡鏀規垚涓枃鐨勶紝HTML緗戦〉涓殑charset鏀規垚UTF-8錛?/span>JSP緗戦〉涓殑pageEncoding鏀規垚UTF-8銆?/span>
鐒跺悗鎴戜滑鍋氫竴涓繃婊ゅ櫒錛屾瘡嬈″緗戦〉鐨勮姹傞兘浼氳繘鍏ュ埌榪囨護鍣紝騫朵笖鎶?/span>request鍜?/span>response閮芥敼鎴?/span>UTF-8緙栫爜褰㈠紡錛岃繖鏍烽槻姝簡涓枃涔辯爜鐨勫嚭鐜般?/span>
婧愪唬鐮佸涓嬶細
package com.dr.servletform;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.jsp.jstl.core.Config;
public class MyFilter implements Filter{
String encoding="";
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
System.out.println("pass here-------");
request.setCharacterEncoding(encoding);
response.setCharacterEncoding(encoding);
chain.doFilter(request, response);
}
public void init(FilterConfig config) throws ServletException {
String encoding=config.getInitParameter("encoding");
this.encoding=encoding;
System.out.println(encoding);
}
}
web.xml涓厤緗涓嬶細
<filter>
<filter-name>MyFilter</filter-name>
<filter-class>com.dr.servletform.MyFilter</filter-class>
- <init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
- <filter-mapping>
<filter-name>MyFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
JDBC緙栫▼姝ラ錛?/span>
鍔犺澆鏁版嵁搴撻┍鍔紙jar 鏂囦歡錛?/span>
鑾峰緱鏁版嵁搴撹繛鎺?/span>
鍒涘緩璇彞 (SQL)
鎵ц鏌ヨ
閬嶅巻緇撴灉闆?/span>
鍏抽棴鏁版嵁搴撹繛鎺?/span>
紺轟緥灝忕▼搴忥細
package com.dr.jdbc;
/**
* DriverManager 椹卞姩紼嬪簭綆$悊鍣?/span> 鍦ㄦ暟鎹簱鍜岀浉搴旈┍鍔ㄧ▼搴忎箣闂村緩绔嬭繛鎺?/span>
* Connection 瀵硅薄浠h〃涓庢暟鎹簱鐨勮繛鎺ワ紝涔熷氨鏄湪宸茬粡鍔犺澆鐨?/span>Driver鍜屾暟鎹簱涔嬮棿寤虹珛榪炴帴
* Statement 鎻愪緵鍦ㄥ熀灞傝繛鎺ヤ笂榪愯SQL璇彞錛屽茍涓旇闂粨鏋?/span>
* ResultSet 鍦?/span>Statement鎵цSQL璇彞鏃訛紝鏈夋椂浼氳繑鍥?/span>ResultSet緇撴灉闆嗭紝鍖呭惈鐨勬槸鏌ヨ鐨勭粨鏋滈泦
*/
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Test {
public static void main(String[] args) {
query();
}
public static void query(){
Connection conn = null;
try {
//1.鍔犺澆鏁版嵁搴撻┍鍔?/span>
Class.forName("com.mysql.jdbc.Driver");
//2.鑾峰緱鏁版嵁搴撹繛鎺?/span>
//DriverManager 椹卞姩紼嬪簭綆$悊鍣?/span> 鍦ㄦ暟鎹簱鍜岀浉搴旈┍鍔ㄧ▼搴忎箣闂村緩绔嬭繛
conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/jdbc_db", "root", "1234");
//3.鍒涘緩璇彞
String sql = "select * from UserTbl";
//榪斿洖涓涓墽琛?/span>SQL鐨勫彞鏌?/span>
Statement stmt = conn.createStatement();
//榪斿洖鏌ヨ鐨?/span>
//4.鎵ц璇彞
ResultSet rs = stmt.executeQuery(sql);
//5.閬嶅巻緇撴灉闆?/span>
while(rs.next()){
int id = rs.getInt(1);
String username = rs.getString(2);
String password = rs.getString(3);
int age = rs.getInt(4);
System.out.println(id+":"+username+":"+password+":"+age);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
if(conn!=null){
try { //鍏抽棴鏁版嵁搴撹繛鎺?/span>
conn.close();
} catch (SQLException e) {
conn = null;
e.printStackTrace();
}
}
}
}
}
package com.dr.Demo01;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerSocket01 {
public static void main(String[] args) {
ServerSocket server=null;
try{
//鏈嶅姟鍣ㄥ湪9999绔彛寮杈熶簡鏈嶅姟
server=new ServerSocket(9999);
}catch(Exception e){}
//瀵逛簬鏈嶅姟鍣ㄨ岃█錛屾墍鏈夌敤鎴風殑璇鋒眰閮芥槸閫氳繃SeverSocket瀹炵幇
Socket client=null;
try{
//鏈嶅姟鍣ㄥ湪姝ょ瓑寰呯敤鎴風殑閾炬帴
System.out.println("絳夊緟瀹㈡埛绔摼鎺ャ併併?);
client=server.accept();//鏈嶅姟绔帴鏀跺埌涓涓猚lient
}catch(Exception e){}
//瑕佸悜瀹㈡埛绔墦鍗頒俊鎭?br />
PrintStream out=null;
//寰楀埌鍚戝鎴風杈撳嚭淇℃伅鐨勮兘鍔?br />
try{
out=new PrintStream(client.getOutputStream());
}catch(Exception e){}
out.println("Hi,how do you do?");
try{
client.close();
server.close();
}catch(Exception e){}
System.out.println("瀹㈡埛绔洖搴斿畬姣曘併併?);
}
}
package com.dr.Demo01;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.Socket;
public class ClientSocket01 {
public static void main(String[] args) {
Socket client=null;
try{
//瀹為檯涓婅〃紺鴻閾炬帴鍒版湇鍔″櫒涓婂幓浜?br />
client=new Socket("192.168.1.23",9999);
}catch(Exception e){}
//絳夊緟鏈嶅姟鍣ㄧ鐨勫洖搴?br />
String str=null;
//濡傛灉鐩存帴浣跨敤InputStream鎺ュ彈浼氭瘮杈冮夯鐑?br />
//鏈濂界殑鏂規硶鏄彲浠ユ妸鍐呭鏀懼叆鍙戝摝緙撳啿嫻佷箣涓繘琛岃鍙?br />
BufferedReader buf=null;
try{
buf=new BufferedReader(new InputStreamReader(client.getInputStream()));
str=buf.readLine();
}catch(Exception e){}
System.out.println(str);
}
}
紼嬪簭鏈変袱縐嶄互澶栭渶瑕佽冭檻錛?/span>
1銆?span style="font: 7pt 'Times New Roman'">
鍋囪Benz綰跨▼鍒氬悜鏁版嵁瀛樺偍絀洪棿娣誨姞浜嗕竴杈嗚濺鐨勫悕瀛椼傝繕娌℃湁鍔犲叆榪欒締杞︾殑棰滆壊錛?/span>CPU灝卞垏鎹㈠埌浜?/span>BMW綰跨▼錛?/span>Benz綰跨▼灝嗘妸榪欒締杞︾殑鍚嶅瓧鍜屼笂杈嗚濺鐨勯鑹茶仈緋誨埌浜嗕竴璧楓?/span>2銆?span style="font: 7pt 'Times New Roman'">
Benz鏀句簡鑻ュ共嬈$殑鏁版嵁銆?/span>BMW鎵嶅紑濮嬪彇鏁版嵁錛屾垨鑰呮槸錛?/span>BMW鍙栧畬浜嗕竴涓暟鎹悗錛岃繕娌$瓑鍒?/span>Benz鏀懼叆鏂扮殑鏁版嵁錛屽張閲嶅鍙栧嚭宸插彇榪囩殑鏁版嵁銆?/span>鍙兘鍑虹幇鐨勯棶棰橈細
1銆?span style="font: 7pt 'Times New Roman'">
Benz姣?/span>BMW蹇椂錛?/span>BMW浼氭紡鎺変竴浜涙暟鎹病鏈夊彇鍒般?/span>2銆?span style="font: 7pt 'Times New Roman'">
BMW姣?/span>Benz蹇椂錛?/span>BMW鍙栫浉鍚岀殑鏁版嵁銆?/span>澶氫釜綰跨▼鍏變韓鍚屼竴璧勬簮鐨勬椂鍊欙紝蹇呴』榪涜鍚屾錛岄噰鐢ㄥ悓姝ユ柟娉曪紝瑙e喅絎竴涓棶棰樸?/span>
綰跨▼鐨勭瓑寰呭拰鍞ら啋鏈哄埗錛?/span>
wait()錛氬憡璇夊綋鍓嶇嚎紼嬫斁寮冪洃瑙嗗櫒騫惰繘鍏ョ潯鐪犵姸鎬侊紝鐩村埌鍏朵粬綰跨▼榪涘叆鍚屼竴鐩戣鍣ㄥ茍璋冪敤notify涓烘銆?/span>
notify()錛氬敜閱掑悓涓瀵硅薄鐩戣鍣ㄤ腑璋冪敤wait鐨勭涓涓嚎紼嬨?/span>
紼嬪簭涓噰鐢ㄧ嚎紼嬬殑絳夊緟鍜屽敜閱掓満鍒訛紝褰撳彂鐜?/span>BMW娌℃湁鍙栬蛋鍐呭鏃訛紝Benz搴旇絳夊緟錛屽綋BMW鎶婂唴瀹瑰彇璧頒箣鍚庯紝Benz鎵嶅彲浠ユ斁銆傝繖鏍瘋В鍐充簡絎簩涓棶棰樸?/span>
浠g爜濡備笅錛?/span>
package com.dr.test;
class Car{
private String name="濂旈┌";
private String color="閾惰壊";
private boolean flag=false;
public synchronized void set(String name,String color){
//濡傛灉flag鐨勫間笉鏄?/span>true鍒欒絳夊緟
if(!flag){
//絳夊緟
try{
wait();
}catch(Exception e){}
}
//濡傛灉鍚戜笅緇х畫鎵ц浜嗭紝鍒欒〃紺哄彲浠ヨ緗紝flag=true
this.name=name;
this.color=color;
flag=false;
notify();
}
public synchronized void get(){
//濡傛灉flag鐨勫間負true鐨勬椂鍊欙紝琛ㄧず瑕佺瓑寰?/span>
if(flag){
try{
wait();
}catch(Exception e){}
}
//濡傛灉鍚戜笅鎵ц浜嗭紝鍒欒〃紺哄厑璁稿彇鍑?/span>
System.out.println(this.name+"-->"+this.color);
//鏀瑰彉鏍囧織錛岃〃紺哄彲浠ョ敓浜т簡
flag=true;
notify();
}
}
class Benz implements Runnable{
Car car=null;
public Benz(Car c){
this.car=c;
}
public void run(){
int i=0;
while(true){
if(i==0){
car.set("瀹濋┈", "綰㈣壊");
i=1;
}
else{
car.set("濂旈┌", "閾惰壊");
i=0;
}
}
}
}
class BMW implements Runnable{
Car car=null;
public BMW(Car c){
this.car=c;
}
public void run(){
while(true){
car.get();
}
}
}
public class Demo01 {
public static void main(String[] args) {
Car c=new Car();
Benz benz=new Benz(c);
BMW bmw=new BMW(c);
new Thread(benz).start();
new Thread(bmw).start();
}
}
榪愯緇撴灉錛?br />
1 閫氳繃緇ф壙Thread綾繪潵瀹炵幇銆?/span>
姣忎釜綰跨▼閮芥槸閫氳繃鏌愪釜鐗瑰畾Thread瀵硅薄鎵瀵瑰簲鐨勬柟娉?/span>run()l鏉ュ畬鎴愬叾鎿嶄綔鐨勶紝鏂規硶run()鎴愪負綰跨▼浣撱?/span>
濡傛灉鎯寵鍚姩澶氱嚎紼嬶紝鍒欒偗瀹氳皟鐢?/span>start()鏂規硶錛?/span>start鏂規硶鍙互璋冪敤琚瓙綾昏鍐欒繃鐨?/span>run鏂規硶
涓嶈繃榪欑榪欑瀹炵幇鏂瑰紡浼氬彈鍒板崟緇ф壙鐨勫眬闄?/span>
紺轟緥浠g爜錛?/span>
package com.dr.demo01;
//涓涓被鍙緇ф壙浜?/span>Thread綾伙紝鍒欐綾誨氨鏄綰跨▼綾?/span>
class MyThread extends Thread{
private String name;
public MyThread(String name){
this.name=name;
}
//濡傛灉瑕佷嬌鐢ㄥ綰跨▼錛屽垯蹇呴』鏈変竴涓柟娉曠殑涓諱綋
public void run(){
//鎵撳嵃杈撳嚭
for(int i=0;i<15;i++){
System.out.println(this.name+"--->鍦ㄨ繍琛屻併併?/span>");
}
}
}
public class ThreadDemo01{
public static void main(String args[]){
MyThread mt1=new MyThread("綰跨▼A");
MyThread mt2=new MyThread("綰跨▼B");
MyThread mt3=new MyThread("綰跨▼C");
mt1.run();
mt2.run();
mt3.run();
}
}
2 閫氳繃瀹炵幇Runnable鎺ュ彛鏉ュ疄鐜般?/span>
璇ュ疄鐜版柟寮忔湁浠ヤ笅濂藉錛?/span>
鈶?span style="font: 7pt 'Times New Roman'">
閫傚悎澶氫釜鐩稿共鍚岀▼搴忎唬鐮佺殑綰跨▼鍘誨鐞嗗悓涓璧勬簮鐨勬儏鍐點?/span>鈶?span style="font: 7pt 'Times New Roman'">
鍙互閬垮厤鐢變簬Java鍗曠戶鎵跨壒鎬у甫鏉ョ殑灞闄愩?/span>鈶?span style="font: 7pt 'Times New Roman'">
鏈夊埄浜庣▼搴忕殑鍋ュ.鎬э紝浠g爜鑳藉琚涓嚎紼嬪叡浜?/span>紺轟緥浠g爜錛?/span>
package com.dr.Demo05;
class MyThread implements Runnable{
public void run(){
for(int i=0;i<100;i++){
try{
Thread.sleep(1000);
}catch(Exception e){}
System.out.println(Thread.currentThread().getName()+"--榪愯涓?/span>--");
}
}
}
public class Demo05 {
public static void main(String[] args) {
MyThread mt=new MyThread();
Thread t1=new Thread(mt,"綰跨▼A");
Thread t2=new Thread(mt,"綰跨▼B");
Thread t3=new Thread(mt,"綰跨▼C");
t1.start();
t2.start();
t3.start();
}
}