zoukankan      html  css  js  c++  java
  • 软件工程概论 网站系统开发需要掌握技术及登录判断

    1.网站系统开发需要掌握的技术

    一、界面和用户体验(Interface and User Experience)

    1.1 知道如何在基本不影响用户使用的情况下升级网站。通常来说,你必须有版本控制系统(CVS、Subversion、Git等等)和数据备份机制(backup)。

    1.2 除了浏览器,网站还有其他使用方式:手机、屏幕朗读器、搜索引擎等等。你应该知道在这些情况下,你的网站的运行状况。MobiForge提供了手机网站开发的一些相关知识。

    二、安全性(Security)

    2.1 不要明文(plain-text)储存用户的密码,要hash处理后再储存。

    2.2 确认你的数据库连接信息的安全性。

    、性能(Performance)

    3.1 只要有可能,就使用缓存(caching)。正确理解和使用HTTP cachingHTML5离线储存

    3.2 学习如何用gzip/deflate压缩内容(deflate方式更可取)。

    3.3 浏览Yahoo的Exceptional Performance网站,里面有大量提升前端性能的优秀建议,还有他们的YSlow工具。Google的page speed则是另一个用来分析网页性能的工具。两者都要求安装Firebug

    3.4 如果你的网页用到大量的小体积图片(比如工具栏),就应该使用CSS Image Sprite,目的是减少http请求数。

    3.5 大流量的网站应该考虑将网页对象分散在多个域名(split components across domains)。

    3.6 静态内容(比如图片、CSS、JavaScript、以及其他cookie无关的网页内容)都应该放在一个不需要使用cookie的独立域名之上。因为域名之下如果有cookie,那么客户端向该域名发出的每次http请求,都会附上cookie内容。这里的一个好方法就是使用"内容分发网络"(Content Delivery Network,CDN)。

    3.7 确保网站根目录下有favicon.ico文件,因为即使网页中根本不包括这个文件,浏览器也会自动发出对它的请求。所以如果这个文件不存在,就会产生大量的404错误,消耗光你的服务器的带宽。

    四、搜索引擎优化(Search Engine Optimization,SEO)

    4.1知道robots.txt的作用,以及搜索引擎蜘蛛的工作原理。

    4.2使用Google的Webmaster Tools和Yahoo的Site Explorer

    4.3知道存在着恶意或行为不正当的网络蜘蛛。

    4.4如果你的网站有非文本的内容(比如视频、音频等等),你应该参考Google的sitemap扩展协议

    五、技术(Technology)

    5.1 理解HTTP协议,以及诸如GET、POST、sessions、cookies之类的概念,包括"无状态"(stateless)是什么意思。

    5.2 确保你的XHTML/HTMLCSS符合W3C标准,使得它们能够通过检验。这可以使你的网页避免触发浏览器的古怪行为(quirk),而且使它在"屏幕朗读器"和手机上也能正常工作。

    5.3 理解浏览器如何处理JavaScript脚本。

    5.4 理解网页上的JavaScript文件、样式表文件和其他资源是如何装载及运行的,考虑它们对页面性能有何影响。在某些情况下,可能应该将脚本文件放置在网页的尾部

    5.5 理解JavaScript沙箱(Javascript sandbox)的工作原理,尤其是如果你打算使用iframe。

    5.6 知道JavaScript可能无法使用或被禁用,以及Ajax并不是一定会运行。记住,"不允许脚本运行"(NoScript)正在某些用户中变得流行,手机浏览器对脚本的支持千差万别,而Google索引网页时不运行大部分的脚本文件。

    5.7 了解301重定向和302重定向之间的区别(这也是一个SEO相关问题)。

    5.8 考虑使用样式表重置(Reset Style Sheet)。

    5.9 考虑使用JavaScript框架(比如jQueryMooToolsPrototype),它们可以使你不用考虑浏览器之间的差异。

     

    六、解决bug

    6.1 理解程序员20%的时间用于编码,80%的时间用于维护,根据这一点相应安排时间。

    6.2 建立一个有效的错误报告机制。

    6.3 建立某些途径或系统,让用户可以与你接触,向你提出建议和批评。

    6.4 为将来的维护和客服人员撰写文档,解释清楚系统是怎么运行的。

    6.5 经常备份!(并且确保这些备份是有效的。)除了备份机制,你还必须有一个恢复机制。

    6.6 使用某种版本控制系统储存你的文件,比如SubversionGit

    6.7 不要忘记做单元测试(Unit Testing),Selenium之类的框架会对你有用。

    2.课堂测试登录界面代码

    IUserDao.java

    package com.jaovo.msg.dao;
    import java.util.List;
    import com.jaovo.msg.model.User;
    public interface IUserDao
    {
      public void add(User user);
      public void delete(int id);
      public void update(User user);
      public User load(int id);
      public User load(String name);
      public List<User> load();
    }

    UserDaoImpl.java

    package com.jaovo.msg.dao;

    import java.util.List;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.ArrayList;
    import com.jaovo.msg.Util.DBUtil;
    import com.jaovo.msg.Util.UserException;
    import com.jaovo.msg.model.User;

    public class UserDaoImpl implements IUserDao {

    @Override
    public void add(User user) {
      Connection connection=DBUtil.getConnection();
      String sql="select count(*) from t_user where username=?";
      PreparedStatement preparedStatement=null;
      ResultSet resultSet=null;
      try {
        preparedStatement=connection.prepareStatement(sql);
        preparedStatement.setString(1, user.getUsername());
        resultSet=preparedStatement.executeQuery();
        while(resultSet.next())
        {
          if(resultSet.getInt(1)>0)
          {
            throw new UserException("用户已存在");
          }
        }
        sql="insert into t_user(username,password,nickname) value (?,?,?)";
        preparedStatement=connection.prepareStatement(sql);
        preparedStatement.setString(1, user.getUsername());
        preparedStatement.setString(2, user.getPassword());
        preparedStatement.setString(3, user.getNickname());
        preparedStatement.executeUpdate();
      } catch (SQLException e) {
      // TODO 自动生成的 catch 块
      e.printStackTrace();
      }finally
      {
      DBUtil.close(resultSet);
      DBUtil.close(preparedStatement);
      DBUtil.close(connection);
      }

    }

    @Override
      public void delete(int id) {
      Connection connection=DBUtil.getConnection();
      String sql="delete from t_user where id=?";
      PreparedStatement preparedStatement=null;
      try {
        preparedStatement=connection.prepareStatement(sql);
        preparedStatement.setInt(1,id);
        preparedStatement.executeUpdate();
        } catch (SQLException e) {
        // TODO 自动生成的 catch 块
        e.printStackTrace();
        }finally
        {
          DBUtil.close(preparedStatement);
          DBUtil.close(connection);
        }

    }

      @Override
      public void update(User user) {
      Connection connection=DBUtil.getConnection();
      String sql="update t_user set password=?,nickname=? where id=?";
      PreparedStatement preparedStatement=null;
      try {
        preparedStatement=connection.prepareStatement(sql);
        preparedStatement.setString(1, user.getPassword());
        preparedStatement.setString(2, user.getNickname());
        preparedStatement.setInt(3, user.getId());
        preparedStatement.executeUpdate();
        } catch (SQLException e) {
        // TODO 自动生成的 catch 块
        e.printStackTrace();
        }
        finally
        {
          DBUtil.close(preparedStatement);
          DBUtil.close(connection);
        }

    }

      @Override
      public User load(int id) {
      Connection connection = DBUtil.getConnection();
      //准备sql语句
      String sql = "select * from t_user where id = ?";
      //创建语句传输对象
      PreparedStatement preparedStatement = null;
      ResultSet resultSet = null;
      User user = null;
      try {
        preparedStatement = connection.prepareStatement(sql);
        preparedStatement.setInt(1, id);
        resultSet = preparedStatement.executeQuery();
        while(resultSet.next()) {
        user = new User();
        user.setId(id);
        user.setUsername(resultSet.getString("username"));
        user.setPassword(resultSet.getString("password"));
        user.setNickname(resultSet.getString("nickname"));
        }
       } catch (SQLException e) {
      // TODO Auto-generated catch block
        e.printStackTrace();
        }finally {
        DBUtil.close(resultSet);
        DBUtil.close(preparedStatement);
        DBUtil.close(connection);
        }
        return user;
    }

       @Override
      public User load(String username) {
      Connection connection = DBUtil.getConnection();
      //准备sql语句
      String sql = "select * from t_user where username = ?";
      //创建语句传输对象
      PreparedStatement preparedStatement = null;
      ResultSet resultSet = null;
      User user = null;
      try {
        preparedStatement = connection.prepareStatement(sql);
        preparedStatement.setString(1, username);
        resultSet = preparedStatement.executeQuery();
        while(resultSet.next()) {
        user = new User();
        user.setId(resultSet.getInt("id"));
        user.setUsername(username);
        user.setPassword(resultSet.getString("password"));
        user.setNickname(resultSet.getString("nickname"));
        }
       } catch (SQLException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      }finally {
      DBUtil.close(resultSet);
      DBUtil.close(preparedStatement);
      DBUtil.close(connection);
      }
      return user;
    }

      @Override
      public List<User> load() {
      Connection connection=DBUtil.getConnection();
      String sql="selete * from t_user ";
      PreparedStatement preparedStatement=null;
      ResultSet resultSet=null;
      List<User> users=new ArrayList<User>();
      User user=null;
      try {
        preparedStatement=connection.prepareStatement(sql);
        resultSet=preparedStatement.executeQuery();
        while(resultSet.next())
        {
          user=new User();
          user.setId(resultSet.getInt("id"));
          user.setUsername(resultSet.getString("username"));
          user.setUsername(resultSet.getString("password"));
          user.setUsername(resultSet.getString("nickname"));
          users.add(user);
        }
       } catch (SQLException e) {
        // TODO 自动生成的 catch 块
      e.printStackTrace();
      }
      finally
      {
        DBUtil.close(resultSet);
        DBUtil.close(preparedStatement);
        DBUtil.close(connection);
      }
      return users;
      }

    }

    User.java

      package com.jaovo.msg.model;

      public class User {
      private int id;
      private String username;
      private String nickname;
      private String password;
      public int getId() {
      return id;
      }
      public void setId(int id) {
      this.id = id;
      }
      public String getUsername() {
      return username;
      }
      public void setUsername(String username) {
      this.username = username;
      }
      public String getNickname() {
      return nickname;
      }
      public void setNickname(String nickname) {
      this.nickname = nickname;
      }
      public String getPassword() {
      return password;
      }
      public void setPassword(String password) {
      this.password = password;
      }

    }

     DBUtil.java

      package com.jaovo.msg.model;

      public class User {
      private int id;
      private String username;
      private String nickname;
      private String password;
      public int getId() {
      return id;
      }
      public void setId(int id) {
      this.id = id;
      }
      public String getUsername() {
      return username;
      }
      public void setUsername(String username) {
      this.username = username;
      }
      public String getNickname() {
      return nickname;
      }
      public void setNickname(String nickname) {
      this.nickname = nickname;
      }
      public String getPassword() {
      return password;
      }
      public void setPassword(String password) {
      this.password = password;
      }

    }

     UserException.java

      public class UserException extends RuntimeException{

      public UserException() {
      super();
      // TODO 自动生成的构造函数存根
      }

      public UserException(String arg0, Throwable arg1, boolean arg2, boolean arg3) {
      super(arg0, arg1, arg2, arg3);
      // TODO 自动生成的构造函数存根
      }

      public UserException(String arg0, Throwable arg1) {
      super(arg0, arg1);
      // TODO 自动生成的构造函数存根
      }

      public UserException(String arg0) {
      super(arg0);
      // TODO 自动生成的构造函数存根
      }

      public UserException(Throwable arg0) {
      super(arg0);
      // TODO 自动生成的构造函数存根
      }


    }

    add.jsp

    <%@page import="com.jaovo.msg.Util.UserException"%>
    <%@page import="com.jaovo.msg.dao.UserDaoImpl"%>
    <%@page import="com.jaovo.msg.model.User"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <%
    //接收客户端传递过来的参数
      String username = request.getParameter("username");
      String password = request.getParameter("password");
      String nickname = request.getParameter("nickname");
      if(username == null || "".equals(username.trim())){
        request.setAttribute("error", "用户名不能为空");


    %>
      <jsp:forward page="addInput.jsp"></jsp:forward>
    <%
    }
      User user = new User();
      user.setUsername(username);
      user.setPassword(password);
      user.setNickname(nickname);

      UserDaoImpl userDao = new UserDaoImpl();
      try{
      userDao.add(user);
    %>


    用户保存成功!!<br>
      <a href="addInput.jsp">继续添加</a><br>
      <a href="#">用户列表</a>
      <%
      }catch(UserException e){
      %>
      <h2 style="color:red ; font-size:50px">发生错误 : <%=e.getMessage() %></h2>
      <%
      }
      %>
    </html>

    addInput.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <title>用户添加页面</title>
    </head>
    <body>
      <%=request.getAttribute("error") %>
      <form action="add.jsp" method="get">
      <table align="center" border="1" width="500">
      <tr>
        <td>用户名称 : </td>
        <td>
        <input type="text" name="username" />
        </td>
      </tr>
      <tr>
        <td>用户密码:</td>
        <td>
        <input type="password" name="password" />
        </td>
      </tr>
      <tr>
        <td>用户昵称:</td>
        <td>
        <input type="text" name="nickname" />
        </td>
      </tr>
      <tr align="center">
      <td colspan="2">
      <input type="submit" value="提交" />
      <input type="reset" value="重置" />
      </td>
      </tr>
    </table>
    </form>
    </body>
    </html>

    login.jsp

    <%@page import="com.jaovo.msg.Util.UserException"%>
    <%@page import="com.jaovo.msg.dao.UserDaoImpl" %>
    <%@page import="com.jaovo.msg.model.User" %>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <%
    //接收客户端传递过来的参数
      UserDaoImpl userDao=new UserDaoImpl();
      User user=new User();
      String username=request.getParameter("username");
      String password=request.getParameter("password");
      user=userDao.load(username);
      if(username==null || "".equals(username.trim())){
      request.setAttribute("error", "请输入用户名");//设置error属性,属性值为“请输入用户名”
    %>
      <jsp:forward page="loginInput.jsp"></jsp:forward>
    <%
      }
      if(user==null||(user!=null&&!user.getPassword().contentEquals(password)))
      {
      request.setAttribute("error", "输入信息错误");
    %>
      <jsp:forward page="loginInput.jsp"></jsp:forward>
    <%
      }
    %>
    用户登录成功!<br>
    </html>

    loginInput.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <title>用户添加页面</title>
    </head>
    <body>
    <%=request.getAttribute("error") %>
    <form action="login.jsp" method="get">
    <table align="center" border="1" width="500">
      <tr>
      <td>用户名称 : </td>
      <td>
        <input type="text" name="username" />
      </td>
      </tr>
      <tr>
      <td>用户密码:</td>
      <td>
        <input type="password" name="password" />
      </td>
      </tr>
      <tr align="center">
      <td colspan="2">
      <input type="submit" value="提交" />
      <input type="reset" value="重置" />
      </td>
      </tr>
    </table>
    </form>
    </body>
    </html>

    运行结果截图:

     

    3.目标与希望

       希望通过这门课的学习,能和老师建立“教练与学员”的关系,我觉得主要就是要提高自己的自主学习能力,多看书,多上机练习,希望周一到周五能多抽出时间来学习,尤其是在周一至周五没有课的时候,除了适当的休息,大约抽出5个小时左右的时间用来敲代码,周六日多加练习。

  • 相关阅读:
    数据库子查询
    数据库简介
    MySql数据类型
    Jquery与js简单对比
    JS-对象
    JS-DOM
    JS-数组
    JS-函数
    JS-json
    JS-类型相关
  • 原文地址:https://www.cnblogs.com/z12568/p/7883957.html
Copyright © 2011-2022 走看看