java servlet验证

    在Java EE应用编程中Servlet是基础,JSP是建立在Servlet基础之上的,其他Web框架如Struts、WebWork和Spring MVC都是基于Servlet的。本文主要讲述MyEclipse和Tomcat配置Servlet的过程和简单实现表单提交功能。
    希望对大家有所帮助,参考书籍《Java EE企业级应用开发实例教程》。
    Java+MyEclipse+Tomcat (一)配置过程及jsp网站开发入门

一. Servlet编程

    1.Web基础知识
    在讲述Servlet之前,先了解下Web基础知识。Web(World Wide Web,万维网)本质就是Internet所有文档的集合,Web文档主要类型有HTML网页、CSS、JavaScript、各种动态网页、图片、声音和视频等。
    Web文档保存在Web站点(Site)上,Web站点驻留在Web服务器上。Web服务器是一种软件系统,提供Web文档的管理和请求服务,常见的Web服务器软件有Apache、IIS、WebLogic和Tomcat等。每个服务器都有一个唯一的IP地址,Web服务器对外都有一个服务端口,默认时80或8080端口。
    Web文档都有一个唯一的地址,通过URL格式来进行定位,其格式为:
    协议://IP地址:端口/站点名/目录/文件名
    其中协议主要有HTTP、HTTPS和FTP。根据不同的协议,默认端口可以省略,HTTP/HTTPS为80端口,FTP为21端口。例:
    http://210.30.108.30:8080/test/admin/login.jsp
    Web服务器接收到请求后,根据URL定位到相应文档,根据文档类型进行对应的处理,将文档通过网络发送到客户端,一般是浏览器,用户即可查看或下载请求的文档。Web通过请求/响应(Request/Response)模式进行工作,即由浏览器使用URL对Web文档进行请求,Web服务器接收并处理请求,处理结束后将响应内容发送到浏览器。
    Web请求方式主要包括GET、POST、PUT、DELETE和HEAD。其中GET请求直接返回请求的文档,同时传递参数在URL中;POST请求将传递到Web服务器的数据保存到数据流中,只有通过表单提交形式才能实现。如下:

Get请求:
http://localhost:8080/web01/main.do?id=1&password=123456
POST请求:

    这些知识大家应该都非常熟悉了,我就不再介绍了,引出表单就开始叙述Servlet。

    2.什么是Servlet
    在Sun公司制定Java EE规范初期,为实现动态Web而引入了Servlet,用于替代笨重的CGI(通用网关接口),实现了Java语言编程的动态Web技术,奠定了Java EE的基础。后来为进一步简化动态Web网页的生成,并且在微软公司推出了ASP(Active X服务系统页面)技术的竞争下,Sun推出了JSP规范,进一步简化了Web网页的编程。但JSP在进行HTTP请求处理方面不如Servlet方便和规范,Servlet在当今的MVC模式Web开发中牢牢占据一地。并且现在流行的Web框架基本基于Servlet技术,如Struts、WebWork和Spring MVC等。只有掌握了Servlet才能真正掌握Java Web编程的核心和精髓。
    那么,究竟Servlet是什么东东呢?
    Servlet是运行在Web容器的类,能处理Web客户的HTTP请求,并产生HTTP响应。
    Servlet是Java EE规范定义的Web组件,运行在Web容器中。由Web容器负责管理Servlet的声明周期,包括创建和销毁Servlet对象。客户不能直接创建Servlet对象和调用Servlet的方法,只能通过向Web服务器发出HTTP请求,间接调用Servlet的方法。这是Servlet与普通Java类的重要区别。
    Sun在如下两个包中提供了Servlet的全部接口和类:
          1.javax.servlet包含支持所有协议的通用Web组件接口和类
          2.javax.servlet.http包含支持HTTP协议的接口和类
    Servlet可以完成Web组件具有的所有功能,如下:
          1.接收HTTP请求
          2.取得请求信息,包括请求头和请求参数数据
          3.调用其他Java类方法完成具体的业务功能
          4.生成HTTP响应,包括HTML和非HTML响应
          5.实现到其他Web组件的跳转,包括重定向和转发
    编写Servlet需要引入的两个包和Java I/O包:

import java.io.;
import javax.servlet.
;
import javax.servlet.http.*; 编写接收HTTP请求并进行HTTP响应的Servlet要继承javax.servlet.http.HttpServlet。Servlet类的定义如下:
public class LoginAction extends HttpServlet {}
每个Servlet一般都需要重写doGet方法和doPost方法。当用户使用GET方式请求Servlet时,Web容器调用doGet方法处理请求;当用户使用POST方法请求Servlet时,Web容器嗲用doPost方法。

    Servlet是生命周期时序图如上图所示,包括加载类和实例化阶段、初始化阶段、处理请求阶段和销毁阶段。

二. 配置Servlet

    Servlet作为Web组件可以处理HTTP请求/响应,因而对外要求一个唯一的URL地址。但由于Servlet是一个Java类文件,不像JSP那样直接存放在Web目录下就能获得URL请求访问地址。Servlet必须在Web的配置文件/WEB-INF/web.xml中进行配置和映射才能响应HTTP请求。
    1.Servlet声明
    它的任务是通知Web容器Servlet的存在,声明语法如下:

HomePageAction
servlet.HomePageAction

    其中声明Servlet的名字,一般与Servlet的类名相同即可,要求在一个web.xml文件内名字唯一。指定Servlet的全名,即包名.类型。Web容器会根据此定义载入类文件到内容中,进而调用默认构造方法创建Servlet对象。
    Servlet初始参数如数据库Driver、URL、账号和密码等信息,在Servlet中可以读取这些信息,如下定义了一个初始参数,即数据库的JDBC驱动。

HomePageAction
servlet.HomePageAction

driveName
sun.jdbc.odbc.JdbcOdbcDriver


    在Servlet中可以通过ServletConfig取得定义的初始化参数,取得以上定义的参数的代码如下:

private Connection cn=null; //定义数据库连接对象
private String driverName=null; //数据库驱动器
//取得Servlet定义的初始参数
driverName=config.getInitParameter("driverName");
//根据Servlet初始参数连接数据库
Class.forName(driverName);
cn=DriverManager.getConnection("jdbc:odbc:cityoa"); 其中config是在Servlet中定义的ServletConfig类型的属性变量,由init方法取得它的实例。可见连接不同数据库,直接修改配置文件即可,不需要代码的修改和重新编译。
2.Servlet映射
任何Web文档在Internet上都要有一个URL地址才能被请求访问,Servlet不能像JSP一样直接放在Web的发布目录下,因此Servlet需要单独映射URL地址。在WEB-INF/web.xml中进行Servlet的URL映射。

HomePageAction
/loginAction.do
      上面代码是绝对地址方式映射,只能映射到一个地址。其中Servlet-name名称和Servlet声明中要一致,URL的格式如下:/目录/目录/文件名.扩展名。而匹配目录模式映射方式如下,可以请求多个URL。

MainAction
/main/*
      只要是以/main为开头的任何URL都能请求此Servlet。如下:
        http://localhost:8080/web01/main/login.jsp
        http://localhost:8080/web01/main/info/add.do
    同样能你还能使用匹配扩展名模式映射方式,也可以响应多地址的请求。

MainAction
*.action
      以上配置中扩展名为action的任何请求均能被Servlet响应。如:
        http://localhost:8080/web01/login.action
        http://localhost:8080/web01/main/info/add.action
    注意:你不能混合使用两种匹配模式,否则会映射出错,如/main/*.action这种是错误的混合模式。

三. 简单实现表单提交功能

    创建Web Project项目,项目名称为TestServlet。项目结构如下图所示:


    在WebRoot文件夹下创建images文件夹,并添加图片logo.jpg。添加inc文件夹,新建style.css文件,代码如下:

.main {
width: 1024px;
text-align:left;
}
.font {
font-family: "Trebuchet MS";
font-size: 14px;
font-weight: bold;
color: #FFFFFF;
}
.div {
margin: 0px;
padding: 0px;
width: 1014px;
}
.tdBgColor{
background-color:#6b1101;
}
a{
font-family: "Trebuchet MS";
font-size: 14px;
font-weight: bold;
color: #FFFFFF;
line-height:50px;
text-decoration:none;

}
a.hover{
font-family: "Trebuchet MS";
font-size:14px;
font-weight: bold;
color:#0000FF;
line-height:50px;
text-decoration:underline;
padding-bottom:1px;

}
a.visited{
font-family: "Trebuchet MS";
font-size:14px;
font-weight: bold;
color:#000066;
line-height:50px;
text-decoration:none;
}
a.active{
font-family: "Trebuchet MS";
font-size:14px;
font-weight: bold;
color:#0000FF;
line-height:50px;
text-decoration:none;
padding-bottom:1px;
} 然后修改index.jsp主页,代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

                欢迎使用火车票订票系统管理系统 ,如有不足,敬请指导! 

系统管理员登录

                用户名:


                密 码:

关于我们 | 网站声明

版权所有©2014-2015 北京理工大学 Eastmount
京ICP备10009636号

    此时运行Web网站,点击Run As=》MyEclipse Server Application。如图所示:


    此时,输入用户名和密码登录效果如下图所示:

    然后在src中新建文件夹Servlet,新建HomePageAction.java文件,代码如下:

package servlet;

import java.io.IOException;
import java.sql.*; //导入数据库处理所有库
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.swing.JOptionPane;

//用户登录处理Servlet 系统登录主页处理表单
public class HomePageAction extends HttpServlet {

private Connection cn=null;     //定义数据库连接对象
private String driverName=null; //数据库驱动器
private String url=null;        //数据库地址URL

//初始化方法,取得数据库连接对象
public void init(ServletConfig config) throws ServletException
{
    super.init(config);
    driverName=config.getInitParameter("driverName");
    url=config.getInitParameter("url");
    
    try {
        Class.forName(driverName);
        cn=DriverManager.getConnection(url);
    } catch(Exception e) {
        System.out.println("取得数据库连接错误:"+e.getMessage());
    }
}

//处理GET请求方法
public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException
{
    //取得用户注册表单提交的数据
    String userid=request.getParameter("userid");
    String password=request.getParameter("password");
    //判断登录账号为空,则自动跳转到注册页面
    if(userid==null||userid.trim().length()==0) {
        response.sendRedirect("index.jsp");
        JOptionPane.showMessageDialog(null, "User name or password can't be empty!");
    }
    //判断登录密码为空
    if(password==null||password.trim().length()==0) {
        response.sendRedirect("index.jsp");
        JOptionPane.showMessageDialog(null, "User name or password can't be empty!");
    }
    //查询数据库和跳转到登录主界面
    try {
        //查询数据库操作
        
        //跳转到主界面
        response.sendRedirect("success.jsp");
    } catch(Exception e) {
        System.out.println("错误:"+e.getMessage());
        response.sendRedirect("index.jsp");
    }
}

//处理POST请求方法
public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException 
{
    doGet(request,response);
}

//销毁方法
public void destroy() {
    super.destroy();
    try {
        cn.close();
    }catch(Exception e) {
        System.out.println("关闭数据库错误:"+e.getMessage());
    }
}       

} 同时在WEB-INF文件夹web.xml文件中配置Servlet,代码如下:

index.jsp

HomePageAction
servlet.HomePageAction

driveName
sun.jdbc.odbc.Jdbc0dbcDriver


url
jdbc:odbc:cityoa



HomePageAction
/loginAction.do


    最后新建success.java文件,跳转后显示的页面。

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

    界面表单提交跳转成功 

    返回

   显示效果如下图所示:


    此时Servlet配置成功,而且表单跳转功能也实现了。你可能遇到如下错误:

    解决方案如下:

    最后希望文章对你有所帮助,下一篇文章准备讲述JSP网站的一种经典网站模型和MyEclipse数据库配置相关知识。如果文章有不足或错误的地方,还请海涵!
    (By:Eastmount 2015-5-7 清晨4点   http://blog.csdn.net/eastmount/)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容

  • 本文包括:1、Listener简介2、Servlet监听器3、监听三个域对象创建和销毁的事件监听器4、监听三个域对...
    廖少少阅读 5,988评论 6 28
  • 一套完整的登陆注册业务逻辑 准备部分基础工具类Basepackage com.jericho.tools;impo...
    JerichoPH阅读 2,430评论 0 9
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,560评论 18 399
  • 这部分主要是与Java Web和Web Service相关的面试题。 96、阐述Servlet和CGI的区别? 答...
    杂货铺老板阅读 1,397评论 0 10
  • 高中时候,后桌的女生在草稿纸上写了满满一页的忍,黑色铅字笔充斥了整张白纸看的触目惊心。当时想,她是在忍受什么吗? ...
    紫蘇卡卡阅读 312评论 3 7