简单的登录案例

大体思路
将网页传递的数据提取关键数据调用数据库操作的类,返回从数据库获得的信息,显示到网页上。
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
来源:CSDN
作者:无情的打字机器
链接:https://blog.csdn.net/qq_39379275/article/details/104567356