开始第一个自己的Spring MVC项目
文章目录
项目架构:Spring MVC+Mysql
一、提前操作
Spring是一个独立的框架,它不需要依赖任何web服务器或者容器。它既可以独立再java SE项目中,也可以再java Web中使用。
1. 下载和安装Spring框架
1-1 第一步
登录https://repo.spring.io/libs-release-local/
站点,沿着org->springframework->spring
路径进入,就可以看到Spring各个版本的压缩包。
这是直接进入的地址:https://repo.spring.io/libs-release-local/org/springframework/spring/
带有RELEASE是稳定版本。
1-2 第二步
下载最新稳定版,然后进行解压,我们可以看到一个名为spring-5.2.9.RELEASE-dist
的包,进入spring-framework-5.2.9.RELEASE
。进入之后看到如下文件夹:
而你需要文件在libs
文件内,你需要重新创建一个lib
文件,因为libs文件内部是有3个重复的。如果一起放进去,启动tomcate时会报错。
接下来就是将重复的文件删除即可。如下是lib
文件:
1-3 第三步
Spring的核心容器需要依赖common-login的jar包,因此我们还是需要登录:http://commons.apache.org/
,然后沿着Release->Logging
的路径进入下载最新的common-login依赖包。
可以直接进入:http://commons.apache.org/proper/commons-logging/download_logging.cgi
,下载commons-login-1.2-bin.zip压缩文件,然后解压之后就可以得到如下文件:
2. 数据库的创建
我们需要使用mysql来创建一个数据库(名为data),然后创建一个user表,包含username和passowrd即可。
2-1 创建数据库
create database data charset=utf8;
2-2 创建数据表
create table user(username varchar(60),password varchar(60));
2-3 添加数据
insert into user values("summer", "summer");
二、项目创建
1.创建
使用Eclipse新建一个Dynamic Web Poject,也就是新建一个Web动态项目,名字随你。(这里是LoginTest)
然后一直点击next,到最后,勾选web.xml,然后点击Finish结束。
当你全部创建好之后,你就可以看到左侧的导航资源树了。
2. 导入Spring包
我们只需要将spring包复制到WebConnent/WEB-INF/lib
即可
接下来就是comment包的导入。同样的复制进去就行。
当然,后续要用到mysql8.0,你这个时候也可以提前导入进入。
3. 配置前端控制器
你需要单机WebContent/WEB-INF/web.xml
,然后进入该文件之后,填写以下配置信息。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
<!-- 定义Spring MVC的前端控制器 -->
<servlet>
<!-- 定义servlet的名称 -->
<servlet-name>LoginServlet</servlet-name>
<!-- Servlet对应的java类 -->
<servlet-class>com.myservlet.LoginServlet</servlet-class>
</servlet>
<!-- servlet的映射声明 -->
<servlet-mapping>
<!-- 请求对应的servlet名称 -->
<servlet-name>LoginServlet</servlet-name>
<!-- 监听当前域的所有请求 -->
<url-pattern>/loginServlet</url-pattern>
</servlet-mapping>
</web-app>
4. 创建login.jsp页面
你需要在WebContent下创建一个login.jsp文件,创建一个表单来设计登录功能。
<%@ page language="java" contentType="text/html; charset=GB2312"
pageEncoding="GB2312"%>
<!DOCTYPE html>
<html>
<head>
<title>登录页</title>
<style>
div{
position:relative;
width:300px;
hight:400px;
margin:200px auto 0px auto;
}
.submit{
width: 50px;
position: absolute;
left: 50px;
top: 130px;
background: skyblue;
border: 1px;
height: 30px;
border-radius: 10%;
}
.reset{
width: 50px;
position:absolute;
left:160px;
top:130px;
background: skyblue;
border: 1px;
height: 30px;
border-radius: 10%;
}
</style>
</head>
<body>
<div>
<h2>欢迎登录Dreamspy系统</h2>
<p>
<form action="loginServlet" method="post" name="form1">
用户名: <input type="text" name="username"><br>
<p>
密  码: <input type="password" name="password"><br>
<p>
<input type="submit" value="提交" name="submit" class="submit">
<input type="reset" value="重置" name="reset" class="reset">
</form>
</div>
</body>
</html>
效果界面如图:
5. 创建登陆成功页面
在WebContent下创建一个success.jsp文件,用来写登陆成功页面。
<%@ page language="java" contentType="text/html; charset=GB2312"
pageEncoding="GB2312"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="GB2312">
<title>登录成功</title>
</head>
<body>
<%
// 获取session中的name值,放入页面
String username=(String)session.getAttribute("name");
if(username!=null){
%>
欢迎登录:<%=username%>
<%}%>
</body>
</html>
6. 编写user.java文件
要知道,你如果想登录,那就必须输入用户名和密码,那保存这个就必须要使用一个类来存放。
在src中创建一个com.mymodel
的包,然后在包里面创建user.java文件
package com.mymodel;
/*
* 创建用户类
*/
public class User {
// 设置私有变量:userName和passsWord
private String userName;
private String passWord;
// 构造函数
public User() {}
// 下面十获取和修改变量的默认函数
public String getPassWord() {
return passWord;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
}
7. 编写DbConn.java文件
如果user.java是定义了用户,那么我们就需要一个类来操作这个用户,而操作用户类就必须要链接数据库,你可以新建一个com.dbc
的包,然后再包下创建一个名为BdConn.java文件
package com.dbc;
import java.sql.*;
/*
* 创建连接类
*/
public class DbConn {
// 获取驱动
private final String driver = "com.mysql.cj.jdbc.Driver";
// 设置路由
private final String url= "jdbc:mysql://localhost:3306/data?serverTimezone=UTC&useSSL=false";
// 设置用户名和密码
private final String user="root";
private final String password ="summer";
// 创建一个Connection类
private Connection conn = null ;
// 创建DbConn函数,用来连接本地数据库
public DbConn(){
try{
// 注册驱动
Class.forName(driver) ;
conn = DriverManager.getConnection(url,user,password) ;
}
catch (Exception e){
System.out.println("连接数据库异常");
}
}
// 创建返回coonection类的函数
public Connection getConnection() {
return this.conn;
}
// 创建关闭函数
public void close(){
try{
conn.close() ;
}catch (Exception e){
System.out.println("关闭异常");
}
}
}
8. 编写userOper.java文件
现在数据库可以链接了,那就可以来创建用户操作类了。
在com.mymodel
包下创建一个userPoer.java的文件
package com.mymodel;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import com.dbc.DbConn;
/*
* 用户数据操作类
*/
public class UserOper {
// 定义用来检查用户输入的用户名和密码是否正确的类
public static boolean check(User user){
boolean flag=false;
PreparedStatement pstmt=null;
ResultSet rs=null;
String sql=null;
DbConn dbc=new DbConn();
sql="select * from user where username=? and password=?";
try{
pstmt=dbc.getConnection().prepareStatement(sql); // 执行sql操作
pstmt.setString(1,user.getUserName()); // 传入用户名和密码
pstmt.setString(2,user.getPassWord());
rs=pstmt.executeQuery(); // 获取结果集
if(rs.next()){ // 如果存在结果集
flag=true;
user.setUserName(rs.getString(1));//获取用户名的值
}
rs.close();
pstmt.close();
}
catch(Exception e){
System.out.println("查询异常");
}
finally{
dbc.close();
}
return flag;
}
}
9. 编写loginServlet.java文件
当上面全部创建好之后,我们就可以来编写最后一个文件,登录后台。
创建一个com.myservlet
包,然后在包内创建一个loginServlet.java文件
package com.myservlet;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import com.mymodel.*;
public class LoginServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse res)throws ServletException, IOException {
this.doPost(req, res);
}
public void doPost(HttpServletRequest req, HttpServletResponse res)throws ServletException, IOException {
// 设置响应的编码格式
req.setCharacterEncoding("GB2312");
res.setContentType("text/html;charset=gb2312");
// 获取用户的输入信息
String name = req.getParameter("username");
String pass = req.getParameter("password");
// 调用JavaBean
User user = new User();
user.setUserName(name);
user.setPassWord(pass);
HttpSession session = req.getSession();
// 选择一个界面对用户进行响应
if(UserOper.check(user)) {
session.setAttribute("name", name);//将登录的用户名放入Session中
RequestDispatcher rd = req.getRequestDispatcher("success.jsp");
rd.forward(req, res);
} else {
res.sendRedirect("login.jsp"); // 如果不正确,则重定向到登录界面
}
}
}