第一节:Struts2如何进行web登录验证
1.用户信息:存在mysql数据库中
首先打开服务查看mysql数据库是否正常运行。
创建数据库,创建用户表(如:user表)
(注:这里mysql查看用的是Navicat)
2.接下来是代码撰写,用于数据库的连接、关闭、增删查改
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class DBUtil {
//三属性四方法
private Connection conn = null;
private PreparedStatement ptsm = null;
private ResultSet rs =null;
//方法一:获取数据库连接
public void getConn(){
try {
Class.forName("com.mysql.jdbc.Driver");
String url ="jdbc:mysql://127.0.0.1:3306/hjc";//这个连接的是自己的数据库,3306为数据库端口号,hjc为数据库名
String username ="root";
String password = "";
conn = DriverManager.getConnection(url, username, password);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//方法二:关闭数据库连接的方法
public void closeConn(){
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(ptsm!=null){
try {
ptsm.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//方法三:增删改的方法
public int executOther(final String strSQL,final Object[] params){
this.getConn();
try {
ptsm = conn.prepareStatement(strSQL);
for(int i=0;i<params.length;i++){
ptsm.setObject(i+1, params[i]);
}
return ptsm.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return -1;
}
//方法四:专门执行查询的方法
public ResultSet execQuery(final String strSQL,final Object[] params){
this.getConn();
try {
ptsm = conn.prepareStatement(strSQL);
for(int i=0;i<params.length;i++){
ptsm.setObject(i+1, params[i]);
}
return ptsm.executeQuery();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
3.在此之前需要相关jar包的导入:
4.xml文件的配置
需要配置两个xml文件,一个是stust.xml一个是web.xml
stust.xml路径为src下
web.xml路径在WEB-INF下
stust.xml:(内具体关系见下节)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="default" namespace="/" extends="struts-default">
<global-results>
<result name="fail">jmp.jsp</result>
</global-results>
<action name="login" class="hjc.action.LoginAction">
<result name="success">index.jsp</result>
<result name="failed">jmp.jsp</result>
</action>
</package>
</struts>
web.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_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>hjc</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
5.创建用户实体集
package hjc.vo;
public class User {
private String username;
private String password;
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;
}
}
6.login.jsp如何与java文件“沟通”并返回正确的结果
首先先看一小段login的html代码:
<form action="login!select" name="loginform">
account : <input type="text" name="username"><br><br>
password: <input type="password" name="password"><br><br>
<input type="submit" value="登录" οnclick="check()"><br><br>
</form>
<button οnclick="onregister()">立即注册</button>
这是一个简单的html form表单代码片段,form action中的“login!select”其中login为动作名(action)可对应stust.xml中的
<action name="login" class="hjc.action.LoginAction">
<result name="success">index.jsp</result>
<result name="failed">jmp.jsp</result>
</action>
这一段代码,通过“login”转到hjc.action.LoginAction的.java文件中,select是hjc.action.LoginAction.java中的一个方法(函数),result name=“success”对应的是select方法的返回值,如果返回值为success则跳到index.jsp中,如果为failed跳到jmp.jsp中。
hjc.action.LoginAction.java:
package hjc.action;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import hjc.dbr.DBUtil;
import hjc.vo.User;
public class LoginAction extends ActionSupport implements ModelDriven<User>{
private User user=new User();
public String add(){
DBUtil db=new DBUtil();
String sql = "insert into user value(null,?,?)";
int rs = db.executOther(sql, new Object[] {user.getUsername(),user.getPassword()});
if(rs>0) return SUCCESS;
return "failed";
}
public String select() {
HttpServletRequest request = ServletActionContext.getRequest();
HttpSession session= request.getSession();
System.out.println(user.getUsername().length());
session.setAttribute("password", user.getPassword());
session.setAttribute("username", user.getUsername());
DBUtil db=new DBUtil();
String sql = "select * from user where username=? and password=?";
ResultSet rs = db.execQuery(sql, new Object[] {user.getUsername(),user.getPassword()});
try {
if(rs.next()) return SUCCESS;//SUCCESS为宏定义的值即字符串"success"
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "failed";
}
@Override
public User getModel() {
// TODO Auto-generated method stub
return user;
}
}
这样我们就可以通过.jsp与.java进行数据库验证登录了。