登录案例

半城伤御伤魂 提交于 2020-02-29 15:47:42

简单的登录案例

大体图

大体思路

将网页传递的数据提取关键数据调用数据库操作的类,返回从数据库获得的信息,显示到网页上。


login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录界面</title>
</head>
<body>
    <form action="/days_tomcat02/LoginServlet" method="post">
        <input type="text" name="username"><br>
        <input type="password" name="password"><br>
        <input type="submit" value="登录">
    </form>
</body>
</html>

action中为 : 虚拟目录+servlet的资源路径
1.对文件的访问什么时候要加虚拟目录,什么时候不需要加?
2.文件在tomacat中是如何部署的?
根据存储地方的不同可分为3类,可通过context.getRealPath()来获取文件的服务器路径
web: /文件名
web/WEB-INF: /WEB-INF/文件名
src: /WEB-INF/classes/文件名


UserDao.java

ublic class UserDao {

    /**
     * 登录方法
     * @param loginUser 用户名和用户密码
     * @return 包含用户的全部信息
     */

    //声明JDBCTemplate对象共用
    private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());

    public User login(User loginUser){

        try {
            String sql = "select * from user where username = ? and password = ?";

            User user = template.queryForObject(sql,new BeanPropertyRowMapper<>(User.class),
                    loginUser.getUsername(),loginUser.getPassword());
			//使用template.queryForObject(执行查询的语句,封装的对象,执行查询时需要传递的参数)
            return user;
        } catch (DataAccessException e) {
            e.printStackTrace();
            return null;
        }
    }
}

1.数据库连接池的好处和底层工作原理?
数据库连接池相当于一个容器,里面存储了连接对象,用户连接的时候调用,不需要的时候释放。好处就是加快响应速度,节约系统资源。


JDBCUtils

/**
 * JDBC工具类 使用Durid连接池
 */
public class JDBCUtils {

    private static DataSource ds;
    
    static {
        try {
            //1.加载配置文件
            Properties pro = new Properties();
            //使用ClassLoader加载配置文件,获取字节输入流
            InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");
            pro.load(is);
			//为什么是classpath而不是src,因为当web项目运行时,IDE编译器会把src下的一些资源文件移至WEB-INF/classes,classPath目录其实就是这个classes目录。这个目录下放的一般是web项目运行时的class文件、资源文件(xml,properties...);
            //2.初始化连接池对象
            ds = DruidDataSourceFactory.createDataSource(pro);

        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /**
     * 获取连接池对象
     */
    public static DataSource getDataSource(){
        return ds;
    }

    /**
     * 获取Connection对象
     */

    public static Connection getConnection() throws SQLException {
        return ds.getConnection();
    }
}

1.JUBCUtil?
不用管,JDBC的工具类,知道怎么用就行。

fail 0r successServelt.java

@WebServlet("/successServlet")
public class SuccessServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取request域中的共享的user对象
        User user = (User) request.getAttribute("user");
        //给页面一句话
        if (user != null){

            //设置编码
            response.setContentType("text/html;charset=utf-8");

            //输出
            response.getWriter().write("登录成功,欢迎"+user.getUsername()+"进入");
        }

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request,response);
    }
}

1.共享域?
request域中的对象只能在本模块中使用

2.转发和重定向的区别?
1.从地址栏显示来说

forward是服务器请求资源,服务直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址.

redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.

2.从数据共享来说

forward:转发页面和转发到的页面可以共享request里面的数据.

redirect:不能共享数据.

3.从运用地方来说

forward:一般用于用户登陆的时候,根据角色转发到相应的模块.

redirect:一般用于用户注销登陆时返回主页面和跳转到其它的网站等.

4.从效率来说

forward:高.

redirect:低.

来源 https://www.iteye.com/blog/hejiajunsh-1773304

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!