servlet学习_days_02

今天利用servlet实现注册的功能。这里我们用GET请求来向浏览器发送数据。OK,我们看具体实现吧。

分层模型

controller:

  • 1、TestService.java:接受数据
  • 2、Service.java:创建实体类对象,并传入dao层中

model:

  • 3、user.java:用户实体类
  • 4、BaseDao.java:连接数据库配置
  • 5、UserDao.java:查询数据库并返回一个结果

init:

  • 6、Config.java:根据web.xml文件中的信息,配置数据库连接所需要的内容。
  • 7、web.xml中的配置文件

配置步骤:

  1. 首先登记控制器用doget()请求获得数据。
  2. 登记控制器将得到的数据传入用户服务中去
    ①用户服务将发过来的数据转换成了一个user对象
    ②然后将user对象传给UserDao,将user作为一条记录插入表中
  3. UserDao将获取数据库连接,然后将一条记录插入到表中,user就是一条记录
  4. 控制器用用户服务的register()判断是否插入,并向浏览器返回数据

数据字典:

  • ① TestService:控制层的路由过程, 此模块只是接受传过来的用户名和密码,并向业务过程发送数据 。
  • ② Service:控制层的业务过程(biz层):一般做的事情是对数据的处理,比如数据是否合法、准备向外发还的数据是否正确,对于数据计算出结果 。
  • ③ User:对Base应的是数据库中的一张表, 每一个对象对应着数据库中的一条记录。
  • ④ Basedao:加载数据库驱动,获取数据库连接,然后将一条记录插入到表中。
  • ⑤ UserDao:将一条记录插入到表中,并向Service返回一条消息。

具体实现:

①TestService.java

public class TestServlet extends HttpServlet {

    Service service = new Service();

    @Override
    public void init() throws ServletException {
        Config.url = getInitParameter("url");
        Config.username = getInitParameter("username");
        Config.pwd = getInitParameter("pwd");
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        resp.setContentType("text/html; charset=UTF-8");

        String username = req.getParameter("username");
        String pwd = req.getParameter("pwd");
        User user = new User();
        user.setUsername(username);
        user.setPwd(pwd);
        if (service.operation(user)) {
            resp.getWriter().write("注册成功");
        }else {
            resp.getWriter().write("注册失败");
        }
    }
}

②Service.java

public class Service {

    UserDao dao = new UserDao();

    public boolean operation(User user) {
        if (user.getUsername() == null || user.getPwd() == null) {
            return false;
        }
        return dao.insert(user) != 0;
    }
}

③user.java

public class User {

    private int id;
    private String username;
    private String pwd;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }
}

④BaseDao

public class BaseDao {

    static {
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    public Connection getConnection() {
        try {
            Connection con = DriverManager.getConnection(Config.url, Config.username, Config.pwd);
            return con;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }
}

⑤UserDao

public class UserDao implements IUSerDao {

    BaseDao dao = new BaseDao();

    @Override
    public int insert(User user) {
        Connection conn = dao.getConnection();
        String sql = "insert into tb_user(username, pwd) values(?, ?)";
        try {
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setString(1, user.getUsername());
            ps.setString(2, user.getPwd());
            return ps.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return 0;
    }
}

⑥Config

public class Config {

    public static String url;
    public static String username;
    public static String pwd;


}

⑦web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <servlet>
        <servlet-name>regin</servlet-name>
        <servlet-class>com.ali.test.controller.TestServlet</servlet-class>
        <init-param>
            <param-name>url</param-name>
            <param-value>jdbc:mysql://localhost:3306/db_foo?useSSL=true&amp;serverTimezone=UTC</param-value>
        </init-param>
        <init-param>
            <param-name>username</param-name>
            <param-value>数据库名</param-value>
        </init-param>
        <init-param>
            <param-name>pwd</param-name>
            <param-value>密码</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>regin</servlet-name>
        <url-pattern>/test.do</url-pattern>
    </servlet-mapping>
</web-app>

注意:

这里要强调的是:在web.xml中的数据库的配置信息称为魔鬼字,因为你要部署的时候有可能会遇到要改这些信息的时候,所以在web.xml文件中写好,初始化的时候配置就好了,后期也可以更改。

  • getInitParameter(String s):我们用这个方法来获取web.xml的初始化配置信息。在web.xml中这样配置.
<init-param>
        <param-name>配置名</param-name>
        <param-value>具体参数</param-value>
    </init-param>
  • 通常我们用注解来配置好servlet的访问名称,web.xml里面只是配置初始化信息。可以专门写一个servlet,要求在Tomcat启动的时候创建,专门加载初始化配置文件。其他的servlet就可以使用配置信息了,一般在web.xml中用这句来配置。
<load-on-startup>1</load-on-startup>
  • servlet中的构造方法不能带参数,带参数的话再web.xml文件中会出错,所以要记住。

这样我们就写好了注册过程,有兴趣的还可以写一下登录过程。

Tomcat和Servlet是如何工作的

步骤:

  1. 浏览器向Servlet容器(Tomcat)发出Http请求
  2. Servlet容器接收浏览器的请求
  3. Servlet容器创建一个HttpResponse对象
  4. Servlet容器调用HttpServlet对象的init()方法,初始化配置参数,然后调用service方法分析请求方式,把HttpRequest对象与HttpResponse对象作为参数传给HttpServlet 对象。
  5. HttpServlet调用HttpRequest对象的有关方法,获取Http请求信息,并根据逻辑代码处理请求信息。
  6. HttpServlet调用HttpResponse对象的有关方法封装逻辑代码的执行结果,生成响应数据。

执行流程图:

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值