最近很想写个程序web,奈何忘完了= =!重新学习中。不想再干net的运维了,和代码接触不到,小白白一个。接下来正题
先上一张工程截图
上面的工程图中工程叫springmvc
MVC(模型Model-视图View-控制器Controller)
其中Modelc层有5个包:
1、com.springmvc.dao包下面的UserDao类为数据库连接接口类
2、com.springmvc.dao.impl包下面的UserDaoImpl类继承重载了并实现UserDao接口类的方法进行数据库连接
3、com.springmvc.entit包下面的User类为数据库用户表对应的实体类
4、com.springmvc.service包下面的UserService接口类,为了获取数据库返回值
5、com.springmvc.service.impl包下面的UserServiceImpl类继承重载了并实现UserService接口类的方法进行数据业务逻辑操作view层为各种jsp等等
Controller层下有一个包
com.springmvc.controller包下面ViewController类为控制器,控制view传来的参数进行调用UserService接口类中的方法,进行登录。
再来一张运行图下来是代码段
ViewController控制器
package com.springmvc.controller;import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;import com.alibaba.fastjson.JSON;
import com.springmvc.service.UserService;
//import com.springmvc.dao.UserDao;
import com.springmvc.service.impl.UserServiceImpl;
import com.sun.accessibility.internal.resources.accessibility;
@Controller
public class ViewController {

@RequestMapping("/view")
public ModelAndView view(HttpServletRequest request) {
String path = request.getParameter("path") + "";
ModelAndView mav = new ModelAndView(); mav.setViewName(path);
return mav;
}


@Autowired
private UserService userService;
@RequestMapping(value = "/login")
public String login(@RequestParam("username") String username, @RequestParam("password") String password,
HttpSession session, Model model) {
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
try {
list = userService.getUserList(username,password);
System.out.println(list);

} catch (Exception e) {
// TODO: handle exception
}
return "index";
}
}
UserDao接口类
package com.springmvc.dao;import java.sql.SQLException;
import java.util.List;
import java.util.Map;public interface UserDao { /* (non-Javadoc)
 * @see com.springmvc.dao.BaseDao#ExecuteResultSet(java.lang.String)
 */
List<Map<String, Object>> ExecuteResultSet(String sql) throws SQLException; /*
 * 更新操作
 */
/* (non-Javadoc)
 * @see com.springmvc.dao.BaseDao#Execute(java.lang.String)
 */
void Execute(String sql);}
UserDaoImpl类
package com.springmvc.dao.impl;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;import org.springframework.stereotype.Service;
import com.springmvc.dao.UserDao;@Service
public class UserDaoImpl implements UserDao {    private static String driverName;
    private static String dbURL;
    private static String userName;
    private static String password;
    private static Connection connection;
    private static Statement statement;    public static Connection getConnection() throws SQLException
    {
        Connection conn =null;
        try {
            Properties prop =  new  Properties();   
            prop.load(UserDaoImpl.class.getClassLoader().getResourceAsStream("DB.properties"));
            driverName=prop.getProperty("jdbc.driverClass");
            dbURL=prop.getProperty("jdbc.url");
            userName=prop.getProperty("jdbc.username");
            password=prop.getProperty("jdbc.password");
            Class.forName(driverName);
            conn =DriverManager.getConnection(dbURL, userName, password);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return conn;
    }    /*
     * 释放资源
     */
    public static void releaseResources(ResultSet resultSet, Statement statement, Connection connection) {
        try {
            if (resultSet != null)
                resultSet.close();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            resultSet = null;
            try {
                if (statement != null)
                    statement.close();
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                statement = null;
                try {
                    if (connection != null)
                        connection.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                } finally {
                    connection = null;
                }
            }
        }    }    /* (non-Javadoc)
 * @see com.springmvc.dao.BaseDao#ExecuteResultSet(java.lang.String)
 */    @Override
public  List<Map<String,Object>>  ExecuteResultSet(String sql) throws SQLException {
        List<Map<String,Object>> list = new  ArrayList<Map<String,Object>>();
        ResultSet rs=null;
        try {
            connection = getConnection();
            statement = connection.createStatement();
            rs = statement.executeQuery(sql);
            ResultSetMetaData m=rs.getMetaData();
            int count=m.getColumnCount();
            while (rs.next()) {
                Map<String,Object> rowData=new HashMap<String, Object>();
                for (int i = 1; i <= count; i++) {
                    Object value=rs.getObject(i)==null?"":rs.getObject(i);  
                    rowData.put(m.getColumnName(i), value);
                }
                list.add(rowData);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            releaseResources(rs, statement, connection);
        }
        return list;
    }    @Override
public void Execute(String sql) {
        try {
            connection = getConnection();
            statement = connection.createStatement();
            // 可执行创建、修改、删除表,添加、删除、修改元组以及查询sql语句
            statement.execute(sql);
          ResultSet ResultSet= statement.getResultSet();
            ResultSetMetaData rsmd = ResultSet.getMetaData();            int columnCount = rsmd.getColumnCount();
            //迭代输出ResultSet对象            while (ResultSet.next())            {//依次输出每列的值
                for (int i = 0 ; i < columnCount ; i++ ) 
                {                    System.out.print(ResultSet.getString(i + 1) + "/t");                }
                System.out.print("/n");            } 
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            releaseResources(null, statement, connection);
        }
    }
}
User类
/*package com.springmvc.entit;public class User {
private Integer id;
private String username;
private String password;
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}}
*/UserService类
package com.springmvc.service;import java.util.List;
import java.util.Map;public interface UserService { List<Map<String, Object>> getUserList(String username , String password);}UserServiceImpl类
package com.springmvc.service.impl;import java.util.ArrayList;
import java.util.List;
import java.util.Map;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import com.springmvc.dao.UserDao;
import com.springmvc.service.UserService;@Service
public class UserServiceImpl implements UserService { @Autowired
private UserDao userDao; @Override
public List<Map<String, Object>> getUserList (String username , String password) {
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
try {
list = userDao.ExecuteResultSet("select * from users a where a.username = '" + username + "' and a.password='" + password + "';");
if (list != null && !list.isEmpty()) {
return "login";
}
} catch (Exception e) {
e.printStackTrace();
}
return list; }
}jdbc.driverClass = com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/baibaika?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Hongkong
jdbc.username = root
jdbc.password = rootDB.properties用来存mysql数据连接,需要注意的是,mysql5.0版本以上driverClass=com.mysql.cj.jdbc.Driver,url需要加入useSSL=false,此为服务器验证
我有些不懂的地方需要请教下各位大神:
1、UserServiceImpl类中getUserList实现方法中用list<Map<String, Object>>接受的数据库查询的返回,登录需要判断我是写再controller的对应方法中,还是就在getUserList方法中判断
2、实现中中都有@Service  这个注解,百度说是告诉接口这个是实现类?
3、@Autowired
private UserDao userDao;这个实例化的时候需要@Autowired?是启动的时候加载UserDao属性?还是加载这个类?相当于要想这么用,就必须加
4、@Override注解百度说复写基类方法的时候需要加上,一个提示作用,但是删除了报错,而且我写的是重载。不明白。
5、UserDaoImpl数据库连接库,总感觉怪怪的,是需要新添加一个类用来存放数据库连接方法,那现在UserDaoImpl类中是调用新增加的数据库连接类的方法,还是把数据库连接类设计成接口,UserDaoImpl类继承实现了2个接口UserDao,数据库连接类
6、我打开主页地址为http://localhost:8080/springmvc/view?path=login,通过controller的login方法ruturn “index”,跳转主页后,地址却成了,此时的真是页面确实index,是因为@RequestMapping(value = "/login")?造成的么,修改为/index确实有效,登录后跳转页面成了http://localhost:8080/springmvc/index,,而不是view?path=index,怎么解决这个问题

解决方案 »

  1.   

    1.一个方法最好就执行一个功能,所以不推荐写在getUserList。
    2.开发中,一个service层,都是一个接口+一个实现类,@Service就是加在实现类上的,这个不用担心,反正我们工作的时候只要是给别人 
       调的都喊接口。
    3.启动的时候加载
    4.具体情况,具体分析吧
    5.。不知道
    6.得看你自己的映射处理器是怎么配置的,地址?后面是来传参数的吧,不是查找资源路径最后,找套好点订的视频看吧,基础打好点,找那种有名气点的培训结构的视频,淘宝啊,网站啊