Servlet的应用一:注册系统

一:项目的框架

项目主要是由三部分组成: 

前端的页面   Servlet 以及 数据库


二:数据库设计部分

(1) 先建立数据库

(2)导入数据库连接池的jar包到utils目录下并且要把jar选择:set as a path,效果如下:

             jar包的左边有一个向右指的箭头

(3)在resources包下添加配置文件用来保存数据库连接池的信息

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/servlettest?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
username=root
password=root
# 初始化连接数量
initialSize=5
# 最大连接数
maxActive=10
# 最大等待时间
maxWait=3000

三:web前端设计部分

(1) 前端页面的设计

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>前端WEB页面</title>
</head>
<body>
<form action="registertest" method = "post">
    Username:<input type="text" name="username" ><br>
    Password:<input type="text" name="password"><br>
    Gender:<input type="radio" name="gender" value="female">男
    <input type="radio" name="gender" value="male">女<br>
    Interests: <input type="checkbox" name="interests" value="sport"> 运动
    <input type="checkbox" name="interests" value="read"> 阅读
    <input type="checkbox" name="interests" value="movie"> 电影<br>
    Gradution:<select name="gradution">
    <option value="gz">高中</option>
    <option value="dz">大专</option>
    <option value="bk">本科</option>
    <option value="ss">硕士</option>
</select><br>
    Profile:<textarea name="profile"></textarea><br>
    <input type="submit" value="提交"  >

</form>
</body>
</html>

效果如下:


四:Servlet的设计部分

package com.whx.servlet;

import com.whx.domain.User;
import com.whx.utils.DbUtils;

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 java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

@WebServlet(value="/registertest")
public class RegisterServlet extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        //获取前端的数据<单个的>
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        String gender = req.getParameter("gender");
        String gradution = req.getParameter("gradution");
        String profile = req.getParameter("profile");

        //获取前端的数据<多个的>
        String[] interests = req.getParameterValues("interests");

        //把部分从前端获取的数据进行处理

        //处理性别数据:
        String gen = "male".equals(gender) ? "M" : "F";

        //处理数组中的兴趣数据
        StringBuffer interestStringBuffer = new StringBuffer();

        for(String interest:interests){
            interestStringBuffer.append(interest+",");
        }

        String interestStr = interestStringBuffer.substring(0, interestStringBuffer.length() - 1);

        //调用把数据写入数据库的方法
        insertRegisterInfo(username,password,gen,gradution,profile,interestStr);

        //==========================根据用户名查询用户信息=====================
        User user = queryInfo(username);


//        ===================以下代码是响应给前端的============================
        //  设置写在html页面的字体的编码方式
        resp.setContentType("text/html;charset=utf-8");

        // 获取一个输出流,http的响应其实就是一个输出流
        PrintWriter writer = resp.getWriter();

        StringBuffer html = new StringBuffer();

        html.append("<html>")
                .append("<head></head>")
                .append("<body><h1>注册成功</h1>")
                .append("<p>用户名: " + user.getUsername() + "</p>")
                .append("<p>性别: " + user.getGender() + "</p>")
                .append("<p>描述: " + user.getProfile() + "</p>")
                .append("<p>兴趣爱好: " + user.getInterests() + "</p>")
                .append("</body></html>");

        writer.write(html.toString());
        writer.flush();
        writer.close();
    }


    //把数据写入到到数据库的过程封装成方法
    private void insertRegisterInfo(String username ,String password ,String gender , String gradution , String profiles, String interests){
        Connection conn = DbUtils.getConnection();
        String sql ="insert into user(username , password , gender,graduation,profile,interests) values(?,?,?,?,?,?)";


        try {
            //获取执行对象
            PreparedStatement preparedStatement = conn.prepareStatement(sql);

            //给占位符赋值
            preparedStatement.setString(1,username);
            preparedStatement.setString(2,password);
            preparedStatement.setString(3,gender);
            preparedStatement.setString(4,gradution);
            preparedStatement.setString(5,profiles);
            preparedStatement.setString(6,interests);

            //执行sql语句
            preparedStatement.executeUpdate();

            //释放资源
            DbUtils.close(null,preparedStatement,conn);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    private User queryInfo(String username){
        User user = new User();
        String sql ="select * from user where username = ?";

        //获取连接
        Connection conn = DbUtils.getConnection();

        try {
            //获取预处理对象
            PreparedStatement ps = conn.prepareStatement(sql);

            //给sql语句放数据
            ps.setString(1,username);

            //获取结果集
            ResultSet rs = ps.executeQuery();

            while (rs.next()){
                user.setId(rs.getInt("id"));
                user.setUsername(rs.getString("username"));
                user.setPassword(rs.getString("password"));

                //因为在数据库中男女存的是M或者F 所以在获取到性别信息之后要进行处理
                String gender = rs.getString("gender");  //获取到性别
                user.setGender(gender.equals("M")?"男":"女");   //设置性别

                //因为兴趣的返回值可能为sports,movie
                String interestsStr = rs.getString("interests");
                //将兴趣的字符串以逗号拆分成数组
                String[] interests = interestsStr.split(","); //["sport", "movie"]

                //拼接用户的爱好: 运动 电影 阅读
                StringBuffer interestStringBuffer = new StringBuffer();

                //循环的时候 interest 的值为: read sport  movie
                for(String interest:interests){
                    // 得到中文的兴趣爱好
                    String cnInterests = convertInterests(interest);  //这是把英文爱好转换为中文的方法
                    interestStringBuffer.append(cnInterests + " ");
                }
                //设置兴趣爱好: 运动 电影 阅读
                user.setInterests(interestStringBuffer.toString());
                user.setProfile(rs.getString("profile"));

            }

        } catch (SQLException e) {
            e.printStackTrace();
        }
        return user;

    }

    //定义将英文的兴趣爱好 转换为 中文的方法
    private String convertInterests(String enInterests){
        String cnInterests = null;
        switch (enInterests){
            case "sport":
                cnInterests = "运动";
            break;

            case "movie":
                cnInterests = "电影";
                break;

            case"read":
                cnInterests= "阅读";
                break;
        }
        return cnInterests;
    }

}


五:注意事项

(1) 放置jar包的lib目录设置的位置必须是web目录下-->WEB_INF-->lib   目录结构不能搞错


(2)Servlet中的注解@WebServlet() 中value的值对应的是html页面中action的值 两者的值必须是相同的,否则前端的请求无法找到对应的Servlet         

 

           value的值中一定一定要加上"/" 表示绝对路径

而HTML页面中的action中的值是不需要加上"/"的,因为他表示的是相对路径

(3)编码问题:

  •  在响应给HTML页面中要设置该页面的编码方式,以防中文的乱码现象
//  设置写在html页面的字体的编码方式
        resp.setContentType("text/html;charset=utf-8");

 

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值