说明

本教程是,原文章发布系统教程的精编重制版,会包含每一节的源码,以及修正之前的一些错误。因为之前的教程只做到了评论模块,很多地方还不完美,因此重制版会修复之前的一些谬误和阐述不清的地方,而且,后期我会考虑完成该项目的后台管理。希望本教程提供的内容,可以成为JavaWeb初学者一套较为完整的练手项目。 

在上一节中,总算是把登陆页面画好了,从这一节开始,让我们正式开始编写登陆的逻辑代码。

首先,我们要做登陆的代码,先简单了解一下什么是web项目?

JavaWeb项目就是一个应用程序,你不要以为它有多么神秘。你每天打开的QQ就一个应用程序,你在手机上打开的微信,百度地图等等,这些都是应用程序。

不同的是,QQ是一个本地客户端程序,它需要你在自己的电脑上安装一个客户端,然后你打开QQ,可以登录,聊天。

QQ肯定也分客户端和服务端,我们电脑上装的就是客户端,你要知道的一点是,我们发送消息,发送到哪里去了呢?

没错,肯定是发送到QQ的服务器上了,那里保存着我们的所有数据。

想想也不可能在本地,因为我们在电脑上发送的消息,在手机QQ上不是也能看到吗?这就说明,肯定是上传到它的服务器然后保存下来了。比如,我们现在要做登陆功能,就得把用户名和密码传递到后台对不对?OK,也就是说,我们需要有这样的一个Java类,去接收我们前台传递过来的用户名和密码。当这个Java类接收到用户名和密码之后,还需要去判断这个用户名和密码是否正确?如果正确,就给你做页面跳转,跳转到我们项目的首页去。如果不正确,就要提示一下为什么不正确,比如用户名不存在,或者密码错误之类的。

接下来的问题就是,判断用户名和密码是否正确的依据是什么?很显然,依据就是在服务器上有一张写满了用户名和密码的表,我们要做的就是让你传过来的用户名和密码去跟那张表匹配,如果匹配上了,那就说明用户名和密码正确,登陆成功。反之,就是登陆失败。那么这张写满了用户名和密码的表存放在哪里呢,对了,就是数据库。

数据库的意思可以是指电子化的文件柜,就是用来存储电子文件的处所。此外,用户可以对文件中的数据运行新增、截取、更新、删除等操作。数据库是以一定方式储存在一起、能与多个用户共享、与应用程序彼此独立的数据集合。

这一节,我们先跳过数据库的相关内容,完成第一步,那就是将用户名和密码传递到后台。在那之前,我们需要这样的一个Java类,可以用来接收HTTP的请求。这种Java类,叫做Servlet。


servlet是Server Applet的缩写,我们再来看Applet,app是应用程序,又是let结尾,所以应该就是小的应用程序。

Paste_Image.png
Paste_Image.png

这个就是所谓的英文词根,也是学英语的一个窍门。类似的例子还有很多,比如d开头的单词,大部分都有往下,分开,分散的意思。反正就是有一种往下,或者分发出去的韵味。

为了验证这个事情,我们打开有道词典随便找几个看看。

Paste_Image.png
Paste_Image.png

**distribution **
哦,对的,分配,配送,分发。这 不就是有分散,分出去的韵味吗?

determine

Paste_Image.png
Paste_Image.png


确定,下决心。这不就是把什么什么东西定下来,定下来,不也是往下吗?

所以,得出一个结论,d开头的单词,而且,第二个字母必须是元音字母,比如de,di等。那么,这一类单词的情感色彩就有一种往下,或者分发出去的韵味。

再来说说servlet,let结尾都代表这个单词是一个小型的东西,比如

piglet 小猪
starlet 小星星

再比如,psy开头的单词,情感色彩就是偏向于精神和心理学方面的,

Paste_Image.png
Paste_Image.png

psychology 心理学

还有

Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png

这下子应该比较好理解了吧,所以它为什么叫servlet,也是有原因的。

Servlet首先是一个Java类,但是,它并非普通的Java类,而是一种服务器小型应用!简单来说,就是你可以用浏览器去访问它,向他提交数据,接收它给你返回的响应。OK,废话不多说,我们现在就开始。

首先,在src下面创建一个目录。

image.png

名字就叫做:com.article.controller

image.png

然后,在这个包里面创建一个普通的Java类:UserController。

package com.article.controller;

public class UserController {

	
}

这只是一个普通的Java类,还没有办法接收Http请求,因此,我们需要让它继承一下HttpServlet这个类。

package com.article.controller;

import javax.servlet.http.HttpServlet;

public class UserController extends HttpServlet{

	
}

HttpServlet继承了GenericServlet,而GenericServlet实现Servlet接口。

继承HttpServlet的Java类可以接收http请求,包括GET请求和POST请求。

GET请求传参数通过URLPOST请求传参数通过HTTP上行报文。GET请求不安全,方便分享网址;POST请求安全,不方便分享网址,内容信息无限长。我们可以重写两个方法,使得这个类可以接收GET请求和POST请求。

package com.article.controller;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class UserController extends HttpServlet{

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		
	}

	
}

为了让业务逻辑的处理统一起来,doPost方法也默认转到doGet方法。

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doGet(req, resp);
	}

接下来,我们看一下前台的登陆页面login.jsp,之前form表单的action是空着的,现在则需要写一点东西上去。这个action的值就是表单提交的地址,我们希望它直接访问到刚才的UserController。那么,就不得不在UserController类上加一点标记让它可以被访问到。方法就是,在UserController上面打一个注解:

@WebServlet(urlPatterns="/user")
public class UserController extends HttpServlet{

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		System.out.println(123);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doGet(req, resp);
	}

	
}

Servlet3.0以后,可以不用再web.xml里面配置servlet,只需要加上@WebServlet注解就可以修改该servlet的属性了。urlPatterns表示映射地址。为了测试,我们在doGet方法中编写一个打印语句。接下来,重启Tomcat,让我们在地址栏上输入:http://localhost:8088/Article1.3/user ,这就表示要去访问这个UserController类(Get方式)。

如果看到后台成功打印出123,那么就表示我们的第一个Servlet程序调试成功!