Java环境配置+简单的登陆例子MVC版(增删查改齐全)

Java环境配置+简单的登陆例子MVC版附带增删查改

Java环境配置

百度一下JDK(java development kit),在官方下载就好了,主要是版本太多,所以就自己找适合自己的版本就好了,下载完之后就直接安装就好了,推荐安装到默认路径即C盘,如果选择其他路径注意记住路径哦。
在这里插入图片描述
点击环境变量,让然后需要创建一些变量
变量名:JAVA_HOME
值:C:\Program Files\Java\jdk1.8.0_192
这个值是安装路径,如果是默认安装的话,应该和我这个一样,如果是自定义安装的话,就是自己的安装路径了
在这里插入图片描述变量名:CLASSPATH
值:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar;
这个没事说的,直接填就完事了,至于我的后面为什么这么长,是因为安装了一些别的东西,不过不影响咱们的配置。
在这里插入图片描述变量名:Path
值:
C:\Program Files\Java\jdk1.8.0_192\bin
C:\Program Files\Java\jdk1.8.0_192\jre\bin
这个变量是系统自带的,需要点开之后,点击新建,这次一共有两条,所以要新建两次,添加两次。

在这里插入图片描述在这里插入图片描述这两个值是jdk安装路径下边的路径,千万不要填错,填写完成后注意保存,然后就算是配置完成了,下面打开win+r,输入cmd打开控制板面板,输入java,然后会出现以下界面,输入javac,出现再往下的界面,证明配置成功,注意是都要出现哦,然后就可以愉快的写代码了哦。
在这里插入图片描述在这里插入图片描述

简单的登陆例子MVC版

既然要用到MVC框架,就要了解一下,什么是MVC。
MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。

  • Model(模型)表示应用程序核心(比如数据库记录列表)。
  • View(视图)显示数据(数据库记录)。
  • Controller(控制器)处理输入(写入数据库记录)。

然后呢结合咱们的例子就是:

  • M对应数据库里面的数据映射和信息处理,也就是JavaBean。
  • V对应咱们的显示页面,也就是Html或者Jsp的页面。
  • C对应咱们的逻辑控制,也就是Servlet。
操作
提交/请求
响应/处理
调用
映射
用户
Html页面或Jsp页面
Servlet
JavaBean
数据库

跟据上图呢,也能基本的看出咱们这个例子的工作流程了,所以咱们就直接进入正题吧,这个软件呢我用的是MyEclipse,根据个人喜好,大同小异。

核心代码部分(带注释)

一定要先确保自己的tomcat和数据库都安装成功啊
这个代码呢,我就分部分给大家介绍了,先介绍V部分,然后介绍C部分附带上自己的web.xml文件,最后介绍M部分。

V

我的这些页面全部都放在了WebRoot文件夹下
首先呢,咱们需要一个登陆的页面一般就直接用默认index.jsp
index.jsp

<body>
    <form action = "Select"  method = "post">
    //form表单,存放提交信息,注意提交格式,action连接的是一个对应的servlet
    账号:<input type="text" name="uname"><br>
    密码:<input type="password"  name="paw"><br>
    <input type="submit" value="登陆">
    </form>
    <a href="zhuce.jsp"><button>注册账号</button></a>
    //href连接的是另外的一个jsp页面,实现了一个注册的功能
  </body>

一个特别简单的登陆页面,css样式就需要自己去写了哦
在这里插入图片描述
然后咱们在来看一下注册账号的页面,这个就相当于增,就是往数据库里面添加数据,名字叫zhuce.jsp

<form action = "ZhuceServlet"  method = "post">
//其实和登陆界面差不多,只有提交的servlet不一样
    账号:<input type="text" name="uname"><br>
    密码:<input type="password"  name="paw"><br>
    <input type="submit" value="注册">
    </form>

在这里插入图片描述
有了登录和注册之后呢,咱们还需要一个显示信息的页面,我写的就是Chenggong.jsp,很垃圾的起名方式哈,不要介意,这个是登陆成功所显示的页面。
Html的知识就不介绍了啊
Chenggong.jsp

<center>
    <table>
        <caption>数据库信息</caption>
        <thead>
            <tr>
                <th>账号</th>
                <th>密码</th>
                <th>分数</th>
                <th>操作</th>
            </tr>
        </thead>
        <tbody align="center" valign="middle">
            <c:forEach items="${list }"  var = "p" begin="0">
            //forEach循环,遍历后台返回的一个队列信息用例如jstl的知识
            //需引入<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
            //${}EL表达式,简化信息的获取
            <tr>
                <td><a href="Xiangxi.jsp?id=${p.uname}">${p.uname}</td>
                //这个连接的是查看详细信息的页面了
                <td>${p.paw}</td>
                <td>${p.score }</td>
                <td><a href="ShanchuSer?id=${p.uname}">删除</a></td>
                //这个连接的就是删除的页面了
            </tr>
            </c:forEach>
        </tbody>
    </table>
</center>

所看到的就是这个了,我这个数据库里面就这么一点数据,所以看到的就是这个了。
在这里插入图片描述
失败页面没写东西,所以就不看了,然后咱么再看一下显示详细信息的页面了,也就是查,名字叫Xiangxi.jsp
Xiangxi.jsp

<form action="Xiugaiser" method="post">
//和之前的一样,所以就不用多说了啊
  账号:<input type="text" value="${param.id}" readonly="readonly"  name="uname"><br>
  新密码:<input type="text"  name="paw"><br>
  <input type="submit" value="确认修改">
  </form>

因为数据库里的信息不多,每条信息下面也没有很多的附带属性,所以看着这个页面就不是很必要,但是一旦数据量庞大了,这个就很必要了,并且我这个就把改的功能也放到这个里边了,点击确认修改就能修改密码了,毕竟现在也没啥数据是能修改的,有啥需要了,就后期添加,也是很方便的。
在这里插入图片描述
因为只是简单的实现了功能,所以代码量不大,其他需要的后期添加就行了,基本功能还是全部都有的。

C

到了这一部分呢,就开始比较有意思了,需要注意的也就多了起来,但是和前面页面的请求一一对应起来也就好了很多了。
可以在src文件夹下面创建一个包,专门用来存放咱们的servlet
好了,不多说废话,直接上
新建的Servlet会有自带的doPost和doGet方法,咱们这些代码就需要放到doPost里边,因为咱们的页面的提交方式是Post方式,如果是get方式,就写到doG儿童里边,然后没写代码的另一个方法引用写代码的这个方法就行了。
Select.java和首页对应的servlet,名字自己起的,但是到了大型项目就会有规范的要求。
Select.java

		response.setContentType("text/html;charset=UTF-8");
		//转换编码格式,能够输出中文和英文,还有其他的语言
		String  uname = request.getParameter("uname");
		String paw = request.getParameter("paw");
		if(Selects.chaxun(uname, paw)&&uname!=""&&paw!=""){
		//检查用户名和密码,如果想添加其他限制
			List<User> list = Selects.login();
			//使用有序队列List存放在数据库里面获取到的一条条信息
			request.setAttribute("list", list);
			//建立一个对象,保存数据,保存完是Object类型
			request.getRequestDispatcher("Chenggong.jsp").forward(request, response);
			//跳转页面,带着需要的信息直接转跳到成功的页面
		}else {
			response.sendRedirect("Shibai.jsp");
		}

ZhuceServlet.java

		response.setContentType("text/html;charset=UTF-8");
		String  uname = request.getParameter("uname");
		String paw = request.getParameter("paw");
		PrintWriter out = response.getWriter();
		//输入输出流,因为不想再多写页面了,所以就直接再页面上输出信息了
		if(Selects.zhuce(uname, paw)&&uname!=""&&paw!=""){
			out.println("注册成功");
		}else {
			out.println("账号密码已存在");
		}

ShanchuSer.java

		response.setContentType("text/html;charset=UTF-8");
		String  uname = request.getParameter("id");
		if(Selects.shanchu(uname)){
			List<User> list = Selects.login();
			request.setAttribute("list", list);
			request.getRequestDispatcher("Chenggong.jsp").forward(request, response);
			//删除成功后回跳这个之前的页面
		}

Xiugaiser.java

		response.setContentType("text/html;charset=UTF-8");
		String  uname = request.getParameter("uname");
		String paw = request.getParameter("paw");
		PrintWriter out = response.getWriter();
		if(Selects.xiugai(uname, paw)){
			response.sendRedirect("Chenggong.jsp");
		}

代码基本上一样,重复的就不写注释了,之后呢就是对应的核心了。

M

可以在src文件夹下面创建一个包,专门用来存放咱们的Model
咱们着一块是要负责连接数据库的,我自己用的是SQL Server 2017,点击寻找适合自己版本的JDBC驱动,下载完之后呢就可以将jar包导入到自己的程序里边了,导入jar包成功后就可以尝试取连接数据库了,一定要确保自己的服务是开着的啊。
User.java
用来接收数据库里边的数据,和数据库里边的要一一对应哦,里面只有属性和set、get方法

public class User {
	private String uname;
	private String paw;
	private String score;
	public User(){
	}
	public User(String uname,String paw){
		this.uname = uname;
		this.paw = paw;
	}
	public String getUname() {
		return uname;
	}
	public void setUname(String uname) {
		this.uname = uname;
	}
	public String getPaw() {
		return paw;
	}
	public void setPaw(String paw) {
		this.paw = paw;
	}
	public String getScore() {
		return score;
	}
	public void setScore(String score) {
		this.score = score;
	}
	
}

Selects.java
实在是想不起来起什么名字了,就起了这个,不过不影响咱们继续说,这个就是专门用来处理数据库的类,因为需要频繁的连接和关闭,索性就直接把连接和关闭写成了方法,因为如果是多人都访问这个系统的话,需要频繁的创建新对象,所以就把这里面的方法写成了静态的方法,也算是减少了资源的浪费。

import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import com.microsoft.sqlserver.jdbc.SQLServerDriver;
import Bean.User;

public class Selects {
	
	static Connection con;
	static Statement stm ;
	static ResultSet res ;
	
	//数据库连接
	public static void select(){
		String sqldrive = "jdbc:sqlserver://127.0.0.1:1433;databaseName=[写自己数据库的名字]";
		//连接数据库必要语句,IP地址,端口号,数据库名字
		String username = ""; //连接数据库的账号,自己填
		String paw = ""; //连接数据库的密码,自己填
		
		try {
			//尝试连接数据库,异常抛出,不用再去记忆驱动了,直接new,输入后面的会智能提示
			DriverManager.registerDriver(new com.microsoft.sqlserver.jdbc.SQLServerDriver());
			con = DriverManager.getConnection(sqldrive,username,paw);
		} catch (Exception e) {
			System.out.println("数据库异常");
			e.printStackTrace();
		}

	}
	
	//一般来说,处理数据库的就只管处理数据库就好了,但是这个也涉及到处理数据库的部分,所以我也就放大炮这里了
	//这个是查询数据库里面的所有数据,用上一个Model接收,然后全部放到一个有序队列中
	public static  List<User> login(){
		String sql = "select * from Users ;";
		List<User> list = new ArrayList<User>();
		try {
			select();
			stm = con.createStatement();
			res = stm.executeQuery(sql);
			while(res.next()){
				User user = new User();
				user.setUname(res.getString("Id"));
				user.setPaw(res.getString("Pws"));
				user.setScore(res.getString("Score"));
				list.add(user);
			}
			closes();
		} catch (Exception e) {
			// TODO: handle exception
		}
		return list;
	}
	
	//连接上数据库之后,就需要进行判断是否有自己输入的账号密码,数据库自己判断
	public static boolean chaxun(String Id,String Pws){
		String sql = "select * from Users where Id='"+Id+"' and Pws ='"+Pws+"';";	
		try {
			select();
			stm = con.createStatement();
			res = stm.executeQuery(sql);
			if(res.next()){
				closes();
				return true;
			}else {
				return false;
			}
		} catch (Exception e) {
			// TODO: handle exception
			return false;
		}
	}
	
	//先调用判断是否由此账号,如果有返回错误,如果无,往数据库里面写入数据
	public static boolean zhuce(String Id,String Pws){
		if(chaxun(Id, Pws)){
			return false;
		}else {
			String sql = "INSERT INTO Users (Id, Pws,Score) VALUES ('"+Id+"', '"+Pws+"','0');";	
			try {
				int f;
				select();
				stm = con.createStatement();
				f=stm.executeUpdate(sql);
				if(f==1){
					closes();
					return true;
				}else {
					closes();
					return false;
				}	
			} catch (Exception e) {
				// TODO: handle exception
				return false;
			}
		}
	}
	
	//删除数据
	public static boolean shanchu(String Id){
		String sql = "DELETE FROM Users WHERE Id = '"+Id+"';";
		int f;
		try {
			select();
			stm = con.createStatement();
			f=stm.executeUpdate(sql);
			if(f==1){
				closes();
				return true;
			}else {
				closes();
				return false;
			}	
		} catch (Exception e) {
			// TODO: handle exception
			return false;
		}
	}
	//修改数据
	public static boolean xiugai(String Id,String Pws){
			String sql = "UPDATE Users SET Pws = '"+Pws+"' WHERE Id = '"+Id+"' ";	
			try {
				int f;
				select();
				stm = con.createStatement();
				f=stm.executeUpdate(sql);
				if(f==1){
					closes();
					return true;
				}else {
					closes();
					return false;
				}	
			} catch (Exception e) {
				// TODO: handle exception
				return false;
			}
	}
	
	//关闭连接,一定要嵌套关闭
	public static void closes() {
			try {
				if(res!=null){
					res.close();
				}
				if (stm!=null) {
					stm.close();
				}
				if (con!=null) {
					con.close();
				}
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
}

到这呢基本上就结束了,下面我就把web.xml放上来把,不同的人配置的也不同,有的是你创建完servlet完自动生成的,所有就不用管了,没有自动生成的可以看一下,参考一下,这个文件因该是在WebRoot文件夹下边的WEB-INF里面,好,上配置,直接复制,然后填一点小东西就能用,我注释到上面
在这里插入图片描述

<?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_3_1.xsd" version="3.1">
  <display-name></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>
  <servlet>
    <servlet-name>Select</servlet-name> //Servlet的名称
    <servlet-class>MySq.Select</servlet-class> //类名+Servlet的名称,中间以“.”连接
  </servlet>
  <servlet-mapping>   //Servlet映射
    <servlet-name>Select</servlet-name>  //Servlet的名称
    <url-pattern>/Select</url-pattern>  
    //Servlet的映射地址,这个会出现到你的url栏中,当你用到这个servlet的时候,如果不算复杂的话,一般是“/”+Servlet名字
  </servlet-mapping>
</web-app>

好了,基本上就这些了,基本的功能都实现了,页面好不好看,功能丰富不丰富都可以自己去演变哦。

发布了2 篇原创文章 · 获赞 6 · 访问量 509

猜你喜欢

转载自blog.csdn.net/qq_41709360/article/details/103995892