容县建设工程交易中心网站sem推广软件选哪家
一、创建web项目
这里选择创建Jakarta EEweb项目
注意: Jakarta EE只有在IDEA2020.2版本之后才有。
Tomcat最好选择8.5或者9.0,这两个版本比较稳定。
启动服务器,看看是否能正常启动。
二、创建相关的包

三、编写登录页面

login.jsp代码如下:
<%--Created by IntelliJ IDEA.User: lenovoDate: 2025/2/15Time: 10:14To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>登录页面</title><style>.formBox{border: 1px solid #e82222;position: absolute;top: 100px;right: 150px;}.formBox>.titleBox{color: #db6414;font-weight: bold;text-align: center;}.itemBox{border: 1px solid aquamarine;margin: 20px 10px;}.itemBox>label{width: 60px;display: inline-block;background-color: #c9a882;}.itemBox>input{border: none;outline: none;font-size: 18px;background-color: lightgrey;}.btnBox{text-align: center;}.btnBox>button{height: 38px;width: 70px;border: none;background-color: burlywood;border-radius: 5px;}.btnBox>button:hover{background-color: red;}</style>
</head>
<body>
<form action="/myweb3/doLogin" method="post"><div class="formBox"><div class="titleBox"><h1>小米商城</h1></div><div class="itemBox"><label>用户名:</label><input type="text" name="username"></div><div class="itemBox"><label>密码:</label><input type="password" name="password"></div><div class="btnBox"><button type="submit">login</button></div></div>
</form>
</body>
</html>
重新启动Tomcat,看是否能显示login.jsp页面
四、创建一个mysql用户表
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (`id` int(11) NOT NULL,`username` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`password` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`nickname` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES (1, 'zhangsan', '123456', '张小三');
INSERT INTO `user` VALUES (2, 'wangwu', '666666', '王小五');SET FOREIGN_KEY_CHECKS = 1;
SQL语句和结果图如上
五、创建LoginServlet
创建登录核心执行类
@WebServlet("/doLogin")
public class LoginServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//防止出现乱码req.setCharacterEncoding("GBK");resp.setCharacterEncoding("GBK");String username = req.getParameter("username"); //和login.jsp的username一致String password = req.getParameter("password"); //和login.jsp的password一致//打印一下是否能正确获取System.out.println(username+":"+password);}
}
我们可以看到@WebServlet("/doLogin")这里的doLogin名称是login.jsp的form里action的名字是一致的,即提交表单时执行该类代码。
重启Tomcat并输入用户名和密码,看是否能正确在java控制台打印
六、创建User类
在bean包下创建User类,字段和格式与mysql表中的user表一致。
字段类型如下:
public class User {private int id;private String username;private String password;private String nickname;public User() {}public User(int id, String username, String password, String nickname) {this.id = id;this.username = username;this.password = password;this.nickname = nickname;}//创建get和set方法public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getNickname() {return nickname;}public void setNickname(String nickname) {this.nickname = nickname;}@Overridepublic String toString() {return "User{" +"id=" + id +", username='" + username + '\'' +", password='" + password + '\'' +", nickname='" + nickname + '\'' +'}';}
}
七、JDBC连接数据库
1、获取驱动
这里使用数据库链接池连接数据库。
首先获取Druid和mysql连接驱动。
通过网盘分享的文件:java驱动
链接: https://pan.baidu.com/s/1PkQPTsGo5OG31hrx2cYeVQ?pwd=6666 提取码: 6666
mysql版本为5点几下载那个驱动5的,mysql8点几版本的下载那个驱动8的
2、将驱动放入项目中
把两个驱动添加进去
可以看出已经放入项目包中
3、创建JDBCUtil类
在util包下创建:
JDBCUtil具体代码如下:
public class JDBCUtil {// 数据库连接信息(换成自己的)//这里school为数据库,需要换成你的user表所在的数据库private static final String URL = "jdbc:mysql://localhost:3306/school?characterEncoding=utf-8&useSSL=false&serverTimezone=UTC";private static final String USER = "root";private static final String PASSWORD = "123456";//mysql8版本的驱动换成"com.mysql.cj.jdbc.Driver"private static final String driverClassName="com.mysql.jdbc.Driver";//数据库连接池private static final DruidDataSource ds;private static Connection conn = null;static {ds=new DruidDataSource();//初始化的数量不能大于最大活跃数量ds.setInitialSize(3);ds.setMaxActive(5);ds.setMaxWait(3000);ds.setDriverClassName(driverClassName);ds.setUrl(URL);ds.setUsername(USER);ds.setPassword(PASSWORD);}//获取链接public static Connection getConnection() {if(conn==null){try {conn= ds.getConnection();} catch (SQLException e) {e.printStackTrace();}}return conn;}//关闭所有链接public static void closeAll(ResultSet rs, PreparedStatement ps, Connection connection){try {if(rs!=null){rs.close();}} catch (SQLException e) {e.printStackTrace();}try {if(ps!=null){ps.close();}} catch (SQLException e) {e.printStackTrace();}try {if(connection!=null){connection.close();}} catch (SQLException e) {e.printStackTrace();}}//关闭connpublic static void closeConnection(){try {conn.close();} catch (SQLException e) {throw new RuntimeException(e);}}//获取所有查询结果public static <T> List<T> selectAll(Class<T> clazz, String sql, Object... params){//创建链接Connection connection = getConnection();//创建预编译对象PreparedStatement ps = null;ResultSet rs = null;ResultSetMetaData metaData = null;List<T> list = new ArrayList<T>();try {ps=connection.prepareStatement(sql);for(int i=0;i<params.length;i++){ps.setObject(i+1,params[i]);}rs=ps.executeQuery();metaData = rs.getMetaData();int columnCount = metaData.getColumnCount();while(rs.next()){//反射创建实例对象T obj=clazz.newInstance();//列名for(int i=1;i<=columnCount;i++){String col_name = metaData.getColumnName(i);Object col_value= rs.getObject(col_name);Field field=clazz.getDeclaredField(col_name);//设置允许访问权限field.setAccessible(true);field.set(obj,col_value);}list.add(obj);}} catch (SQLException e) {e.printStackTrace();} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (NoSuchFieldException e) {e.printStackTrace();}finally {closeAll(rs,ps,null);}return list;}
}
注意:
1)数据库信息换成自己的。
2)mysql 8版本的驱动为com.mysql.cj.jdbc.Driver
4、创建Test测试类看是否能连接数据库
Test类代码如下:
public class Test {//测试数据库是否能连接成功public static void main(String[] args) {//编写sql语句String sql1="select * from user";String sql2="select * from user where username=? and password=?";List<User> list1 = JDBCUtil.selectAll(User.class, sql1);System.out.println(list1.toString());List<User> list2 = JDBCUtil.selectAll(User.class, sql2, "zhangsan", "123456");System.out.println(list2.toString());}
}
可见成功连接数据库
八、创建正则表达式类
在util包下创建SysUtil类,作为验证用户输入格式的正则表达式类
SysUtil类代码如下:
public class SysUtil {//正则表达式//匹配长度在6到16个字符之间的字符串,且字符串只能包含字母、数字或下划线。public static final String Reg6_16="^\\w{6,16}$";public static final String LOGIN_DATA="loginData";public static boolean checkLoginData(String...loginData){if(loginData.length==0){return false;}for(String s:loginData){if(!s.matches(Reg6_16)){return false;}}return true;}
}
九、在WEB-INF下创建lib包,将驱动放进去
不放会页面出现500
十、继续编写LoginServlet类
该类的剩余功能业务是:
1)验证用户名是否合法
2)用户和密码是否正确
代码如下:
@WebServlet("/doLogin")
public class LoginServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//防止出现乱码req.setCharacterEncoding("GBK");resp.setCharacterEncoding("GBK");String username = req.getParameter("username");String password = req.getParameter("password");System.out.println(username+":"+password);if(SysUtil.checkLoginData(username,password)){List<User> list = JDBCUtil.selectAll(User.class, "select * from user where username=? and password=?", username, password);//获取该数据库中是否有该条数据User user_data=list.get(0);//判断list是否有数据if(list.size()==1){//好像有点冗余了if(username.equals(user_data.getUsername())&&password.equals(user_data.getPassword())){//将用户名和密码保存到session中,以便用户之后登录//SysUtil.LOGIN_DATA 这里取个字符串名字即可,不过这样更加规范req.getSession().setAttribute(SysUtil.LOGIN_DATA,user_data);System.out.println("验证成功");resp.getWriter().write("登录成功");return;}}}return;}
}
十一、创建success.jsp登录成功页面
其实主要业务到上面已经基本完成,如果想要再显示登录成功页面的可以继续往下看。
1、创建success.jsp页面
2、在LoginServlet里加入下面一句代码即可
重新启动,最终页面如下:
这里其实使用了response的重定向,从当前页面转到其他页面。