web项目(用户注册)(web分层结构)
web项目中的分层:dao--service--servlet--jsp。
0.在idea中创建web项目,配置Tomcat9。file--project structure--modules--dependencies+(添加Tomcat9.0),这样才可以使用servlet和jsp
0.1在web-inf下创建lib文件夹,存放jar包:c3p0-0.9.1.2.jar(开源的JDBC连接池)/commoms-dbutils-1.7.jar/hamcrest-core-1.3.jar(核心包)/jstl-1.2.jar/jutil-4.12.jar(测试)/ojdbc6.jar(连接数据
库)/log4j-4.12.jar(记录日志)。
1.在conf(Resource Root)文件夹下创建 c3p0-config.xml ,配置数据库的连接(注意是中划线,且名称不能写错)
<?xml version="1.0" encoding="UTF-8" ?>
<c3p0-config>
<default-config>
<property name="user">scott</property>
<property name="password">tiger</property>
<property name="jdbcUrl">jdbc:oracle:thin:@localhost:1521:orcl</property>
<property name="driverClass">oracle.jdbc.driver.OracleDriver</property>
</default-config>
</c3p0-config>
1.1在conf(Resource Root)文件夹下创建 Resource bundle命名为log4j.properties。(表示不懂)
#debug 指的是记录日志的级别-info-warn-error
#a 表示记录日志的位置
log4j.rootLogger=debug,a,b
#分别指明a和b代表的位置
#表示a是指控制台的输出
log4j.appender.a=org.apache.log4j.ConsoleAppender
#控制台输出的目标,使用哪个命令输出异常信息
log4j.appender.a.Target=System.out
#设置输出日志的格式要求,使用模板布局
log4j.appender.a.layout=org.apache.log4j.PatternLayout
#指定模板 %d表示日期 %m异常的信息 %n表示换行
log4j.appender.a.layout.ConversionPatten=%d{yyyy-MM-dd HH:mm:ss} %m%n
#输出文件
log4j.appender.b=org.apache.log4j.FileAppender
log4j.appender.b.File=E:\\error.log
log4j.appender.b.layout=org.apache.log4j.PatternLayout
log4j.appender.b.layout.ConversionPatten=%d{yyyy-MM-dd HH:mm:ss} %m%n
2.在src 中创建com.neu.util包中DButil(连接数据库了)
private static ComboPooledDataSource ds=new ComboPooledDataSource();
//获取连接数据库的数据源
public static DataSource getDataSource(){
return ds;
}
3.在src中创建com.neu.dao包中的YongHuDao(与数据库连接)
//用户信息的添加
public int saveYonghu(String zhanghao,String mima,String mingcheng,String dianhua,String youxiang){
int row=0;
//sql语句换行必须加空格
//尽量在plsql中编写sql语句,然后复制
String sql="insert into t_yonghu(yh_id,yh_zhanghao,yh_mima,yh_mingcheng,yh_dianhua,yh_youxiang)values " +
"(seq_book_id.nextval,?,?,?,?,?)";
//创建dbutils包中的QueryRunner对象,其实就是我们以前使用的statement
QueryRunner qr=new QueryRunner(DBUtil.getDataSource());
//QueryRunner的update方法可以执行insert/delete/update方法。query方法可以执行select方法。
try {
row=qr.update(sql,zhanghao,mima,mingcheng,dianhua,youxiang);//括号中存放sql语句,其次给?赋值
} catch (SQLException e) {
throw new RuntimeException(e);//异常
}
return row;
}
4.在src中创建com.neu.service包中的YongHuService(与dao层连接)
public boolean doSave(String zhanghao,String mima,String mingcheng,String dianhua,String youxiang){
YongHuDao yongHuDao=new YongHuDao();
boolean flag=false;
try {
int row=yongHuDao.saveYonghu(zhanghao,mima,mingcheng,dianhua,youxiang);
if(row>0){
flag=true;
}
} catch (Exception e) {
logger.debug(e);
//使用log4j记录日志 把异常信息写入到文件中(可不写)
}
return flag;
}
5.直接在web文件夹下创建success.jsp/fail.jsp/yonghuzhuce.jsp。
fail.jsp:
<body>
操作失败!!5秒后自动返回或点击<a href="#" onclick="history.back()">返回</a>
</body>
<script type="text/javascript">
function myback() {
history.back();
}
setTimeout("myback()",5000);//只执行一次,5秒后执行myback()函数
//setInterval("myback()",5000);//每隔5秒执行一次
</script>
yonghuzhuce.jsp:
<body>
<div>
<form action="YongHuZhuCeServlet.do" method="post">
<table>
<tr>
<td>账号</td><td><input type="text" name="zhanghao" id="zhanghao"></td>
</tr>
<tr>
<td>密码</td><td><input type="password" name="mima" id="mima"></td>
</tr>
<tr>
<td>姓名</td><td><input type="text" name="mingcheng" id="mingcheng"></td>
</tr>
<tr>
<td>电话</td><td><input type="text" name="dianhua" id="dianhua"></td>
</tr>
<tr>
<td>邮箱</td><td><input type="text" name="youxiang" id="youxiang"></td>
</tr>
<tr>
<td style="align-content: center">
<input type="submit" value="注册">
</td>
</tr>
</table>
</form>
</div>
</body>
6.在src中创建com.neu.servlet包中的YongHuZhuCeServlet(与service,jsp层连接)
在doPost方法中写入:
//处理以post方式提交的请求
request.setCharacterEncoding("UTF-8");//post方式处理中文乱码
String zhanghao=request.getParameter("zhanghao");//获取jsp表单中的数据
String mima=request.getParameter("mima");
String mingcheng=request.getParameter("mingcheng");
String dianhua=request.getParameter("dianhua");
String youxiang=request.getParameter("youxiang");
YongHuService yongHuService=new YongHuService();//创建service中的对象
boolean flag=yongHuService.doSave(zhanghao,mima,mingcheng,dianhua,youxiang);
if(flag){
//重定向
response.sendRedirect("success.jsp");
}else {
response.sendRedirect("fail.jsp");
}