zoukankan      html  css  js  c++  java
  • JAVA_OA(六):SpringMVC登陆实例

    JAVA_OA(六):登陆实例

    1. 例子逻辑简述
    2. SpringMVC中的jdbc
    3. 具体代码

    例子逻辑简述

    1. 登陆信息的提交(提交方法:/user/login.do)
    2. Controller中执行@RequestMapping(“/user/login.do”)
    3. 找到判断方法UserDao,执行并返回结果
    4. Controller返回结果
      这个是一般的登录流程图(但是,这次我们的登陆错误将会直接用Error页面代替):
    Created with Raphaël 2.1.0开始loginUserDao登陆成功yesno

    SpringMVC中的jdbc

    这个是jar包,我这次用的是Oracle,但是要注意版本3.28似乎不支持Oracle12c,但是支持11g。但是如果换成4的话,注意jdk要换成8,咳咳。

    jar包文件目录照片

    具体代码



    1.先上非java文件

    
    <!--加载数据库的连接配置      -->
    <util:properties id="jdbc" location="classpath:db.properties"></util:properties>
    <!--配置数据源  数据库连接池-->
    <!-- 会一一注入到class中,value是db中的值,这里不懂可以看三 -->
        <bean id="ds" class="org.apache.commons.dbcp.BasicDataSource">
           <property name="url" value="#{jdbc.url}"></property>
           <property name="driverClassName" value="#{jdbc.driver}"></property>
           <property name="username" value="#{jdbc.user}"></property>
           <property name="password" value="#{jdbc.password}"></property>
           <property name="maxActive" value="#{jdbc.maxActive}"></property>
           <property name="maxWait" value="#{jdbc.maxWait}"></property>
        </bean>
    
        db.properties:
    user=javaoa
    password=******(此处保密)
    url=jdbc:oracle:thin:@localhost:1521:orcl
    driver=oracle.jdbc.OracleDriver
    #数据源配置
    maxActive=5
    maxWait=5000
    
    
    

    2.Controller的代码

        @Resource
        private TeacherDao UserrDao;
        @RequestMapping("/user/login.do")
        public String login(String id,String name,String password,HttpSession session){
            String s=UserDao.login(name, password);
            if(s.equals("true")){
             session.setAttribute("login", "true");
              return "redirect:list.do";
            }else{
              return "error";
              //直接返回error页面
            }
        }
        //  list
        @RequestMapping("/user/list.do")
        public String list(ModelMap map){
    
            List<User> list=UserDao.list();
            map.addAttribute("listsss", list);
            return "list";
            //这里没有影响,你可以随便返回一个不是error的页面
        }

    3.Dao

    **
     *  数据库连接池的好处:
     *  
     *  1  重用资源以减少链接次数
     *     我用的时候 问数据源 要一个  用完了关闭  ;
     *     IO性能消耗
     *  2  更好的屏蔽数据库的相关性,保护数据库
     *
     */
    @Component
    public class UserrDao {
        @Resource(name="ds")
        private DataSource dataSource;
    
        public String login(String name,String password){
            Connection conn=null;
            String s=null;
            try {
                 conn=dataSource.getConnection();
                 String sql="select * from user where name=?";
                 /**
                  * 第一 个  连接效率比较高 用的是 预编译的sql(PreparedStatement)
                  * 第二个 可以防止sql注入
                  */
                 PreparedStatement ps=conn.prepareStatement(sql);
                 ps.setString(1, name);
                 ResultSet rs=ps.executeQuery();
    
                 User user=new User();
                 while(rs.next()){
                     user.setPassword(rs.getString("password"));
                 }
                 if(password.equals(user.getPassword())){
                     s="true";
                     return s;
                 }else{
                     s="false";
                     return s;
                 }
            } catch (SQLException e) {
                e.printStackTrace();
            }finally{
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            return s;
        }
    
    
        public List<User> list(){
            List<User> tlist=new ArrayList<User>();
            Connection conn=null;
            String s=null;
            try {
                 conn=dataSource.getConnection();
                 String sql="select * from User";
    
                 PreparedStatement ps=conn.prepareStatement(sql);
                 ResultSet rs=ps.executeQuery();
                 while(rs.next()){
                     User user=new User();
                     user.setId(rs.getString("id"));
                     user.setName(rs.getString("name"));
                     user.setPassword(rs.getString("password"));
                     tlist.add(t);
                 }
            } catch (SQLException e) {
                e.printStackTrace();
            }finally{
                try {
                    conn.close();
                    //实际上是调用了重写的close方法,关闭了连接池--可以先无视
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            return tlist;
        }
        @Test
        public void test1(){
            ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
            User s=ac.getBean("testDao",UserDao.class);
            System.out.println(s.getDataSource().toString());
        }
    
        public DataSource getDataSource() {
            return dataSource;
        }
    
        public void setDataSource(DataSource dataSource) {
            this.dataSource = dataSource;
        }
    
    
    }
  • 相关阅读:
    稳扎稳打Silverlight(47) 4.0UI之操作剪切板, 隐式样式, CompositeTransform, 拖放外部文件到程序中
    返璞归真 asp.net mvc (9) asp.net mvc 3.0 新特性之 View(Razor)
    返璞归真 asp.net mvc (6) asp.net mvc 2.0 新特性
    稳扎稳打Silverlight(48) 4.0其它之打印, 动态绑定, 增强的导航系统, 杂七杂八
    精进不休 .NET 4.0 (9) ADO.NET Entity Framework 4.1 之 Code First
    稳扎稳打Silverlight(42) 4.0控件之Viewbox, RichTextBox
    稳扎稳打Silverlight(53) 4.0通信之对WCF NetTcpBinding的支持, 在Socket通信中通过HTTP检索策略文件, HTTP请求中的ClientHttp和BrowserHttp
    稳扎稳打 Silverlight 4.0 系列文章索引
    稳扎稳打Silverlight(54) 4.0通信之对UDP协议的支持: 通过 UdpAnySourceMulticastClient 实现 ASM(Any Source Multicast),即“任意源多播”
    返璞归真 asp.net mvc (8) asp.net mvc 3.0 新特性之 Model
  • 原文地址:https://www.cnblogs.com/fonttian/p/9162861.html
Copyright © 2011-2022 走看看