Hello,JavaWeb
这是一个简单的账户密码登录界面。
很简单,如果登录成功,显示"登录成功! + 账户名";登录失败显示"登录失败,用户名或密码错误"
思路分析
- 创建JavaEE项目
- 编辑配置Tomcat —— 此时服务器应该是可运行的
- login.html界面 —— 写一个post方式提交的表单就行
- 数据库连接池框架(JDBCTemplate),连接与操作数据库
- 一个Servlet类对应loginServlet资源路径,failServlet和successServlet通过请求转发实现
结构分析
- 创建JavaEE项目时可指定工作空间位置,该工作空间对应IDEA左侧的目录。"真正的Web项目"是其中的web文件夹——tomcat文件夹会引用到那里。
- src与web并列,这不必多说
- dao为数据持久层,用来具体操作数据库,进行增删改查。
这里的UserDao类使用了JDBCTemplate对象(框架),获取该对象需要传参连接池(DataSourse),而连接池通过JDBCUtils工具类的静态方法获得。而JDBCUtils工具类不是从最底层实现的,而是使用了Druid自动注册驱动,获取连接池。 - 上面说到的JDBCUtils工具类放在utils目录下。因为这个JDBCUtils工具类是通过Druid实现的,因此把用到的druid.properties配置文件放在src下。
- domain目录下放的是javaBean标准类,用于封装数据。
- servlet目录为业务逻辑层,通过调用dao层来对数据库进行访问。loginServlet中,调用UserDao判断数据库中是否存在某个账户密码(请求参数),请求转发到failServlet或successServlet
- test目录不必多说。
- web根目录下是WEB-INF目录 + 其他资源(默认的是index.jsp)
- WEB-INF目录是web项目的安全目录,下面有web.xml(配置文件,高版本不需要)、classes(上面src目录下的类们,其字节码class文件都被放在此处)、lib(jar包通常放在这里)
- 重要的一点是,jar包一般都放在WEB-INF目录下的lib中;另外,WEB-INF的目录结构非常严格,lib写成libs也会出问题
BUG
▊ form表单的action路径的写法
虚拟目录 + 对应Servlet的资源路径(目的是调用到对应的Servlet资源,完成逻辑)
▊ JavaBean——标准的Java类
▶ 要求:
- 类必须被public修饰
- 必须提供空参的构造器
- 成员变量必须使用private修饰
- 提供公共setter和getter方法
▶ 理解:这种类通常放在domain包(目录)下。因为其标准性,因此可以用BeanUtils
的populate()
方法实现由键值对到对象的封装。当然本质作用还是存储数据。
▊ BeanUtils封装map失败的bug
不小心重写了toString()方法。删掉即可。
▊ jar包导入问题
通常是把jar包放在WEB-INF目录下的lib中。
WEB-INF的目录结构十分严格,写成libs是不行的。
▊ 使用druid数据库连接池技术时的bug
通常是由于druid.properties配置文件的问题造成的——
一来把druid.properties配置文件放在src目录下就可以;二来不要忘记修改配置(Driver全类名写新版本的、时区问题、账户密码问题)
▊ 易错点
使用注解,资源路径对Servlet资源进行映射时,资源路径忘了改(默认的是name="xxxxx"
)
需要把name删掉直接省略默认的value,并加上斜杠:"/资源路径"