struts2小小项目 经验总结(1) 在sturt2里实现访问数据库

  1. 开始填坑了哈,这个东西其实还不完整,但是如果再不写的话,前面那些坑可能要开始忘了,那就先写着吧,各位如果有啥建议欢迎给我提,一起进步。
  2. 源码在这
  3. 这个项目我给他起了个名字--猫眼,哈哈,也就是一时兴起,给了它个名字,它的作用是使用struts框架加数据库建立一个小网站,客户在进行登录之后,可以输入一个事先准备好的“动漫之家”网中某一个漫画的网址,然后服务器就会去爬去这个 漫画的内容,打包之后返回给用户。
  4. 简短洁说,现在来把我踩的坑分享给各位。
  5. 第一步,我最先做的是用户登录这一块,用的是微软的sqlserver数据库(以前做数据库用的是mysql,但是都得接触接触是吧)和struts2(其实说白了这个项目就是struts2练手)。
    1. 首先呢得安装数据库。这是数据库的安装过程。
    2. 其次呢是让java能够使用sqlserver。实现的思路是这样的,这个在前面也有说过,就是java加载sqlserver驱动,然后输入用户密码 ,就可以了。具体是这样操作的。
      1. 先得获得数据库驱动,驱动在这里
      2. 下载之后将驱动添加到项目的lib                                                                                                           
      3. 输入测试代码
        
        import java.sql.*;
        import java.util.HashMap;
        import java.util.Map;
        
        
        
        
        /**
         * Demo SearchNameAndPass
         *
         * @author lin
         * @date 2018/11/22
         */
        
        public class SqlTest  {
            public static void main(String[] srg) {
                String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";  //加载JDBC驱动
                String dbURL = "jdbc:sqlserver://localhost:1433; DatabaseName=homework_Submit_System";  //连接服务器和数据库test
                String userName = "root";  //默认用户名
                String userPwd = "123456";  //密码
                Connection dbConn;
                try {
                    Class.forName(driverName);
                    dbConn = DriverManager.getConnection(dbURL, userName, userPwd);
                    System.out.println("Connection Successful!");  //如果连接成功 控制台输出Connection Successful!
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
        
        
        

        能成功看到输出的话就ok,可以继续下一步

      4. 因为这个访问数据库的功能是要在strut2里使用的,所以,要先新建一个struts2项目,具体怎么新建看前文,这里主要说明怎么在strus2里通过配置文件访问数据库,这涉及到一个知识点,资源文件的声明。

        1. 要知道在struts2里直接使用./initSql.properties呀,./initSql.ini呀,../initSql.properties,../initSql.ini,就算你在文件里“看到了”initSql.properties“的的确确在那里”,也是没有办法得到它的内容的。后来我的解决办法是在struts.xml里配置一个资源文件,也就是

            <constant name="struts.custom.i18n.resources" value="initSql"/>

          配置文件的名字就叫做iniSql.properties,内容为(具体什么是什么就不详细讲啦)

          driver = com.microsoft.sqlserver.jdbc.SQLServerDriver
          url = jdbc:sqlserver://localhost:1433; DatabaseName=homework_Submit_System
          user =  root
          pass = 123456

                                                                                                                                                                              然后访问数据库的类是这样的,具体的讲解在代码里边

          package action.dao;
          
          import com.opensymphony.xwork2.ActionSupport;
          
          import java.sql.*;
          import java.util.HashMap;
          import java.util.Map;
          /**
           * Demo SearchNameAndPass
           *
           * @author lin
           * @date 2018/11/22
           */
          
          public class SearchNameAndPass extends ActionSupport {
              private String driver;
              private String  url;
              private String user;
              private String pass;
          
          /**     通过读取属性文件来获得属性 */
              private void iniParam() throws Exception{
          
          //        依次读取属性文件里的各种属性
                  driver =  getText("driver");
                  System.out.println(driver);
                  url=  getText( "url");
                  user =   getText("user");
                  pass = getText( "pass");
                  Class.forName(driver);
              }
          
          
          
          
          /**     在数据库中搜索匹配的用户名和密码。 */
              public   Map<String, String >  search() throws Exception{
                  HashMap<String, String>nameAndPass = new HashMap<>(16);
                  try(
          //                PreparedStatement同样是通过Connection对象来或获得的。
          //                具体的构造方法是将要执行的sql语句传进其构造方法里。但是要将具体的数据用?代替
          //                然后再在具体执行sql语句的时候将?代替成具体的值
                          Connection connection = DriverManager.getConnection(url,user,pass);
                          PreparedStatement preparedStatement =
                                  connection.prepareStatement(" select *  from students  "))
                  {
                      ResultSet resultSet = preparedStatement.executeQuery();
          
                      //将在数据库中所有的账号密码存储在一个map中,以账号为键,密码为值
                      while (resultSet.next())
                      {
                          nameAndPass.put(resultSet.getString("account"), resultSet.getString("password1"));
                      }
                  }
                  return nameAndPass;
              }
          
          
              public SearchNameAndPass() throws Exception{
                  iniParam( );
              }
          //    public static void main(String []args) throws Exception{
          //        SearchNameAndPass preparedStatementTest  = new SearchNameAndPass();
          //        preparedStatementTest.iniParam("E:\\homeWorkSubmitSystem\\homeWorkSubmitSystem\\param.ini");
          //        Map<String, String > nameAndPass =  preparedStatementTest.search();
          //        System.out.println(nameAndPass.get("15363396874"));
          //    }
          }
          

          好了,数据库的配置就是这样,就是要记得要在配置文件里配置一下资源文件,配置文件所处的位置是在src文件夹下。 

        2. 然后呢,如果其他类就这样直接访问数据库那封装信也太差了,需要做一下封装。 

          package action.dao;
          
          import java.util.Map;
          
          public class DbBean {
              private String name;
              private String pass;
          
              private String getName() {
                  return name;
              }
          
              private void setName(String name) {
                  this.name = name;
              }
          
              private String getPass() {
                  return pass;
              }
          
              private void setPass(String pass) {
                  this.pass = pass;
              }
          
          
              public DbBean(String name, String pass ){
                  setName(name);
                  setPass(pass);
              }
          
              public boolean  verifyLogin() throws  Exception{
          
                  if(getName()==null || getPass() == null){
                      return false;
                  }
          
                  SearchNameAndPass searchNameAndPass = new SearchNameAndPass();
          
                  Map<String, String> nameAndPass=  searchNameAndPass.search();
          
                  if(nameAndPass.get(getName()).equals(getPass())){
                      return true;
                  }
                      return false;
              }
          }
          
          

猜你喜欢

转载自blog.csdn.net/weixin_39452731/article/details/84885709