最近学习了MVC(进度有点慢,刚考完驾照 这个暑假可以专心搬砖了)
采用的技术:
主体:MVC+Servlet+JSP+JDBC
封装数据:BeanUtils重构
封装数据操作:Dbutils重构
封装数据库连接:C3P0连接池重构 (用到了动态代理扩展方法)
准备将之前所学的零零散散的知识串起来 写了一个简单完整的登陆注册小demo 。
可以简单来回顾下MVC模型
M: model层 控制与数据库之间的数据操作
V:view视图层,用来展示数据
C:control控制层,只要用来转发重定向选择跳转的页面
两个问题:
问题一:缺少jar包:
WEB-INF下lib文件中应该添加如下三个jar包 然后添加到项目path中
//jsp页面需要
1. jsp-api.jar
//servlet需要
2. servlet-api.jar
//数据库连接需要
3. mysql-connector-java-8.0.11.jar
//beanutils需要,方便封装数据
4. commons-beanutils-1.9.3.jar
5. commons-logging-1.2.jar
//dbutils需要,方便封装对数据库的操作
6. commons-dbutils-1.7.jar
//c3p0连接池必须
7. c3p0-0.9.5.2.jar
8. mchange-commons-java-0.2.11.jar
如果项目下载来有红叉叉,先检查build path 的jar是否导错
然后可以将web.xml重新加载一遍(可以删掉然后重新创建)
这几个jar我都放在百度云可供下载,是最新的。
https://pan.baidu.com/s/1BCzTFMCW9un65o_es7SlLg
还有其他零散需要注意的:
注意点1:
${pageContext.request.contextPath}
<%=request.getContextPath()%>
用于解决使用相对路径时出现的问题,它的作用是取出所部署项目的名字。
应用 :表单
注意2:
错误页面:
第一种是自定义异常类
为什么需要自定义异常类呢 比如 视图层是用来显示数据的,最好不要有逻辑判断 来根据错误类型显示内容。这个时候就用自定义异常类,当你try抛出异常类的时候,如:
throw new TeacherException("注册失败,该账号已被注册");
根据异常类的类型,执行不同的显示操作
catch (TeacherException e)
{System.out.println(e.getMessage());}
catch (Exception e)
{e.printStackTrace();}
第二种配置错误跳转页面:
<error-page>
<error-code>404error-code>
<location>/error/404.jsplocation>
error-page>
<error-page>
<error-code>500error-code>
<location>/error/500.jsplocation>
error-page>
注意:如果是语法错误,它是不会被catch的exception异常类捕获
这个时候要采用上面的配置全局错误跳转页面。
catch (Exception e)
{e.printStackTrace();}
但是类似于:这类是会被catch的exception异常类捕获
int a=3/0;
注意3:
dao层和service层都需要定义接口
注意4:
转发和重定向:
request.getContextPath()获取当前项目地址
转发:
1. 是服务器端操作,
2. 地址是内部跳转 不需要加项目名
3. 转发后的代码不会执行
4. 可以传输数据,放到request中
5. 执行效率高点
重定向:
1. 是浏览器端操作
2. 地址是浏览器与服务器之间跳转,需要加项目名:
3. 重定向后的代码也会执行
4. 不能保存转发数据
5. 执行效率低点
跳转错误页面我都是用重定向,其他页面跳转一般用转发,因为一般涉及到数据的传输
//转发
request.getRequestDispatcher(“/index.jsp”).forward(request, response);
//重定向
response.sendRedirect(request.getContextPath()+”/error/error.jsp”);