java web 学习记录一下
-
mvc结构实现mysql 连接
-
什么是mvc
- MVC是模型(model)、视图(view)、控制(controller)这三个单词上的首字母组成。它是一种应用模型,它的目的是实现Web系统的职能分工。避免all in one 所有代码全部写在一个文件里的一种分工模型。
-
实现简单登录功能
- 登录成功,进入sccess.jsp界面,失败返回首页,并输出密码错误
数据库简单编写
- 创建数据库
create database student;
- 创建表
create table tbl_user( userId varchar(11) not null primary key, passWord varchar(255) not null );
- 导入数据
insert into tbl_user (userId,passWord) values ('admin','1234'); insert into tbl_user (userId,passWord) values ('张三','1234');
idea上准备工作
- 创建一个干净的meavn项目
- 把该项目添加web项目
导入依赖
- junit 是为了便于测试
- 其他是一些基础包
- mysql 连接数据库
- servlet-api servlet服务
- jsp-api
- jstl 写el表达式
<dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.27</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.2.1-b02</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> </dependency> </dependencies>
连接数据库
- 使用idea连接本地数据库
编写实体类User
public class User { private String userId; private String passWord; public String getUserId() { return userId; } public void setUserId(String userId) { this.userId = userId; } public String getPassWord() { return passWord; } public void setPassWord(String passWord) { this.passWord = passWord; } }
UserDao层接口
public interface UserDao { public boolean getUser(String userID,String userPassWord); }
UserDaoImpl实现类
public class UserDaoImpl implements UserDao{ private String driver = "com.mysql.cj.jdbc.Driver"; private String url = "jdbc:mysql://localhost:3306/student"; private String root = "root"; private String password = "123456"; @Override public boolean getUser(String userID,String userPassWord) { boolean flag = false; Connection conn = null; PreparedStatement pstm = null; ResultSet rs = null; String sql = "select * from tbl_user where userId = ? and passWord = ?"; try { Class.forName(driver); conn = DriverManager.getConnection(url,root,password); pstm = conn.prepareStatement(sql); pstm.setString(1,userID); pstm.setString(2,userPassWord); rs = pstm.executeQuery(); if(rs.next()){ flag = true; } } catch (Exception e) { e.printStackTrace(); }finally{ try { rs.close(); pstm.close(); conn.close(); } catch (SQLException throwables) { throwables.printStackTrace(); } } return flag; } }
UserService层接口
public interface UserService { public boolean Login(String userId,String userPassWord); }
UserServiceImpl实现类
public class UserServiceImpl implements UserService{ @Override public boolean Login(String userId, String userPassWord) { boolean flag = false; UserDao userDao = new UserDaoImpl(); flag = userDao.getUser(userId,userPassWord); return flag; } }
编写LoginServlet服务层
public class LoginServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { boolean flag = false; String userId = req.getParameter("userName"); String userPassWord = req.getParameter("userPassWord"); UserService userService = new UserServiceImpl(); flag = userService.Login(userId,userPassWord); if(flag){ User user = new User(); user.setUserId(userId); user.setPassWord(userPassWord); req.getSession().setAttribute("user",user); resp.sendRedirect("jsp/success.jsp"); }else{ req.setAttribute("msg","用户错误"); req.getRequestDispatcher("login.jsp").forward(req,resp); } } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }
配置web.xml文件
- servlet3.0之后可以使用注解,不用配置这个文件,但是是初学者,还是先学会配置web.xml文件
<servlet> <servlet-name>loginServlet</servlet-name> <servlet-class>com.hjk.servlet.LoginServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>loginServlet</servlet-name> <url-pattern>/login</url-pattern> </servlet-mapping>
编写login.jsp 界面
- 简单的写了一下,一个表单的提交功能
<form action="login" method="post"> <table> <tr><span style="color: aquamarine">${requestScope.msg}</span></tr> <tr> <td>用户名:</td><td><input type="text" name="userName"/></td> </tr> <tr> <td>密码</td><td><input type="password" name="userPassWord"/></td> </tr> <tr> <td></td> <td> <input type="submit" value="submit"/> <input type="reset" value="reset"> </td> </tr> </table> </form>
- 写一个登录成功界面sccess.jsp
-这个文件在web问价夹下面,本来想写一个拦截器,没有登录不能直接访问后面的界面,现在还没有写
<h1><span style="text-align: center"><span style="color: deeppink" >欢迎您,${sessionScope.user.userId}登录成功</span></span></h1>
- 如果登录失败就返回登录界面
idea默认会先访问index.jsp界面,这里在web.xml配置一下,让他直接访问login.jsp
<welcome-file-list> <welcome-file>/login.jsp</welcome-file> </welcome-file-list>
已经可以登录了,但是还是存在中文乱码,编写一个过滤器CharacterEncoding,让它处理中文乱码
- 这个包必须导入
import javax.servlet.*;
public class CharacterEncoding implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { servletRequest.setCharacterEncoding("utf-8"); servletRequest.setCharacterEncoding("utf-8"); //不执行filterChain就会一直卡在这里,相当于一直拦截 filterChain.doFilter(servletRequest,servletResponse); } @Override public void destroy() { } }
- 为过滤文件配置web.xml
<filter> <filter-name>characterEncoding</filter-name> <filter-class>com.hjk.filter.CharacterEncoding</filter-class> </filter> <filter-mapping> <filter-name>characterEncoding</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
结果展示
-
初始界面
-
登录失败界面
-
登录成功;不加过滤器张山是不能登录成功的
-
admin
-
张三
文件的整体结构
一些注意点
- 导包的时候一定要到对
- idea有可能在测试的时候没有lib包这个时候需要自己添加lib问价夹,并且把相应的依赖都添加进去
- 服务器报404 一般是路径错误(比较好解决)
- 500 可能是一些代码错误,或者jar没到入
热门文章
- Java 通过手写分布式雪花SnowFlake生成ID方法详解_java
- 【和弦图】
- kerberos认证python_python confluent kafka客户端配置kerberos认证
- 2月21日 | SingBox每天更新19.6M/S免费节点链接地址分享
- 上海宠物领养站电话地址(上海宠物领养站电话地址是多少)
- 宠物粮加工机器设备厂家排名 宠物粮加工机器设备厂家排名前十
- vue中计算属性computed理解说明包括vue侦听器,缓存与computed的区别_vue.js
- 动物打防疫针运输(动物打防疫针运输安全吗)
- 青岛想念动物医院曹大夫怎么样(青岛想念动物医院电话)
- 开一家宠物零食店 开一家宠物零食店 需要具备什么条件