JavaWeb学习大纲传送门
兄弟姊妹目录
- 页外链接目录:
-------------------------------<登录篇>-------------------------------
-------------------------------<作用域篇>----------------------------
-------------------------------<数据展示篇>-------------------------
本章学习目录
一,建立数据库
CREATE TABLE `tbl_user` (
`user_id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
`user_name` varchar(50) DEFAULT NULL,
`user_password` varchar(255) DEFAULT NULL,
`user_sex` int(11) DEFAULT NULL,
`user_hobbys` varchar(200) DEFAULT NULL,
`user_birthday` date DEFAULT NULL,
UNIQUE KEY `user_name` (`user_name`)
)
二,用jsp文件展示所需并在浏览器展示
- 通过register.jsp文件展示
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>注册</title>
</head>
<body>
<h2>用户注册</h2>
<form method="post" action="register.do">
账户:<input type="text" name="user_name"><br>
密码:<input type="password" name="user_password"><br>
性别:<input type="radio" name="user_sex" value="1">男
<input type="checkbox" name="user_sex" value="0">女<br>
爱好:<input type="checkbox" name="user_hobbys" value="打游戏">打游戏
<input type="checkbox" name="user_hobbys" value="美食">美食
<input type="checkbox" name="user_hobbys" value="文学">文学
<input type="checkbox" name="user_hobbys" value="艺术">艺术<br>
生日:<input type="date" name="user_birthday" ><br>
<button>注册</button>
<button type="reset">重置</button>
</form>
</body>
</html>
- 得到浏览器页面如下
三,通过servlet层获得页面输入
-
通过RegisterServlet.class文件获得输入的内容步骤
- 先通过request对象获得网页输入内容
- 调用servce服务层register方法并将输入的内容传入
- 这里是:逆向思维建类
package com.jazhong.servlet;
import com.jazhong.model.User;
import com.jazhong.service.UserService;
import com.jazhong.service.impl.UserServiceImpl;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
@WebServlet("/register.do")
public class RegisterServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
//设置编码集
request.setCharacterEncoding("UTF-8");
//正常获取
//request.getParameter()为获取字符串类型
String user_name=request.getParameter("user_name");
String user_password=request.getParameter("user_password");
//因为获得的是数字型所以转换用Integer.parseInt()进行转换
int user_sex=Integer.parseInt(request.getParameter("user_sex"));
//因为爱好是多个值所以用数组接收
String[] arrhobby=request.getParameterValues("user_hobbys");
//创建一个StringBuffer对象用于将爱好用-串联起来
StringBuffer strhobbys=new StringBuffer();
for (int i = 0; i < arrhobby.length; i++) {
//append方法为添加
strhobbys.append(arrhobby[i]).append("-");
}
//由于多了一个-,所以删除最后一个字符
strhobbys.deleteCharAt(strhobbys.length()-1);
//因为需要的是Date类型所以将字符串转化为Date型,用到SimpleDateFormat,parse(解析)
String strbirthday=request.getParameter("user_birthday");
Date user_birthday=new SimpleDateFormat("yyyy-MM-dd").parse(strbirthday);
//获得完数据,就要将数据提交给数据库,所以调用服务层
//然后在这里运用逆向建类的方法建立服务层的UserService,UserServiceImpl
UserService userService=new UserServiceImpl();
//运用建类逆向思维建立com.jazhong.model下的User类并设置getset方法
User user=new User();
//然后将得到的用户信息set进去
user.setUser_name(user_name);
user.setUser_password(user_password);
user.setUser_sex(user_sex);
user.setUser_hobbys(strhobbys.toString());
user.setUser_birthday(user_birthday);
userService.register(user);
//判断User不为空即注册成功
if (user!=null){
//user不为空就跳转到login,jsp页面
response.sendRedirect("/login.jsp");
}
} catch (ParseException e) {
e.printStackTrace();
//user为空则跳至registerfail.jsp
response.sendRedirect("registerfail.jsp");
}
}
}
四,编写service层
- 在servlet层通过逆向操作已经建立了:接口UserService,类UserServiceImpl,方法register
- 编写UserServiceImpl:
package com.jazhong.service.impl;
import com.jazhong.dao.UserDao;
import com.jazhong.dao.impl.UserDaoImpl;
import com.jazhong.model.User;
import com.jazhong.service.UserService;
import org.omg.PortableInterceptor.USER_EXCEPTION;
public class UserServiceImpl implements UserService {
@Override
public void register(User user) {
//逆向建类的方式建立com.jazhong.dao包和包下的UserDao,UserDaoImpl,方法addUser
UserDao userDao=new UserDaoImpl();
//调用方法addUser
userDao.addUser(user);
}
}
五,编写dao层与数据库建立联系
- 编写DbUtil类(这里只有增删改)被UserServiceImpl继承,看不懂这块的该复习JDBC:JDBC的复习
package com.jazhong.model;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
public class DBUtil {
protected Connection conn=null;
protected PreparedStatement ps=null;
protected ResultSet rs=null;
//获得连接
protected Connection getconn() throws ClassNotFoundException, SQLException {
Class.forName("com.mysql.jdbc.Driver");
conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/goods?useSSL=true","root","root");
return conn;
}
//资源释放
protected void closeall(){
try {
if (rs!=null){rs.close();}
if (ps!=null){ps.close();}
if (conn!=null){conn.close();}
} catch (SQLException throwables) {
throwables.printStackTrace();
} finally {
rs=null;
ps=null;
conn=null;
}
}
/**
* 考虑到sql和?占位符params的变化性(小编前面文章有)
* 该方法适于数据库的增,删,改
* @param sql 增删改语句
* @param params 设置?占位符 ...表示可变长的参数
*/
protected void myexecuteUpdate(String sql,Object... params){
try {
//调用获取连接方法
this.getconn();
ps=conn.prepareStatement(sql);
//设置?占位符params
if (sql!=null&¶ms.length!=0){
for (int i=0;i<params.length;i++){
ps.setObject(i+1,params[i]);
}
}
//判断是否操作成功
if (ps.executeUpdate()>0){
System.out.println("操作成功");
}else {
System.out.println("操作失败");
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException throwables) {
throwables.printStackTrace();
} finally {
this.closeall();
}
}
/**
* 根据某个信息查询这个人的所有信息
*/
protected List<User> myexecuteQuerylist(String sql, Object... params){
//提升作用域
List<User> list=null;
try {
this.getconn();
ps=conn.prepareStatement(sql);
if (sql!=null&¶ms.length!=0) {
for (int i = 0; i < params.length; i++) {
ps.setObject(i + 1, params[i]);
}
}
rs=ps.executeQuery();
list=new ArrayList<>();
if (rs.next()){
User user=new User();
user.setUser_id(rs.getInt(1));
user.setUser_name(rs.getString(2));
user.setUser_password(rs.getString(3));
user.setUser_sex(rs.getInt(4));
user.setUser_hobbys(rs.getString(5));
user.setUser_birthday(rs.getDate(6));
list.add(user);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
this.closeall();
}
return list;
}
}
- 编写UserDaoImpl:
package com.jazhong.dao.impl;
import com.jazhong.dao.UserDao;
import com.jazhong.model.DBUtil;
import com.jazhong.model.User;
public class UserDaoImpl extends DBUtil implements UserDao {
@Override
public void addUser(User user) {
//定义SQL语句
String sql="insert into tbl_user values(default,?,?,?,?,?)";
//调用DBUtil中的myexecuteUpdate方法,对数据库进行操作这里看不懂回去复习一下JDBC
super.myexecuteUpdate(sql,user.getUser_name(),user.getUser_password(),
user.getUser_sex(),user.getUser_hobbys(),user.getUser_birthday());
}
}
六,发布!填写!查看!
-
发布
-
填写
-
在数据库中查看