struts mysql_struts与Mysql数据库实现登录功能demo

Javaee第四次上机要求用struts来实现登录的功能。老师给了一部分代码,照着敲bug百出,做完之后感觉还是云里雾里的。写博客梳理一下。

环境准备eclipse

Mysql数据库

jar包下载(jar包我都是官网下载的,先放百度盘里,也可以用自己旧的版本) 链接: https://pan.baidu.com/s/1FFUPn8GDa96DK1XgIsOAFw 提取码: z6w3

完整的目录结构为

一、

在eclipse里面创建javaee工程,将刚刚下载的jar包拖进工程里的WebContent/WEB-INF/lib里 jar包|作用 ---|:--:|---: mysql-connector-java-5.1.47.jar|jdbc链接mysql的工具 commons-fileupload-1.3.2.jar|文件上传 commons-io-2.2.jar|IO工具类封装 commons-lang3-3.2.jar|Commons项目中用来处理java基本对象的工具类包 commons-logging-1.1.3.jar|java常用日志工具调用,如通过API调用Log4J freemarker-2.3.28.jar|模式引擎,一个基于模板生成文本输出的通用工具 javassist-3.11.0.GA.jar|编辑Java字节码的类库 ognl-3.0.21.jar|Object-Graph(用什么表达)Navigation(导航)Language,支持ognl表达式 struts2-core-2.3.36.jar|struts核心包 xwork-core-2.3.36.jar|模式引擎,一个基于模板生成文本输出的通用工具 转载自CSDN博客:struts2各个jar包的作用 导入后结果:

二、

在WebContent里创建jsp文件 index.jsp

Insert title here

success.jsp

Insert title here

欢迎!

fail.jsp

Insert title here

failed!

这里使用了struts的标签库,使用前需要导入struts的核心jar包struts2-core-2.3.36.jar,使用struts的标签库,可以丰富页面的表现效果。我试着删除掉,页面就变空白。 **标签库知识拓展博客:** 1. [struts标签地址问题](https://blog.csdn.net/master_yao/article/details/50195733) 2. [java开发--struts2 标签库使用](https://www.cnblogs.com/wanghuaijun/p/5278316.html) 3. [Struts2标签库常用标签](https://blog.csdn.net/q547550831/article/details/53326042) ## 三、 在WenContent创建web.xml,配置web项目启动时加载的信息 web.xml

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

struts2

org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

struts2

/*

index.jsp

web.xml解释 1. 最外层用web-app包住多个加载项 2. 制定欢迎界面,例如:

index.jsp

index1.jsp

PS:指定了2个欢迎页面,显示时按顺序从第一个找起,如果第一个存在,就显示第一个,后面的不起作用。如果第一个不存在,就找第二个,以此类推。  3. 设置过滤器:比如设置一个编码过滤器,过滤所有资源

XXXCharaSetFilter

net.test.CharSetFilter

XXXCharaSetFilter

/*

四、

在Java Resources/src下创建包com.struts 在com.struts下创建DBUtility.java、LoginAction.java DBUtility.java

package com.struts;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;

import java.util.Properties;

public class DBUtility {

//直连数据库 public Connection getConnection(){

try{

Class.forName("com.mysql.jdbc.Driver");

return DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatebase","root","123456");

}catch(ClassNotFoundException e){

e.printStackTrace();

}catch(SQLException e){

e.printStackTrace();

}

return null;

}

//通过参数连接数据库 public Connection getConnection(String url,String username,String pwd){

try{

Class.forName("com.mysql.jdc.Driver");

return DriverManager.getConnection(url,username,pwd);

} catch(ClassNotFoundException e){

e.printStackTrace();

}catch(SQLException e){

e.printStackTrace();

}

return null;

}

//通过配置文件DBConfig.properties连接数据库 public Connection openConnection(){

Properties prop=new Properties();

String driver=null;

String username=null;

String url=null;

String pwd=null;

try{

prop.load(this.getClass().getClassLoader().getResourceAsStream("DBConfig.properties"));

driver=prop.getProperty("driver");

url=prop.getProperty("url");

username=prop.getProperty("username");

pwd=prop.getProperty("pwd");

Class.forName(driver);

return DriverManager.getConnection(url,username,pwd);

}catch(ClassNotFoundException e){

e.printStackTrace();

}catch(SQLException e){

e.printStackTrace();

}catch(Exception e){

e.printStackTrace();

}

return null;

}

//关闭数据库 public void closeConn(Connection conn){

try {

conn.close();

} catch (SQLException e) {

// TODO Auto-generated catch block System.out.println("数据库关闭异常");

e.printStackTrace();

}

}

}

LoginAction.java

package com.struts;

import com.opensymphony.xwork2.ActionSupport;

import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.SQLException;

public class LoginAction extends ActionSupport{

private String userName;

private String password;

//连接数据库配对账号密码 public String execute() {

//定义变量i,记录匹配到的记录数量 int i=0;

DBUtility util=new DBUtility();

Connection conn=util.getConnection();

//通过用户在表单中的输入,查找数据库表 String sql = "select uid from mydatebase.login where userName='"+this.userName.toString()+"' and password='"+this.password.toString()+"'";

try{

//防止空指针异常 if(conn!=null)

{

System.out.println("connect successfully!");

java.sql.Statement stmt=conn.createStatement();

ResultSet rs= stmt.executeQuery(sql);

while(rs.next()){

//通常只有一个用户记录 i++;

}

}

}catch (SQLException e) {

e.printStackTrace();

} finally {

if(conn!=null)

util.closeConn(conn);

}

//这里的返回结果在struts.xml文件里用到,涉及到页面的跳转 if(i>0){

return "success";

}

else{

return "fail";

}

}

//get和set方法由eclipse自动生成 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;

}

}

五、

连接数据库需要额外的配置文件 在Java Resources/src下创建DBConfig.properties

driver=com.mysql.jdbc.Driver

url=jdbc:mysql://127.0.0.1:3306/mydatebaseusername=root

pwd=123456

六、

在Java Resources/src下创建struts.xml

/p>

"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

"http://struts.apache.org/dtds/struts-2.0.dtd">

/success.jsp

/fail.jsp

主要属性说明: 属性|说明 ---|:--:|---: package-name|用于区别不同的package;必须是唯一的、可用的变量名;用于其它package来继承; package--namespace|用于减少重复代码(和struts1比较);包的namespace属性用于定义该包的命名空间,命名空间作用为访问该包下的action路径的一部分。namespace属性可以不配置,如果不指定该属性,默认的命名空间为””。 package--extends|用于继承其它package以使用里面的过滤器等东西; action--name|用于在一个package里区别不同的action;必须是唯一的、可用的变量名;是调用action时输入路径的组成部分; action--class|action所在的路径(包名+类名); action--method|action所调用的方法名;默认值为method=”execute”;也可以时其他方法;通常每个包都应该继承struts-default包,因为struts2很多核心功能都是拦截来实现的。如从请求中把请求参数封闭到action、文件上传和数据验证等都是通过拦截器实现的。 struts-default定义了这些拦截器和Result类型,可以这么说,当包继承了struts-default才能使用struts2提供的核心功能,struts-default包是在struts2-core-2.xx.jar文件中的struts-defalut.xml中定义。struts-default.xml也是struts2默认配置文件,struts2每次都会自动加载struts-default.xml文件。

namespace具体使用 参考博客:Struts2:命名空间的使用

本篇很多内容都是参考下面这篇文章 博主:dutsoft Struts2实现登陆功能Demo

七、

在Mysql数据库中创建mydatebase数据库 并通过sql脚本创建login表

create table login

(

uid int primart key,

userName varchar(100) not null,

password varchar(100) not null

)

通过图形化界面随意在表中添加几行记录

最后记得点apply

八、

最后结果

九、解决404报错

可能原因有: 1. 需要的jar包没有导入 2. 路径没有写对

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值