zoukankan      html  css  js  c++  java
  • 关于WEB编程的基础1

      在经历了三个月的java基础学习,终于进入了Web编程,在学习客户端的时候对web编程有了大概的认识,对于之前的java基础,相当于是将表现层改编成我们现在所学的网页显示。而持久层和业务逻辑层也和之前的编程没有太大变化。而之前锁学的仅仅只是基础。现在所考虑到的就是在之后的编程中更加利于实际运用。

      在这周学习中,最大的感觉就是将之前所学的东西进行应用。之前连接数据库很多东西都写的很固定,并没有考虑到用户的实际操作。让我对基础应用有很大的改观。其中就是用户在输入sql语句的时候,以前都是通过字符串进行拼接。来达到对数据库的增删改查。很少用到占位符。而在实际应用中。拼接sql语句通常有很大漏洞。用户在输入“--”的时候,会对后台的sql语句进行注释,并达不到数据所需要的安全性,而使用占位符,再输入“--”的时候,就不会对后台的sql语句有影响,这也是我对实际应用有了更多的认识。

       其次就是propertis文件的应用,之前学到的时候对它的应用认知几乎为零。而引用文件会使代码有了更大的可维护性。一些用户需要更改的信息会更加方便,解决了之前写的代码的固定性。

       而在对登陆数据进行判定的时候,一个小技巧就是在数据返回值先不new,而确定找到了数据的时候才对数据进行new,这样也减少没用的对象。

     public User findUser(String name, String pwd) {
          //链接数据库
          Connection conn=DbUtil.getConnection();
          String sql="select * from users where user_name=? and user_pwd=?";
          User user=null;
      try {
         PreparedStatement ptmt=conn.prepareStatement(sql);
         ptmt.setString(1, name);
         ptmt.setString(2, pwd);
         ResultSet rs= ptmt.executeQuery();
       if(rs.next()){
          user=new User();
          user.setUserId(rs.getInt("user_id"));
          user.setUserName(rs.getString("user_name"));
          user.setUserPwd(rs.getString("user_pwd"));
          user.setUserType(rs.getInt("user_type"));
       }
      } catch (SQLException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
      }
      return user;
     }

    其次就是对数据库的连接,和之前的数据连接有很大区别,以前连接数据库也单独写了方法,但是并不是像现在这样很方便,把链接数据库写成静态的方法。

    public class DbUtil {
         private static String name;
         private static String pwd;
         private static String url;
     static{
          Properties properties=new Properties();
      try {
           properties.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("sql.properties"));
           name=properties.getProperty("name");
           pwd=properties.getProperty("pwd");
           url=properties.getProperty("url");
      } catch (FileNotFoundException e) {
         // TODO Auto-generated catch block
           e.printStackTrace();
       } catch (IOException e) {
           // TODO Auto-generated catch block
       e.printStackTrace();
      }
     }
     public static Connection getConnection(){
      Connection conn=null;
      try {
       Class.forName("com.mysql.jdbc.Driver");
       conn=DriverManager.getConnection(url,name,pwd);
      } catch (ClassNotFoundException | SQLException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
      }
      return conn;
     }
     public static void closeConn(Connection conn){
      if(conn!=null){
       try {
        conn.close();
       } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
       }
      }
     }
    }

    servlet中文乱码处理

    post:
        设置req.setCharacterEncoding("utf-8");

    get,不去修改服务器配置的情况下:
        new String(name.getBytes("iso-8859-1"),"utf-8")

        对接收到的数据重新编码。


    数据库乱码
        ?useUnicode=true&characterEncoding=UTF-8

        传输的时候进行转码。

    页面进行跳转的方法:

        转发和重定向的区别。

    重定向:以前的request中存放的变量全部失效,并进入一个新的request作用域。
    转发:以前的request中存放的变量不会失效,就像把两个页面拼到了一起。

        重定向和转发有一个重要的不同:当使用转发时,JSP容器将使用一个内部的方法来调用目标页面,新的页面继续处理同一个请求,而浏览器将不会知道这个过程。 与之相反,重定向方式的含义是第一个页面通知浏览器发送一个新的页面请求。因为,当你使用重定向时,浏览器中所显示的URL会变成新页面的URL, 而当使用转发时,该URL会保持不变。重定向的速度比转发慢,因为浏览器还得发出一个新的请求。同时,由于重定向方式产生了一个新的请求,所以经过一次重定向后,request内的对象将无法使用。
              怎么选择是重定向还是转发呢?通常情况下转发更快,而且能保持request内的对象,所以他是第一选择。但是由于在转发之后,浏览器中URL仍然指向开始页面,此时如果重载当前页面,开始页面将会被重新调用。如果你不想看到这样的情况,则选择转发。

    转发和重定向的区别
    不要仅仅为了把变量传到下一个页面而使用session作用域,那会无故增大变量的作用域,转发也许可以帮助你解决这个问题。

  • 相关阅读:
    Eclipse关于怎么调出web project
    RMI(远程方法调用)入门
    XSS攻击
    微信小程序
    java——IO流01
    06 python下
    06python上
    05python下
    05python上
    Nginx & Apache_网站用户认证
  • 原文地址:https://www.cnblogs.com/hansleen/p/5679465.html
Copyright © 2011-2022 走看看