Jsp的学习算是告一段落,针对这段时间的学习,写了一个Jsp小项目来巩固学到的知识。

  框架示意图

User list process

UserAdd process

  需要的界面效果:

  需要工具:Eclipse、TomCat v8.0和PL/SQL

  先用PL/SQL创建一个用户c##cms,并创建一个cms_user表单

  

  首先,需要写一个JSP——add界面

  1. <%@ page language="java" contentType="text/html; charset=utf-8"
  2. pageEncoding="utf-8"%>
  3.  
  4. <%
  5. String path = request.getContextPath();
  6. String basePath = request.getScheme() + "://"
  7. + request.getServerName() + ":" + request.getServerPort()
  8. + path + "/";
  9. %>
  10.  
  11. <html>
  12. <head>
  13. <base href="<%=basePath%>" />
  14. <title>用户添加</title>
  15. <link rel="stylesheet" type="text/css" title="xp"
  16. href="css/skins/xp/validator/component.css" />
  17. <link rel="stylesheet" type="text/css" title="xp"
  18. href="css/skins/xp/navbar/nav.css" />
  19. <link rel="stylesheet" type="text/css" title="xp"
  20. href="css/skins/xp/table/skin.css" />
  21. <link rel="stylesheet" type="text/css" title="xp"
  22. href="css/skins/xp/time/skin.css" />
  23. <script type="text/javascript" src="jscript/time/calendar.js"></script>
  24. <script type="text/javascript" src="jscript/time/calendar-zh.js"></script>
  25. <script type="text/javascript" src="jscript/time/calendar-setup.js"></script>
  26. <script type="text/javascript" src="jscript/common.js"></script>
  27. <script type="text/javascript" src="jscript/validator/form_validator.js" /></script>
  28.  
  29. <style type="text/css">
  30. body, table, td, select, textarea, input {
  31. font-family: Verdana, Arial, Helvetica, sans-serif;
  32. font-size: 11px;
  33. }
  34. </style>
  35. </head>
  36. <body>
  37. <div id="main">
  38.  
  39. <form name="backuserform" method="post" action="admin/UserAddServlet"
  40. onSubmit='return submitForm(document.forms[0]);'>
  41. <table class="standard">
  42. <thead>
  43. <tr>
  44. <th align="center" colspan="">用户添加</th>
  45. </tr>
  46. </thead>
  47. <tbody>
  48. <tr>
  49. <td align="left">用户名</td>
  50. <td align="left"><input name="name" type="text" TABINDEX=""
  51. id="name" />
  52. <div class="Info">
  53. <div id="name_info"></div>
  54. </div></td>
  55. </tr>
  56. <tr>
  57. <td align="left">用户密码</td>
  58. <td align="left"><input name="password" type="password"
  59. value="" TABINDEX="" id="password" />
  60. <div class="Info">
  61. <div id="password_info"></div>
  62. </div></td>
  63. </tr>
  64.  
  65. <tr>
  66. <td align="left">角色</td>
  67. <td align="left"><select name="role" TABINDEX="" id="role">
  68. <option value="">超级管理员</option>
  69. </select>
  70.  
  71. <div class="Info">
  72. <div id="role_info"></div>
  73. </div></td>
  74. </tr>
  75.  
  76. <tr>
  77. <td align="left">是否有效</td>
  78. <td align="left"><select name="valid" TABINDEX="" id="valid">
  79. <option value="">有效</option>
  80. <option value="">无效</option>
  81. </select>
  82. <div class="Info">
  83. <div id="valid_info"></div>
  84. </div></td>
  85. </tr>
  86. <tr>
  87. <td align="left">EMAIL</td>
  88. <td align="left"><input name="email" type="text" value=""
  89. TABINDEX="" id="email" />
  90. <div class="Info">
  91. <div id="email_info"></div>
  92. </div></td>
  93. </tr>
  94.  
  95. <tr>
  96. <td align="left">电话</td>
  97. <td align="left"><input name="phone" type="text" value=""
  98. TABINDEX="" id="phone" />
  99. <div class="Info">
  100. <div id="phone_info"></div>
  101. </div></td>
  102. </tr>
  103.  
  104. <tr>
  105. <td colspan="" align="center"><input class="submitButton"
  106. type="submit" TABINDEX="" name="submit" value="提&nbsp;交">
  107. <input type="button" name="返回" class="submitButton" value="返回"
  108. onclick="history.back();"></td>
  109. </tr>
  110.  
  111. </tbody>
  112. <tfoot>
  113. <tr>
  114. <td colspan="" style="text-align: left"></td>
  115.  
  116. </tr>
  117. </tfoot>
  118. </table>
  119. </form>
  120. </div>
  121. </body>
  122. </html>

本页面接收的数据打包封装并发送到UserServlet

  1. package com.jaovo.jcms.user;
  2.  
  3. import java.io.IOException;
  4. import java.sql.Timestamp;
  5. import java.util.Date;
  6.  
  7. import javax.servlet.ServletException;
  8. import javax.servlet.ServletRequest;
  9. import javax.servlet.ServletResponse;
  10. import javax.servlet.http.HttpServlet;
  11.  
  12. import com.jaovo.jcms.service.UserService;
  13.  
  14. public class UserAddServlet extends HttpServlet{
  15.  
  16. public UserAddServlet() {
  17. super();
  18. }
  19.  
  20. @Override
  21. public void service(ServletRequest request, ServletResponse response)
  22. throws ServletException, IOException {
  23. //获取 客户端(浏览器)提交的数据
  24. String name = request.getParameter("name");
  25. String password = request.getParameter("password");
  26. String valid = request.getParameter("valid");
  27. String email = request.getParameter("email");
  28. String phone = request.getParameter("phone");
  29.  
  30. //把数据封装到User对象里面去
  31. User user = new User();
  32. user.setName(name);
  33. user.setEmail(email);
  34. user.setPassword(password);
  35. user.setPhone(phone);
  36. user.setTime_stamp(new Timestamp(new Date().getTime()));//获取系统当前时间,当做注册时间
  37.  
  38. //这里要进行插入数据库
  39. UserService us = new UserService();
  40. us.addUser(user);
  41.  
  42. this.getServletContext()
  43. .getRequestDispatcher("/admin/user_list.jsp")
  44. .forward(request, response);
  45. }
  46. }

UserServlet接收到之后,还需要一个实体类,来封装数据,创建User实体类:

  1. package com.jaovo.jcms.user;
  2.  
  3. import java.util.Date;
  4.  
  5. public class User {
  6. private String name;
  7. private String password;
  8. private int valid;
  9. private String email;
  10. private String phone;
  11. private Date time_stamp;
  12. private int id;
  13. //private String role;
  14.  
  15. public String getName() {
  16. return name;
  17. }
  18. public void setName(String name) {
  19. this.name = name;
  20. }
  21. public String getPassword() {
  22. return password;
  23. }
  24. public void setPassword(String password) {
  25. this.password = password;
  26. }
  27. public int getValid() {
  28. return valid;
  29. }
  30. public void setValid(int valid) {
  31. this.valid = valid;
  32. }
  33. public String getEmail() {
  34. return email;
  35. }
  36. public void setEmail(String email) {
  37. this.email = email;
  38. }
  39. public String getPhone() {
  40. return phone;
  41. }
  42. public void setPhone(String phone) {
  43. this.phone = phone;
  44. }
  45. public Date getTime_stamp() {
  46. return time_stamp;
  47. }
  48. public void setTime_stamp(Date time_stamp) {
  49. this.time_stamp = time_stamp;
  50. }
  51. public int getId() {
  52. return id;
  53. }
  54. public void setId(int id) {
  55. this.id = id;
  56. }
  57. public User() {
  58. super();
  59. // TODO Auto-generated constructor stub
  60. }
  61. public User(String name, String password, int valid, String email,
  62. String phone, Date time_stamp, int id) {
  63. super();
  64. this.name = name;
  65. this.password = password;
  66. this.valid = valid;
  67. this.email = email;
  68. this.phone = phone;
  69. this.time_stamp = time_stamp;
  70. this.id = id;
  71. }
  72. @Override
  73. public String toString() {
  74. return "User [name=" + name + ", password=" + password + ", valid="
  75. + valid + ", email=" + email + ", phone=" + phone
  76. + ", time_stamp=" + time_stamp + ", id=" + id + "]";
  77. }
  78. }

调用UserService方法写入数据库(注: 真正连接数据库的方法另外写在一个工具类中,以方便后面优化):

  1. package com.jaovo.jcms.service;
  2.  
  3. import java.sql.Connection;
  4. import java.sql.PreparedStatement;
  5. import java.sql.ResultSet;
  6. import java.sql.SQLException;
  7. import java.sql.Timestamp;
  8. import java.util.ArrayList;
  9. import java.util.Date;
  10.  
  11. import com.jaovo.jcms.user.User;
  12. import com.jaovo.jcms.util.DB;
  13.  
  14. //服务:是为了往数据库中操作(添加)来创建一个层
  15. public class UserService {
  16. //---------------用户添加的方法
  17. public void addUser(User user) {
  18. Connection conn = DB.getConnection();//-------已经把事务提交给关闭了
  19. PreparedStatement pstmt = null;
  20. String sql = "insert into cms_user(name,password,valid,email,phone,time_stamp) values(?,?,?,?,?,?)";
  21. try {
  22. pstmt = conn.prepareStatement(sql);
  23. pstmt.setString(, user.getName());
  24. pstmt.setString(, user.getPassword());
  25. pstmt.setInt(, user.getValid());
  26. pstmt.setString(, user.getEmail());
  27. pstmt.setString(, user.getPhone());
  28. pstmt.setTimestamp(, new Timestamp(new Date().getTime()));
  29. //执行到数据库
  30. pstmt.executeUpdate();
  31. DB.commit(conn);
  32. } catch (SQLException e) {
  33. DB.rollback(conn);//回滚 其实一条语句失败了不需要回滚
  34. e.printStackTrace();
  35. }finally{
  36. DB.close(pstmt);
  37. DB.close(conn);
  38. }
  39. }
  40.  
  41. //用户的查询方法
  42. public ArrayList getUser(String name){
  43. String sql = "select name,password,valid,time_stamp,email,phone,id from cms_user where name like ?";
  44. Connection conn = DB.getConnection();
  45. PreparedStatement pstmt = null;
  46. ResultSet rs = null;
  47.  
  48. ArrayList<User> list = new ArrayList<User>();
  49.  
  50. try {
  51. pstmt = conn.prepareStatement(sql);
  52. pstmt.setString(, "%"+name+"%");
  53. rs = pstmt.executeQuery();
  54.  
  55. while (rs.next()) {
  56. User user = new User();
  57. user.setName(rs.getString());
  58. user.setPassword(rs.getString());
  59. user.setValid(rs.getInt());
  60. user.setTime_stamp(rs.getTimestamp());
  61. user.setEmail(rs.getString());
  62. user.setPhone(rs.getString());
  63. user.setId(rs.getInt());//------返回数据库,查看序列
  64.  
  65. list.add(user);
  66. }
  67. } catch (SQLException e) {
  68. DB.rollback(conn);
  69. e.printStackTrace();
  70. }finally{
  71. DB.close(rs);
  72. DB.close(pstmt);
  73. DB.commit(conn);
  74. DB.close(conn);
  75. }
  76. return list;
  77. }
  78. }

真正连接数据库的工具类,DB类:

  1. package com.jaovo.jcms.util;
  2.  
  3. import java.sql.Connection;
  4. import java.sql.DriverManager;
  5. import java.sql.PreparedStatement;
  6. import java.sql.ResultSet;
  7. import java.sql.SQLException;
  8.  
  9. //DB.java 是一个Jdbc链接类
  10. /*
  11. * 只是一个工具类
  12. */
  13. public class DB {
  14. //用来获取数据库链接
  15. public static Connection getConnection() {
  16. Connection conn = null;
  17. try {
  18. Class.forName("oracle.jdbc.driver.OracleDriver");
  19. conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl","c##cms","cms");
  20. //-------------------
  21. //事务提交为false
  22. conn.setAutoCommit(false);
  23. } catch (SQLException | ClassNotFoundException e) {
  24. e.printStackTrace();
  25. }
  26. return conn;
  27. }
  28.  
  29. //关闭语句对象
  30. public static void close(PreparedStatement pstmt){
  31. try {
  32. if (pstmt != null) {
  33. pstmt.close();
  34. }
  35. } catch (SQLException e) {
  36. System.out.println("关闭异常-语句对象DB---------");
  37. e.printStackTrace();
  38. }
  39. }
  40. //关闭返回集
  41. public static void close(ResultSet rs) {
  42. try {
  43. if (rs != null) {
  44. rs.close();
  45. }
  46. } catch (SQLException e) {
  47. System.out.println("关闭异常-返回集DB-----------");
  48. e.printStackTrace();
  49. }
  50. }
  51.  
  52. //关闭链接
  53. public static void close(Connection conn) {
  54. try {
  55. if (conn != null) {
  56. conn.close();
  57. }
  58. } catch (SQLException e) {
  59. System.out.println("关闭异常-资源DB-----------");
  60. e.printStackTrace();
  61. }
  62. }
  63.  
  64. //事务回滚的方法
  65. public static void rollback(Connection conn) {
  66. try {
  67. conn.rollback();
  68. } catch (SQLException e) {
  69. e.printStackTrace();
  70. }
  71. }
  72.  
  73. //设置手动提交方法
  74. public static void commit(Connection conn) {
  75. if (conn != null) {
  76. try {
  77. conn.commit();
  78. } catch (SQLException e) {
  79. e.printStackTrace();
  80. }
  81. }
  82. }
  83. }

需要配置xml文件:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  3. <display-name>JCMS</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>userAddServlet</servlet-name>
  14. <servlet-class>com.jaovo.jcms.user.UserAddServlet</servlet-class>
  15. </servlet>
  16. <servlet-mapping>
  17. <servlet-name>userAddServlet</servlet-name>
  18. <url-pattern>/admin/userAddServlet</url-pattern>
  19. </servlet-mapping>
  20.  
  21. <servlet>
  22. <servlet-name>userListServlet</servlet-name>
  23. <servlet-class>com.jaovo.jcms.user.UserListServlet</servlet-class>
  24. </servlet>
  25. <servlet-mapping>
  26. <servlet-name>userListServlet</servlet-name>
  27. <url-pattern>/admin/userListServlet</url-pattern>
  28. </servlet-mapping>
  29. </web-app>

回到正题,在上面UserServlet里面的,数据封装之后返回user_list.jsp,这个界面负责遍历显示数据库中的用户并提供更改,删除功能(暂未实现,下个版本实现)

  1. <%@page import="java.util.ArrayList"%>
  2. <%@ page language="java" contentType="text/html; charset=utf-8"
  3. pageEncoding="utf-8"%>
  4. <%@ page import="java.util.*" %>
  5. <%@ page import="com.jaovo.jcms.user.User" %>
  6. <%
  7. String path = request.getContextPath();
  8. String basePath = request.getScheme() + "://"
  9. + request.getServerName() + ":" + request.getServerPort()
  10. + path + "/";
  11. %>
  12. <html>
  13. <base href="<%=basePath%>" />
  14. <head>
  15. <title>backuser</title>
  16. <style type="text/css">
  17. body,table,td,select,textarea,input {
  18. font-family: Verdana, Arial, Helvetica, sans-serif;
  19. font-size: 11px;
  20. }
  21. </style>
  22. <link rel="stylesheet" type="text/css" title="xp"
  23. href="css/skins/xp/validator/component.css" />
  24. <link rel="stylesheet" type="text/css" title="xp"
  25. href="css/skins/xp/navbar/nav.css" />
  26. <link rel="stylesheet" type="text/css" title="xp"
  27. href="css/skins/xp/table/skin.css" />
  28. <link rel="stylesheet" type="text/css" title="xp"
  29. href="css/skins/xp/time/skin.css" />
  30.  
  31. <script type="text/javascript">
  32.  
  33. function turn(frm,oper,totalpage,curpage,msg){
  34.  
  35. if(oper=='first'){
  36.  
  37. if(curpage==){
  38. return;
  39. }
  40. frm.pagenum.value = ;
  41. frm.submit();
  42. return;
  43. }else if(oper=='prev'){
  44. if(curpage==){
  45. return;
  46. }
  47. frm.pagenum.value = (curpage-);
  48. frm.submit();
  49. return;
  50. }else if(oper=='next'){
  51. if(curpage>=totalpage){
  52. return;
  53. }
  54. frm.pagenum.value = (curpage+);
  55. frm.submit();
  56. return;
  57. }else if(oper=='last'){
  58. if(curpage>=totalpage){
  59. return;
  60. }
  61. frm.pagenum.value = totalpage;
  62. frm.submit();
  63. return;
  64. }else if(oper=='jump'){
  65. var jpage = document.getElementById("jumpto");
  66. var jpagev = curpage;
  67. if(jpage.value==""||!(jpage.value.search(/^(-|\+)?\d+$/) != -)){
  68. alert(msg);
  69. jpage.focus();
  70. jpage.select();
  71. return;
  72. }else{
  73. jpagev = parseInt(jpage.value);
  74. }
  75. if(jpagev==curpage||jpagev>totalpage||jpagev<=){
  76. return;
  77. }
  78. frm.pagenum.value = jpagev;
  79. frm.submit();
  80. return;
  81. }
  82. }
  83.  
  84. </script>
  85.  
  86. </head>
  87. <%
  88. ArrayList userList = (ArrayList)request.getAttribute("userList");
  89. if(userList == null){
  90. userList = new ArrayList();
  91. }
  92. %>
  93.  
  94. <body>
  95. <div id="main">
  96. <form name="sportform" method="post"
  97. action="admin/userListServlet">
  98. <table class="sadminheading" style="top-margin: 10">
  99. <tr>
  100. <td nowrap class="admintitle" colspan="" align="center">
  101. 用户列表
  102. </td>
  103. </tr>
  104.  
  105. <tr>
  106. <td align="left" width="10%">
  107. 用户名:
  108. </td>
  109. <td align="left" width="40%">
  110. <input name="name" type="text" />
  111. </td>
  112. <td align="right">
  113. <input type="submit" name="提交" value="提交"/>&nbsp;&nbsp;&nbsp;
  114. <input type="hidden" name="pagenum" value="" />
  115. <input type="hidden" name="pagerows" value="" />
  116. </td>
  117. </tr>
  118.  
  119. </table>
  120. </form>
  121. <table class="standard">
  122. <thead>
  123. <tr>
  124. <th>
  125. id
  126. </th>
  127. <th>
  128. 用户名
  129. </th>
  130. <th>
  131. 用户密码
  132. </th>
  133. <th>
  134. 角色
  135. </th>
  136. <th>
  137. email
  138. </th>
  139. <th>
  140. 是否有效
  141. </th>
  142. <th>
  143. &nbsp;
  144. </th>
  145.  
  146. </tr>
  147. </thead>
  148. <tbody>
  149. <!-- 循环遍历出每个用户的信息 -->
  150. <%
  151. for(Iterator i = userList.iterator();i.hasNext();){
  152. User user = (User)i.next();
  153. %>
  154. <tr>
  155. <td>
  156. <%=user.getId() %>
  157. </td>
  158. <td>
  159. <%=user.getName() %>
  160. </td>
  161. <td>
  162. <%=user.getPassword() %>
  163. </td>
  164. <td>
  165. --Null--
  166. </td>
  167. <td>
  168. <%=user.getEmail() %>
  169. </td>
  170. <td>
  171. <%=user.getValid() %>
  172. </td>
  173.  
  174. <td>
  175. <a href='#' onclick="location.href='user_update.html';">修改</a>
  176. <a href='#'
  177. onclick="if(confirm('delete')) location.href='user_list.html?id=1';">删除</a>
  178. </td>
  179.  
  180. </tr>
  181. <%
  182. }
  183. %>
  184. <!-- 循环结束 -->
  185. <tr>
  186. <td colspan="">
  187. No data found
  188. </td>
  189. </tr>
  190.  
  191. </tbody>
  192. <tfoot>
  193. <tr>
  194. <td colspan="" style="text-align: left">
  195. / total rows
  196. </td>
  197. <td colspan="" align="right">
  198. <a href="#"
  199. onclick="turn(document.forms[0],'first',5,1,'jump page');">first</a>
  200. <a href="#"
  201. onclick="turn(document.forms[0],'prev', 5,1,'jump page');">prev</a>
  202.  
  203. <a href="#"
  204. onclick="turn(document.forms[0],'next',5,1,'jump page');">next</a>
  205. <a href="#"
  206. onclick="turn(document.forms[0],'last',5,1,'jump page');">last</a>
  207.  
  208. go
  209. <input type="text" name="cpage" size="" id="jumpto" />
  210. <a href="#"
  211. onclick="turn(document.forms[0],'jump',5,1,'jump page');">go</a>
  212. </td>
  213. </tr>
  214. </tfoot>
  215. </table>
  216. </div>
  217. </body>
  218. </html>

真正遍历显示数据在userListServlet:

  1. package com.jaovo.jcms.user;
  2.  
  3. import java.io.IOException;
  4. import java.util.ArrayList;
  5.  
  6. import javax.servlet.ServletException;
  7. import javax.servlet.http.HttpServlet;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpServletResponse;
  10.  
  11. import com.jaovo.jcms.service.UserService;
  12.  
  13. public class UserListServlet extends HttpServlet{
  14. @Override
  15. protected void service(HttpServletRequest request, HttpServletResponse response)
  16. throws ServletException, IOException {
  17. String name = request.getParameter("name");
  18. UserService us = new UserService();
  19. //---------调用它里面的查询方法-----------
  20. ArrayList<User> userList = us.getUser(name);
  21. //---------设置到request对象里面去
  22. request.setAttribute("userList", userList);
  23. this.getServletContext().getRequestDispatcher("/admin/user_list.jsp").forward(request, response);//-------------跳转回去
  24. }
  25. }

遍历出数据,携带数据跳转回到list界面,这就算初步完成了。

效果图:

创建一个用户之后查看当前所有用户:

做一个勤劳的码农

Web前端开发:SQL Jsp小项目(一)的更多相关文章

  1. Web前端开发中的小错误

    Web前端开发中的小错误 错误1:表单的label标签跟表单字段没有关联 利用“for”属性允许用户单击label也可以选中表单中的内容.这可以扩大复选框和单选框的点击区域,非常实用. 错误2:log ...

  2. Web前端开发:SQL Jsp小项目(二)------添加修改

    沿着昨天整理好的页面,今天实现list页面中的修改, User update框架 需要的效果图: 先看用户查询界面, 修改id为4的那个用户: 修改后返回用户查看界面. 1 .先是从list界面开始, ...

  3. 大三小学期 web前端开发的一些小经验

    1.html是页面的布局设计,就是页面上要放哪些东西,比如登录界面需要按钮,输入框等等:css是被用于使用设计部件和布局,例如哪些部件放在哪里,多宽多大,是否有边框等:js/jQuery是用于实现函数 ...

  4. 妙味WEB前端开发全套视频教程+项目实战+移动端开发(99G)

    一共99GB的视频教程,全部存于百度网盘中,13个栏目,每个栏目里还划分有独立的小栏目 最基本的web前端学习介绍,到项目实战,再到移动端的开发,真正彻底掌握前端开发的精髓: 视频教程在线预览:(百度 ...

  5. Web前端开发最佳实践(7):使用合理的技术方案来构建小图标

    大家都对网站上使用的小图标肯定都不陌生,这些小图标作为网站内容的点缀,增加了网站的美观度,提高了用户体验,可是你有没有看过在这些网站中使用的图标都是用什么技术实现的?虽然大部分网站还是使用普通的图片实 ...

  6. 4. web前端开发分享-css,js工具篇

    web前端开发乃及其它的相关开发,推荐sublime text, webstorm(jetbrains公司系列产品)这两个的原因在于,有个技术叫emmet, http://docs.emmet.io, ...

  7. Web前端开发工程师养成计划【转载】

    Web前端开发工程师养成计划(入门篇) 最原始的忠告:这个世界上有想法的人很多,但是有想法又能实现它的人太少! 首先要感谢伟大的Web2.0概念.产品概念.用户体验概念.jQuery插件,是它们在中国 ...

  8. web前端开发分享-css,js工具篇

    web前端开发乃及其它的相关开发,推荐sublime text, webstorm(jetbrains公司系列产品)这两个的原因在于,有个技术叫emmet, http://docs.emmet.io, ...

  9. web前端开发和后端开发有什么区别?

    web前端分为网页设计师.网页美工.web前端开发工程师 首先网页设计师是对网页的架构.色彩以及网站的整体页面代码负责 网页美工只针对UI这块儿的东西,比如网站是否做的漂亮 web前端开发工程师是负责 ...

随机推荐

  1. 【不积跬步,无以致千里】AMQP协议介绍

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  2. ADO.NET 快速入门(五):从 DataSet 更新数据库

    该主题说明了如何使用 DataSet 在数据库中更新数据.你依然可以直接使用 SqlCommand 在数据库中插入.更新.和删除数据,记住这一点也很重要.理解“从数据库填充DataSet”涵盖的概念有 ...

  3. UVa657 The die is cast

    // 题意:给一个图案,其中'.'表示背景,非'.'字符组成的连通块为筛子.每个筛子里又包含两种字符,其中'X'组成的连通块表示筛子上的点 // 统计每个筛子里有多少个"X"连通块 ...

  4. sublime自定义snippet代码片段

    相信很多人喜欢sublime编辑工具有两个原因:第一sublime很轻巧方便:第二sublime提供很多自定义拓展功能,包括很简单且和很好用的代码片段功能snippet文件. 今天,在这里就介绍下su ...

  5. struts2源代码学习之初始化(一)

    看struts2源代码已有一段时日,从今天開始,就做一个总结吧. 首先,先看看怎么调试struts2源代码吧,主要是下面步骤: 使用Myeclipse创建一个webproject 导入struts2须 ...

  6. 算法入门系列一--DP初步

    数字三角形(数塔问题) 其实动态规划本身并不是一个特定的算法,是一种用途广泛的问题求解方法,一种思想,一种手段. 1.1问题描述与状态定义 有一个有非负整数组成的三角形,第一行一个数字,下面各行除了最 ...

  7. [Angular 2] Start with Angular2

    Create a index.html: <!DOCTYPE html> <html> <head> <title>Really Understandi ...

  8. 【ZZ】编程能力层次模型

    http://blog.csdn.net/shendl/article/details/43835421 前言 程序员的编程技能随着经验的积累,会逐步提高.我认为编程能力可以分为一些层次. 下面通过两 ...

  9. 网络IPC:套接字之套接字描述符

    套接字是通信端点的抽象.与应用程序要使用文件描述符访问文件一样,访问套接字也需要套接字描述符.套接字描述符在UNIX系统是用文件描述符实现的.事实上,许多处理文件描述符的函数(如read和write) ...

  10. Recommended you 3 most popular Nissan pincode calculators

    Have you still felt confused on how to choose a satisfactory Nissan pin code calculator in the marke ...