先讲逻辑,我理了两个星期才搞清楚。。。一把心酸一把泪,希望我理解的是对的并且明确清晰的,,,,
前提配置文件,eclipse,mysql下载,jar包导入,数据库连接,
具体代码:
//图片插入格式
详细代码:
jsp文件中反映到前端页面的表单提交按钮,点击以后会跳转到指定的的servlet文件,以登录的servlet.java为例
package com.helloworld.servlat;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.helloworld.dao.UserDao; //引入连接数据库的java文件包
//只调用dopost方法即可
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
String username = request.getParameter("username");
String password = request.getParameter("password");
String psw =new UserDao().findUsername(username);
if(psw ==null){
request.setAttribute("msg", "没有这个用户!");
request.getRequestDispatcher("14/error.jsp").forward(request, response);
return;
}
if(psw!=null&&!psw.equals(password)){
request.setAttribute("msg", "密码错误请重新输入!");
request.getRequestDispatcher("14/error.jsp").forward(request, response);
return;
}
if(psw.equals(password)){
request.setAttribute("msg", "用户:"+username+",欢迎访问");
request.getRequestDispatcher("14/success.jsp").forward(request, response);
}
}
}
注册servlet代码部分:
package com.helloworld.servlat;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.helloworld.dao.UserDao;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
String username = request.getParameter("username");
String password = request.getParameter("password");
String rpsw = request.getParameter("rpsw");//得到表单输入的内容
if(username==null||username.trim().isEmpty()){
request.setAttribute("msg", "帐号不能为空");
request.getRequestDispatcher("13/regist.jsp").forward(request, response);
return;
}
if(password==null||password.trim().isEmpty()){
request.setAttribute("msg", "密码不能为空");
request.getRequestDispatcher("13/regist.jsp").forward(request, response);
return;
}
if(!password.equals(rpsw)){
request.setAttribute("msg", "两次输入的密码不同");
request.getRequestDispatcher("13/regist.jsp").forward(request, response);
return;
}
UserDao u = new UserDao();
int num = 6;
u.addUser(num,username,password);//调用addUser()方法
request.setAttribute("msg", "恭喜:"+username+",注册成功");
request.getRequestDispatcher("13/success.jsp").forward(request, response);
}
}
xml中的配置文件中,一个servlet文件需要设置一个
LoginServlet1
com.helloworld.servlat.LoginServlet1
LoginServlet1
/loginServlet1
RegistServlet
com.helloworld.servlat.RegistServlet
RegistServlet
/registServlet
关于xml(可扩展标记型语言):https://blog.csdn.net/zndxlxm/article/details/7802466
Xml用来设计传输和存储数据,html用来是设计显示数据。
Xml没有预定义标签,需要进行自定义。
平时在进行开发的时候,例如进行hibernate开发的时候,我们可以导入自己预先定地的dtd文件(标记符的语法规则)进行规范化。
xml和html一样都是标记语言,但是xml是可扩展的标签语言,可自定义标签如:<你好><\你好>,html主要用于显示数据,xml主要用于存储数据
如果你需要在 HTML 文档中显示动态数据,那么每当数据改变时将花费大量的时间来编辑 HTML。
通过 XML,数据能够存储在独立的 XML文件中。这样你就可以专注于使用 HTML 进行布局和显示,并确保修改底层数据不再需要对 HTML进行任何的改变。
通过使用几行 JavaScript,你就可以读取一个外部 XML文件,然后更新 HTML 中的数据内容。
//文档声明 必须写到第一行第一列,
//version属性表示版本,一般采用1.0版本,因为1.1版本不适用于1.0格式;
//encoding属性:编码 gbk utf-8 iso8859-1(不包含中文)
张三
18
注意点:
xml 只能有一个根标签,
xm 将空格和换行都当作内容来解析
xml 标签名称可以为中文,区分大小写,不能以数字和下划线开头,不能以xml Xml开头,不能包含空格和冒号,
xml一个标签上可以有多个属性,属性名称不可想同,可用单引号也可以用双引号
PI指令:
xml样式引用:,设置样式只能对英文标签起作用,
张三
18
主要用于查找数据库中信息检验登陆信息的是否正确从而跳转到相应的页面和添加新信息到数据库中
package com.helloworld.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class UserDao {
public String findUsername(String username){
String psw = null;
Connection con =null;
PreparedStatement pstmt =null;
ResultSet rs = null;
try {
String driver ="com.mysql.cj.jdbc.Driver";
String url ="jdbc:mysql://localhost:3306/my?useSSL=false&serverTimezone=GMT%2B8";
String user ="root";
String password ="123456";//改为自己的用户名密码和数据库名
Class.forName(driver);
con = DriverManager.getConnection(url, user, password);
String sql = "select * from setting where name=?";
pstmt = con.prepareStatement(sql);
pstmt.setString(1, username);
rs = pstmt.executeQuery();
if(rs==null){
return null;
}
if(rs.next()){
psw=rs.getString("password");
}else{
psw=null;
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}finally {
try {
if(pstmt!=null)pstmt.close();
if(con!=null)con.close();
}
catch (SQLException e) {
}
}
return psw;
}
public void addUser(int id,String username,String psw){
Connection con =null;
PreparedStatement pstmt =null;
try {
String driver ="com.mysql.cj.jdbc.Driver";
String url ="jdbc:mysql://localhost:3306/my?useSSL=false&serverTimezone=GMT%2B8";
String user ="root";
String password ="123456";//改为自己的用户名密码和数据库名
Class.forName(driver);
con = DriverManager.getConnection(url, user, password);
String sql = "INSERT INTO SETTING VALUES(?,?,?)";
pstmt = con.prepareStatement(sql);
pstmt.setInt(1, id);
pstmt.setString(2, username);
pstmt.setString(3, psw);
pstmt.executeUpdate();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}finally {
try {
if(pstmt!=null)pstmt.close();
if(con!=null)con.close();
}
catch (SQLException e) {
}
}
}
}
数据库和eclipse的连接
我本来是打算安装sql server来连接eclipse的,但是实在是遇到太多问题了,如果有耐心的话可以借鉴一下下面的博客,都讲的比较详细,还有一些问题的解决方法也在里面了
Win10开启telnet功能:https://blog.csdn.net/michaelehome/article/details/79559596
设置SQL Server2012的身份验证方式为混合模式:http://blog.sina.com.cn/s/blog_6ca0f5eb0102v09z.html
Eclipse连接MySQL数据库:https://www.cnblogs.com/caiwenjing/p/8079227.html
鉴于mysql数据库和eclipse的连接:
连接首先安装mysql数据库,详细安装步骤即地址:http://www.runoob.com/mysql/mysql-install.html,安装以后要在安装数据库的文件夹下新建一个my.ini格式的文档,这里或许需要设置一下显示文件后缀名,点击 我的电脑 查看 > > 显示(进入文件夹选项中)> > 查看 > > 将隐藏已知文件类型的扩展名的选项取消勾选,新建my.ini文件夹的内容为:
[mysqld]
basedir=D:\mysql-8.0.11-winx64 //你的数据库安装路径
port=3306
character-set-server=utf8
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
collation-server=utf8_unicode_ci
[mysql]
no-auto-rehash
default-character-set=utf8
[client]
default-character-set=utf8
然后配环境变量,新建路径,在检验时,注意用管理员方式(右键设置进入Windows PowerShell )特别的在管理员打开的命令行中 输入进入mysql命令时需要在前面加.\mysql ,当然也可以用命令行直接检验啦,下面是我归纳总结的命令行操作数据库的常用语句:
mysql建表语句使用:详解参考:http://www.cnblogs.com/jiangxiaobo/p/7089345.html
打开命令行,输入mysql -u root -p ,显示password:输入密码,进入数据库
显示存在的数据库名称:show databases;
一般会显示几个mysql自带的数据库:
mysql自带的数据库的详细解释:https://blog.csdn.net/f2006116/article/details/81095985
进入想要使用的数据库:use 数据库名称;
选择所要使用的表:select *from 表的名称;
建表:create table 表名(id int(5),
- >name varchar(10),
- >password varchar(10));
在表中添加信息:insert into 表名 values (1,'1001','123456') //只要是字符串都需要上下引号
导jar包,jdbc驱动在jar包里面:https://blog.csdn.net/liurongsheng123/article/details/79659807;注意导入的jar包要放在lib文件夹下,
导入驱动以后,在eclipse中输入连接数据库的端口代码,我用的mysql是8.0版本以上的,所有就需要添加cj也就是驱动的地址改为:com.mysql.cj.jdbc.Driver
try {
Class.forName("com.mysql.jdbc.Driver"); //加载MYSQL JDBC驱动程序
//Class.forName("org.gjt.mm.mysql.Driver");
System.out.println("Success loading Mysql Driver!");
}
catch (Exception e) {
System.out.print("Error loading Mysql Driver!");
e.printStackTrace();
}
try {
Connection connect = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/test","root","198876");
//连接URL为 jdbc:mysql//服务器地址/数据库名 ,后面的2个参数分别是登陆用户名和密码
System.out.println("Success connect Mysql server!");
Statement stmt = connect.createStatement();
ResultSet rs = stmt.executeQuery("select * from user");
//user 为你表的名称
while (rs.next()) {
System.out.println(rs.getString("name"));
}
}
catch (Exception e) {
System.out.print("get data error!");
e.printStackTrace();
}
}
关于查找数据库名称:注意要修改原密码以后才能查看名称,mysql 8.0修改密码的方法:https://blog.csdn.net/lxlong89940101/article/details/80246675?tdsourcetag=s_pctim_aiomsg,这里修改完以后再用命令行进入mysql需要关闭然后重启服务器,命令分别为:nex stop mysql;nex start mysql ;修改完成以后在命令行输入mysql -u root -p 然后回车输入新密码,进入数据库,然后输入命令”show databases;”(注意不要掉分号),显示数据库名称;