idea创建javaweb项目并配置tomcat

配置tomcat

我的项目包结构如下,其中在web/WEB_INF 目录下创建两个文件夹:classes和lib( classes 用来存放编译后输出的class 文件,lib用于存放第三方jar包)

配置文件夹路径  File -> ProjectStructure (ctrl + shift + Alt + s)或者使用工具栏的快捷键 -> 选择Modules->选择Paths -> 选择“Use module compile out path”-> 将Outputpath 和Test outputpath 都设置为刚刚创建的classes文件夹

 File -> ProjectStructure (ctrl + shift + Alt + s)或者使用工具栏的快捷键 -> 选择Modules -> 选择Dependencies -> + -> 选择 “1JARS or directories ...” -> 选择刚刚创建的lib文件夹 -> OK

举个例子

controller:登陆界面(同时设置7天免登录)

@WebServlet("/login")
public class Login extends HttpServlet {
    private static final long serialVersionUID = 1L;
    private AccountService service;

    public Login(){
        super();
    }

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

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 封装数据(如果为空->4)
        // 1.1声明一个存储对象的容器
        Account account = null;
        String sign = null; // 复选框
        String USER_NAME =  null;
        String PASSWORD = null;
        // 1.2从参数中获取对象
        USER_NAME = req.getParameter("uname");
        PASSWORD = req.getParameter("pwd");
        sign = req.getParameter("sign");
        if (USER_NAME!=null && PASSWORD!=null){
            account = new Account(USER_NAME,PASSWORD);
        }else {
            // 1.3如果参数为获取数据,则从cookie中获取
            // 1.3.1获取cookie数据
            Cookie[] arr = req.getCookies();
            // 1.3.2利用循环对cookie数组进行遍历,判断是否有密码存储
            for (Cookie ck : arr){
                if ("uname".equals(ck.getName())){
                    USER_NAME = ck.getValue();
                }
                if ("pwd".equals(ck.getName())){
                    PASSWORD = ck.getValue();
                }
            }
            // for循环结束后,将数据进行封装
            if (USER_NAME!=null && PASSWORD!=null){
                account = new Account(USER_NAME,PASSWORD);
            }
        }
        // 1.4判断是否都没有拿到数据,如果都没有数据则返回login.jsp不再执行以下代码
        if (account == null){
            resp.sendRedirect("index.jsp");
            return; // 后续不再执行
        }
        // 2.实例化service对象
        service = new AccountServiceImpl();
        // 3.调用方法:更具用户名和密码查询用户信息,如果没有返回null
        account = service.login(account);
        // 4.根据返回结果进行操作
        if (account == null){
            // 4.1如果返回null,则登陆失败,重定向到index.jsp页面
            resp.sendRedirect("index.jsp?msg=1");
        }else {
            // 4.2查到了用户信息,则登陆成功,将用户信息存储到session中,重定向到page/index.html
            // 4.2.1从request中获取session对象
            HttpSession session = req.getSession();
            // 4.2.2将用户信息存储到session对象的属性
            session.setAttribute("accountInfo",account);
            // 4.2.3判断免登录系统是否被选中,如果选中了,则建立cookie,存储用户名和密码,将cookie添加到response
            if (sign !=null){
                // 创建两个cookie对象
                Cookie ck_name = new Cookie("uname",account.getUname());
                Cookie ck_pwd = new Cookie("pwd",account.getPwd());
                // 设置cookie的属性(cookie的生命周期)
                int day = Integer.parseInt(sign);
                ck_name.setMaxAge(60*60*24*day);
                ck_pwd.setMaxAge(60*60*24*day);
                // 将cookie对象添加到respond中
                resp.addCookie(ck_name);
                resp.addCookie(ck_pwd);
            }
            // 4.2.4页面重定向
            resp.sendRedirect("page/index.html");
        }
    }
}

service

public interface AccountService {
    Account login(Account account);
}

实现类

public class AccountServiceImpl implements AccountService {
    private AccountDao dao;
    public AccountServiceImpl(){
        dao  = new AccountDaoImpl();
    }

    @Override
    public Account login(Account account) {
       return dao.login(account);
    }
}

dao

public interface AccountDao {
    Account login(Account account);
}

实现类

public class AccountDaoImpl implements AccountDao {
    private DBTool dbt;

    @Override
    public Account login(Account account) {
        // 准备SQL语句
        String sql  = "select uid,uname,pwd,rid from account where uname=? and pwd=?";
        // 准备数据容器
        Account a = null;
        // 实例化dbt对象
        dbt = new DBTool();
        // 调用方法
        try{
        ResultSet rs = dbt.query(sql,account.getUname(),account.getPwd());
            System.out.println(rs.toString());
        if (rs.next()){
            a = new Account(rs.getInt(1),rs.getString(2),rs.getString(3),rs.getInt(4));
        }
        }catch (SQLException e){
            e.printStackTrace();
        }
        // 关闭资源
        dbt.close();
        // 返回结果
        return a;
    }
}

entity:实体类 Account

util:工具类 关于数据库

(我的数据库是MySQL 8)

db.properties

DRIVER=com.mysql.cj.jdbc.Driver
URL=jdbc:mysql://localhost/test?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
USERNAME=数据库用户名
PASSWORD=数据库密码
public class DBConfig {
    // 实例化一个静态的读取属性文件的对象
    private static Properties prop = new Properties();

    // 静态代码块加载属性文件
    static {
        try {
            prop.load(DBConfig.class.getResourceAsStream("db.properties"));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    // 将属性文件中的各个属性封装到静态常量中
    public static final String DRIVER = prop.getProperty("DRIVER");
    public static final String URL = prop.getProperty("URL");
    public static final String USERNAME = prop.getProperty("USERNAME");
    public static final String PASSWORD = prop.getProperty("PASSWORD");
}
public class DBTool {
    private Connection conn;
    private Statement stat;
    private PreparedStatement prep;

    public DBTool() {
        // 连接数据库:
        try {
            // 反射加载驱动
            Class.forName(DBConfig.DRIVER);
            // 建立连接
            conn = DriverManager.getConnection(DBConfig.URL, DBConfig.USERNAME, DBConfig.PASSWORD);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    // 执行增删改方法
    public int update(String sql) throws SQLException {
        // 实例化一个statement对象
        stat = conn.createStatement();
        // 执行SQL语句
        int temp = stat.executeUpdate(sql);
        // 返回结果
        return temp;
    }

    // 重载增删改(包含问号占位符时)
    public int update(String sql, Object... arg) throws SQLException {
        prep = conn.prepareStatement(sql);
        for (int i = 1; i <= arg.length; i++) {
            prep.setObject(i, arg[i-1]);
        }
        int temp = prep.executeUpdate();
        return temp;
    }

    // 查询
    public ResultSet query(String sql) throws SQLException {
        stat = conn.createStatement();
        ResultSet rs = stat.executeQuery(sql);
        return rs;
    }

    // 查询重载
    public ResultSet query(String sql, Object... arg) throws SQLException {
        prep = conn.prepareStatement(sql);
        for (int i = 1; i <= arg.length; i++) {
            prep.setObject(i, arg[i-1]);
        }
        ResultSet rs = prep.executeQuery();
        return rs;
    }

    // 关闭资源:先开后关
    public void close() {
        try {
            if (stat != null && !stat.isClosed()) {
                stat.close();
            }
            if (prep!=null&& !prep.isClosed()){
                prep.close();
            }
            if (conn!=null&& !conn.isClosed()){
                conn.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

可能遇到的问题:!!!

tomcat乱码

html乱码(记得清除一下浏览器缓存!!!)

乱码问题参考:https://blog.csdn.net/f_ys2128/article/details/107966829?utm_medium=distribute.pc_relevant.none-task-blog-title-2&spm=1001.2101.3001.4242

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值