周四测试

       这次考试的内容是MVC架构,对于这个方面的内容是比较陌生的,老师在考试之前给我们发了考试中的要用的模板和框架,还有这次考试中要用图片,在考试中要先把这个框架拷贝到eclipse中的新建的项目中,然后根据考试要求和已给的框架配置环境,然后完成考试内容。但是在考试中遇到了各种问题,首先是老师发的框架里面各个文件都是干什么用的,其中一个.html文件是登陆文件,主要显示登陆页面,题目中要求在用户第一次登陆的时候需要先注册,但是老师给的模板里面没有注册页面,所以注册页面就需要自己编写,首先得先在数据库里面构建,构造有关登陆用户名、密码、手机号、所属公司的数据表。我的数据库里面的内容如下。

      

然后我的注册页面内容是:

<%@ 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>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>注册</title>
</head>
<body>
<%
         Object message = request.getAttribute("message");//放置一个字符串,并取出
         if(message!=null && !"".equals(message)){
     
    %>
         <script type="text/javascript">
              alert("<%=request.getAttribute("message")%>");
         </script>
    <%} %>
    
    <div align="center">
    <div><h1>注册</h1></div>
        <form action="servlet?method=add" method="post" onsubmit="return check()">
        <table align="center" border="1" width="50%" cellpadding="6">  
        
    <tr>
        <th colspan="2" align="center" >注册页面</th>
    </tr>
    <tr>
        <td align="center" >用户名</td>   
        <td align="center" ><input type="text" name="user"></td>
    </tr>
    <tr>
        <td align="center" >密码</td> 
        <td align="center" ><input type="text" name="pwd"></td>
    </tr>
    <tr>
        <td align="center" >重复密码</td> 
        <td align="center" ><input type="text" name="randcode"></td>
    </tr>
    <tr>
        <td align="center" >手机号码</td> 
        <td align="center" ><input type="text" name="phonenumber"></td>
    </tr>
    <tr>
        <td align="center" >所属单位</td> 
        <td align="center" ><input type="text" name="unit"></td>
    </tr>
    <tr>
        <th colspan="2" align="center" ><button type="submit" class="b">注&nbsp;&nbsp;&nbsp;册</button></th>
    </tr>
        </table>
        </form>
        <div><a  href="login.html"><font SIZE="4" >返回登录</font></a></div>
        </div>
    <script type="text/javascript">
        function check() {
            var user = document.getElementById("user");;
            var pwd = document.getElementById("pwd");
            var randcode = document.getElementById("randcode");
            var phonenumber = document.getElementById("phonenumber");
            var unit = document.getElementById("unit");
            //非空
            if(user.value == '') {
                alert('账号为空');
                user.focus();
                return false;
            }
            if(pwd.value == '') {
                alert('确认密码为空');
                pwd.focus();
                return false;
            }
            if(randcode.value == '') {
                alert('确认密码为空');
                randcode.focus();
                return false;
            }
            if(rpassword.value!= password.value) {
                alert('两次密码不一致,请重新输入');
                rpassword.focus();
                return false;
            }
            if(phonenumber.value == '') {
                alert('手机号码为空');
                phonenumber.focus();
                return false;
            }
            if(unit.value == '') {
                alert('所属单位为空');
                unit.focus();
                return false;
            }
            
        }
    </script>
</body>
</html>

然后我的数据库连接为代码为:

package DBUtil;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
//连接数据库
public class DButil {
    public static String db_url = "jdbc:mysql://localhost:3306/wdjc";
    public static String db_user = "root";
    public static String db_pass = "zxh521+.";
    public static Connection getConn () {
        Connection conn = null;
        
        try {
            Class.forName("com.mysql.jdbc.Driver");//加载驱动
            conn = DriverManager.getConnection(db_url, db_user, db_pass);
        }   catch (Exception e) {
            e.printStackTrace();
        }
        
        return conn;
    }
    public static void main(String[] args) {
         try
         {
         //第三步:获取连接类实例con,用con创建Statement对象类实例 sql_statement
         Connection con = getConn();
         Statement sql_statement = con.createStatement();
         String query = "select * from denglu";
         
         ResultSet result = sql_statement.executeQuery(query);
         
         //显示数据中network表中的内容:
         System.out.println("数据库wdjc表denglu中的数据如下:");
         System.out.println("------------------------");
         System.out.println("user"+"           "+"pwd"+"         "+"phonenumber" + "     " +  "unit"+"       ");
         System.out.println("------------------------");
         //对获得的查询结果进行处理,对Result类的对象进行操作
        
         while (result.next())
         {
        String user = result.getString("user");
        String pwd = result.getString("pwd"); 
        String phonenumber = result.getString("phonenumber");
        String unit = result.getString("unit");
         
         //取得数据库中的数据
         System.out.println(""+user + "          " + pwd+"          "+phonenumber+"           "+unit+"       ");
         
         }
         
         } catch (SQLException ex) {
             System.err.println("SQLException: " + ex.getMessage());
             }
    }
    /**
     * 关闭连接
     * @param state
     * @param conn
     */
    public static void close (Statement state, Connection conn) {
        if (state != null) {
            try {
                state.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    
    public static void close (ResultSet rs, Statement state, Connection conn) {
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        
        if (state != null) {
            try {
                state.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    
}

Dao层的代码为:

package Dao;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import DBUtil.DButil;

import entity.entity;

public class dao {
    public boolean add(entity entity) {
        String sql = "insert into denglu(user, pwd,phonenumber,unit) values('" + entity.getUser() + "','" + entity.getPwd()+"','"+entity.getPhonenumber()+"','"+entity.getUnit()
                + "')";
        Connection conn = DButil.getConn();
        Statement state = null;
        boolean f = false;
        int a = 0;

        try {
            state = conn.createStatement();
            a = state.executeUpdate(sql);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            DButil.close(state, conn);
        }

        if (a > 0) {
            f = true;
        }
        return f;
    }
    /**
     * 登录,比对密码
     * @param username
     * @return
     */
    public String search(String user) {
        String sql = "select * from denglu where ";
        if (user != "") {
            sql= "user like '%" + user + "%'";
        }

        Connection conn = DButil.getConn();
        Statement state = null;
        ResultSet rs = null;
        String pwd2 = null;
        try {
            state = conn.createStatement();
            rs = state.executeQuery(sql);
            while (rs.next()) {
                pwd2 = rs.getString("pwd");
                
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            DButil.close(rs, state, conn);
        }

        return pwd2;
    }
    /**
     * 登录,比对用户名
     * @param username
     * @return
     */
    public String search1(String user) {
        String sql = "select * from denglu where ";
        if (user != "") {
            sql= "user like '%" + user + "%'";
        }

        Connection conn = DButil.getConn();
        Statement state = null;
        ResultSet rs = null;
        try {
            state = conn.createStatement();
            rs = state.executeQuery(sql);
            while (rs.next()) {
                user = rs.getString("user");
                
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            DButil.close(rs, state, conn);
        }
        return user;
    }
    
    public List<entity> list() {
        String sql = "select * from denglu";
        List<entity> list = new ArrayList<>();
        Connection conn = DButil.getConn();
        Statement state = null;
        ResultSet rs = null;
        try {
            state = conn.createStatement();
            rs = state.executeQuery(sql);
            entity entity = null;
            while (rs.next()) {
                int id = rs.getInt("id");
                String user= rs.getString("user");
                String pwd = rs.getString("pwd");
                String phonenumber = rs.getString("phonenumber");
                String unit = rs.getString("unit");
                entity = new entity(id,user,pwd,phonenumber,unit);
                list.add(entity);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            DButil.close(rs, state, conn);
        }    
        return list;
    }
}

entity层的代码为:

package entity;

public class entity {
private int id;
private String user;
private String pwd;
private String phonenumber;
private String unit;
public int getId() {
    return id;
}
public void setId(int id) {
    this.id = id;
}
public String getUser() {
    return user;
}
public void setUser(String user) {
    this.user = user;
}
public String getPwd() {
    return pwd;
}
public void setPwd(String pwd) {
    this.pwd = pwd;
}
public String getPhonenumber() {
    return phonenumber;
}
public void setPhonenumber(String phonenumber) {
    this.phonenumber = phonenumber;
}
public String getUnit() {
    return unit;
}
public void setUnit(String unit) {
    this.unit = unit;
}
public entity(int id,String user,String pwd,String phonenumber,String unit)
{
    this.id = id;
    this.user = user;
    this.pwd = pwd;
    this.phonenumber = phonenumber;
    this.unit = unit;
}
public entity(String user,String pwd,String phonenumber,String unit)
{
    
    this.user = user;
    this.pwd = pwd;
    this.phonenumber = phonenumber;
    this.unit = unit;
}
}

servlet层的代码为:

package servlet;

import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import entity.entity;

import Dao.dao;

/**
 * Servlet implementation class servlet
 */
@WebServlet("/servlet")
public class servlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    dao dao = new dao();
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        String method = req.getParameter("method");
        if ("add".equals(method)) {
            add(req, resp);
        }  else if ("search".equals(method)) {
            search(req, resp);
        } 
    }
private void add(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {
        
        String user = req.getParameter("user");
        String pwd = req.getParameter("pwd");
        String phonenumber=req.getParameter("phonenumber");
        String unit = req.getParameter("unit");
        entity entity= new entity(user,pwd,phonenumber,unit);
        if(dao.add(entity)) {
            req.setAttribute("message", "注册成功!");
            req.getRequestDispatcher("login.html").forward(req, resp);
        }else {
            req.setAttribute("message", "注册失败!");
            req.getRequestDispatcher("zhuce.jsp").forward(req, resp);
        }
    }
        private void search(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {
            
            req.setCharacterEncoding("utf-8");
            String user = req.getParameter("user");
            String pwd = req.getParameter("pwd");
            String pwd1 = dao.search(user);
            String user1 = dao.search1(user);
            if(pwd.equals(pwd1)&&user.equals(user1)) {
                req.setAttribute("message", "登陆成功!");
                req.getRequestDispatcher("index.html").forward(req,resp);
            }
            else {
                req.setAttribute("message", "用户不存在或密码错误!");
                req.getRequestDispatcher("login.html").forward(req,resp);
            }
            
        
    }
}

在注册页面完成之后,在登陆页面点击注册,显示路径错误,路径为没有找到zhu/zhuce.jsp,可是我不明白为zhuce.jsp在zhu这一层文件中,之后我在Webcontent中直接建立zhu这个文件,然后吧zhuce.jsp这个文件剪切进zhu这个文件中,然后在登陆页面中再点注册,然后进入了注册页面。

然后注册通过之后,在登陆页面页面点击输入用户名和密码,还有验证码,点击登陆之后又显示路径错误,缺少dengluservlet这个文件,我感觉特别奇怪,我有servlet这个文件,里面有关于登陆的内容,为什么还需要dengluservlet这个文件。后来我去仔细了解了MVC构架的内容,MVC构架包括控制器、模型、视图。Model(模型):数据模型,提供要展示的数据,因此包含数据和行为,可以认为是领域模型(domain)或JavaBean组件(包含数据和行为),不过现在一般都分离开来:Value Object(数据) 和 服务层(行为)。也就是模型提供了模型数据查询和模型数据的状态更新等功能,包括数据和业务。View(视图):负责进行模型的展示,一般就是我们见到的用户界面,客户想看到的东西。Controller(控制器):接收用户请求,委托给模型进行处理(状态改变),处理完毕后把返回的模型数据返回给视图,由视图负责展示。 也就是说控制器做了个调度员的工作。

       MVC 中的模型、视图、控制器三者之间的交互关系:首先是展示视图给用户,用户在这个视图上进行操作,并填写一些业务数据。然后用户会点击提交按钮,来发出请求。视图发出的用户请求会到达控制器,在请求中包含了想要完成什么样的业务功能以及相关的数据。控制器会来处理用户请求,会把请求中的数据进行封装,然后选择并调用合适的模型,请求模型进行状态更新,然后选择接下来要展示给用户的视图。模型会去处理用户请求的业务功能,同时进行模型状态的维护和更新当模型状态发生改变的时候,模型会通知相应的视图,告诉视图它的状态发生了改变。视图接到模型的通知后,会向模型进行状态查询,获取需要展示的数据,然后按照视图本身的展示方式,把这些数据展示出来。

Servlet+JSP+JavaBean模型的响应顺序为:

当用户发出一个请求后,这个请求会被控制器Servlet接收到;Servlet将请求的数据转换成数据模型JavaBean,然后调用业务逻辑模型JavaBean的方法,并将业务逻辑模型返回的结果放到合适的地方,比如请求的属性里;最后,根据业务逻辑模型的返回结果,由控制器来选择合适的视图(JSP),由视图把数据展现给用户。

为保证路径的吻合,还需要配置环境和下载jar包,这样才能保证与框架的路径保持吻合。

posted on 2019-03-03 20:46  方木Fengl  阅读(247)  评论(1编辑  收藏  举报

导航