初识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 nullprimary 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-apijstl 写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";@Overridepublic 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{@Overridepublic 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 {@Overrideprotected 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);}}@Overrideprotected 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 {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {servletRequest.setCharacterEncoding("utf-8");servletRequest.setCharacterEncoding("utf-8");//不执行filterChain就会一直卡在这里,相当于一直拦截filterChain.doFilter(servletRequest,servletResponse);}@Overridepublic 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
张三