1.创建一个动态的web工程
2.导入springMvc所需要的jar包
3.首先有一个web.xml文件,配置下前端控制器,这里我在src目录下建一个springmvc.xml的配置文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>SpringMVC_01</display-name>
<!-- 配置前端控制器DispatcherServlet -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<!-- 对应上一步创建全局配置文件的文件名以及目录 -->
<param-value>classpath:springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
4.配置springmvc
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
<!--这里base-package:写你自己的controller的包名-->
<context:component-scan base-package="com.liqiang.controller"/>
<!--默认的注解映射的支持,这样就不需要一一配置映射器和适配器,一般实际开发都是用这个 -->
<mvc:annotation-driven/>
<!--启用自动扫描 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/view/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
5.现在来实现下登陆的逻辑页面:
当用户发送请求,来到登陆界面,所以需要一个controller
package com.liqiang.controller;
import java.io.UnsupportedEncodingException;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.liqiang.logic.LoginCheck;
@Controller
public class LoginController {
@RequestMapping(value="/",method=RequestMethod.GET)
public String sayHello(){
//model.addAttribute("msg", "Hello,World!");
return "login";
}
@RequestMapping(value="login",method=RequestMethod.POST)
public String login(Model model, // 向前台页面传的值放入model中
HttpServletRequest request) throws UnsupportedEncodingException{ // 从前台页面取得的值
request.setCharacterEncoding("utf-8");
String username = request.getParameter("username");
String password = request.getParameter("password");
int flag = LoginCheck.check(username, password);
System.out.println("hello");
if(flag == 1){
model.addAttribute("msg", username);
System.out.println("world");
return "success";
}else{
System.out.println("every");
return "login";
}
}
}
解释上面代码,@Controller,标注这个类是Controller类,spring会自动进行扫描,@Request Mapping中的value指的是url中的地址后缀,设置成/的目的当然是为了方便啊,
比如启动工程时,url只需要输入什么localhost:8080/项目名,它就会自动跳转到login页面;method指的是来的url是post请求还是get请求
return的是login字符串,大家还记得上面说的prefix了吧,它就会把你的url自动拼接上,完整路径就是下面这个
/WEB-INF/jsp/login.jsp
接下来看login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>login</title>
</head>
<body>
<form action="login" method="post">
用户名:<input type="text" name="username"/><br/>
密 码:<input type="password" name="password"/>
<input type="submit" value="登陆"/>
<a href="register">注册</a>
</form>
</body>
</html>
后面需要一个检查的类
package com.liqiang.logic;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import com.liqiang.dao.*;
import com.mysql.jdbc.Statement;
public class LoginCheck {
public static int check(String username,String password){
int flag = 0;
try {
System.out.println("username"+username+" password:"+password);
Statement stmt = Dao.getStmted();
String sql = "select * from info";
ResultSet rs = stmt.executeQuery(sql);
String info_name;
String info_pass;
while(rs.next()){
info_name = new String(rs.getString("info_name"));
info_pass = new String(rs.getString("pass"));
System.out.println("username:"+info_name+" password:"+info_pass);
if(info_name.equals(username) && info_pass.equals(password))
{
flag = 1;
break;
}
}
} catch (Exception e) {
e.printStackTrace();
}
if(flag == 1)
return 1;
else
return 0;
}
}
dao包如下:
package com.liqiang.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.mysql.jdbc.Statement;
public class Dao {
// 获取数据库连接
private static Connection conn;
private static Statement stmt;
private static String url = "jdbc:mysql://127.0.0.1:3306/student?characterEncoding=utf8&useSSL=false&serverTimezone=Hongkong";
private static String root = "root";
private static String pass = "数据库密码";
public static Connection getConnection(){
try
{
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(url,root,pass);//大家分享代码的时候也不要暴露自己的数据库密码,这样是非常不安全的
}
catch(ClassNotFoundException e)
{
e.printStackTrace();
System.out.println("数据库驱动加载出错");
}
catch(SQLException e)
{
e.printStackTrace();
System.out.println("数据库出错");
}
return conn;
}
public static Statement getStmted() {
conn = getConnection();
try {
stmt = (Statement) conn.createStatement();
}catch(Exception e) {
e.printStackTrace();
}
return stmt;
}
//关闭相关通道
public static void close()
{
try
{
if(conn != null)
conn.close();
if(stmt != null)
stmt.close();
}
catch(SQLException e)
{
e.printStackTrace();
System.out.println("数据关闭出错");
}
}
}
如果验证通过,则跳转到success.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登陆成功</title>
</head>
<body>
登陆成功!
欢迎~${msg};
</body>
</html>
登陆逻辑写完了,下面就是注册逻辑
package com.liqiang.controller;
import java.sql.SQLException;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.liqiang.logic.RegisterCheck;
@Controller
public class RegisterController {
@RequestMapping(value="register",method=RequestMethod.GET)
public String register(){
return "register";
}
@RequestMapping(value="registSuccess",method=RequestMethod.POST)
public String registSuccess(HttpServletRequest request,Model model) throws SQLException{
String username = request.getParameter("username");
String password = request.getParameter("password");
String age = request.getParameter("age");
if(RegisterCheck.registCheck(username, password,age)){
model.addAttribute("username", username);
return "login";
}else{
return "register";
}
}
}
把注册信息插入到数据库中
package com.liqiang.logic;
import java.sql.SQLException;
import com.liqiang.dao.Dao;
import com.mysql.jdbc.Statement;
public class RegisterCheck {
public static boolean registCheck(String username,String password,String age) throws SQLException{
Statement stmt = Dao.getStmted();
String sql = "insert into info(info_name,info_age,pass)" + " values('"+username+"','"+age+"',"
+ "'"+password+"')";
try {
stmt.executeUpdate(sql);
}catch(Exception e) {
e.printStackTrace();
return false;
}
return true;
}
}
注册页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>注册页面</title>
</head>
<body>
<form action="registSuccess" method="Post">
用户名:<input type="text" name="username"/>
密 码<input type="text" name="password"/>
年 龄<input type="number" name="age"/>
<input type="submit" value="提交"/>
</form>
</body>
</html>