J2EE学习从菜鸟变大鸟之九 深入浅出理解 Servlet-----实例解析
关于Servlet的基础内容在前面已经和大家分享过了,参考J2EE学习从菜鸟变大鸟之七
Servlet,现在结合到DRP中学习,深刻的体会Servlet起到了枢纽中转的作用,控制逻辑(到MVC中更像是控制器),特别类似做BS项目时后台asp.net中的一般处理程序:前台html获取的数据把数据--->一般处理程序-->经过一般处理程序传递过来到数据库中查询---一>般处理程序--->界面,浏览器渲染后显示。
Servlet是服务器端的小程序,在BS架构下,用于处理客户端请求的响应的处理,期特点单实例,多线程的方式运行,servlet在容器中运行,其生命周期由tomcat来管理,线程是不安全的,在使用它时需要注意的是慎用成员变量(不安全的).
Servlet是在服务器端上(我现在使用的是Tomcat)
前端的Html
<html>
<head>
<title>登录</title>
</head>
<body>
<!--
<form action="http://127.0.0.1:8080/test_servlet/loginServlet">
-->
<form action="exam/loginServlet" method="post">
用户:<input type="text" name="username"><br>
密码:<input type="password" name="password"><br>
<input type="submit" value="登录">
</form>
</body> </html>
Servlet:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*; public class LoginServlet extends HttpServlet { public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException,
IOException {
String username = request.getParameter("username");
String password = request.getParameter("password"); System.out.println("username=" + username);
System.out.println("password=" + password); response.setContentType("text/html;charset=GB18030"); //response.getWriter().println("Login Success!!!");
//response.getWriter().println("登录成功!!!");
response.getWriter().println("<html>");
response.getWriter().println("<head>");
response.getWriter().println("<title>登录信息</title>");
response.getWriter().println("</head>");
response.getWriter().println("<body>");
response.getWriter().println("欢迎【" + username + "】用户登录成功!!!");
response.getWriter().println("</body>");
response.getWriter().println("</html>");
} public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException,
IOException {
doGet(request, response);
}
}
通过xml需要配置servlet
<?xml version="1.0" encoding="ISO-8859-1"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0"> <servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>LoginServlet</servlet-class> </servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<!--
<url-pattern>/loginServlet</url-pattern>????????
--> <url-pattern>/exam/loginServlet</url-pattern>
</servlet-mapping>
</web-app>
在地址栏中输入地址:http://127.0.0.1:8080/test_servlet/login.html,读取到登录的页面如下图
Tomcat收到
成功登录:
整个实现的流程
整个流程:
当点击html中的submit后,则按照action对应的相对路径http://127.0.0.1:8080/test_servlet/loginServlet找到web.xml文件中<servlet-mapping>的<url-pattern>中的loginServlet,在根据<servlet-name>为loginServlet找到<servlet>中<servlet-name>为MyServlet的,然后生成一个LoginServlet的实例,再调用LoginServlet的doPost方法,在浏览器上显示结果。
结合UML图深刻理解:
总结
servlet处理逻辑既让结构清晰又易于编写代码和维护,系统更加的灵活;我们基本就是实现了对扩展开发,对修改封闭的原则。
等接触到MVC之后再来进一步深入的讨论,期待……
J2EE学习从菜鸟变大鸟之九 深入浅出理解 Servlet-----实例解析的更多相关文章
- J2EE学习从菜鸟变大鸟之七 Servlet
Servlet现在自己的理解是一个控制器,简单的可以理解为不同的JSP页面由用户发送过来的请求可以由Servlet控制器来控制其向下调用的方向(结合三层好理解),但它比较特殊,因为它通常会从外界接收数 ...
- J2EE学习从菜鸟变大鸟之八 企业级项目开发的思考
什么是企业级项目开发 "企业级项目".企业级项目开发,Java也是企业级项目开发,这个我们到处说.听,每天被我们挂在嘴边,可是到底什么项目才算是"企业级"?自己 ...
- J2EE学习从菜鸟变大鸟之六 EJB(Enterprise JavaBean)企业级Java组件
EJB (EnterpriseJavaBean)是J2EE的一部分,定义了一个用于开发基于组件的企业多重应用程序的标准.其特点包括网络服务支持和核心开发工具(SDK).其称为Java 企业Bean,是 ...
- J2EE学习从菜鸟变大鸟之四 JNDI(Java Naming and Directory Interface)
掌握 J2EE 是件不是很轻松的事哈,但是很有意思,抽象抽象哈哈,因为它包含的技术和缩略语在不断地增长.Java 命名和目录接口(Java Naming and Directory Interface ...
- J2EE学习从菜鸟变大鸟之五 JDBC(Java Data Base Connectivity)
JDBC刚开始学习这个的时候看到了,以为是ODBC呢,很是相似啊,总的来说还是基本上一类的东东,但是还有一些细微的区别,下面和大家一起分享学习. JDBC(Java Data Base Connect ...
- Java学习从菜鸟变大鸟之一 hashCode()和equals()的本质区别和联系
在学习java,根据视频做实例的过程中,对equals和hashcode两个方法理解稍微深刻一点,主要是它们两个很容易混淆,容易出错,自己又通过网上的资料学习,和大家分享 equals()方法 equ ...
- Java学习从菜鸟变大鸟之三 多线程中Thread 和Runnable的区别与运用
多线程机制是java中的一个特点,掌握它对后面的知识的理解至关重要,是java工程师的必备知识,多线程指在单个程序中可以运行多个不同的线程执行的不同的任务,线程是一个程序内部的顺序控制流.进程是静态的 ...
- Java学习从菜鸟变大鸟之二 输入输出流(IO)
在软件开发中,数据流和数据库操作占据了一个很重要的位置,所以,熟悉操作数据流和数据库,对于每一个开发者来说都是很重要的,今天就来总结一下JavaI/O. 流 流是一个很形象的概念,当程序需要读取数据的 ...
- [游戏开发-学习笔记]菜鸟慢慢飞(九)- NGUI- UIWidget(官方说明翻译)
随机推荐
- mysql服务无法正常启动
这个时候多半是ini文件出了问题. 1.去检查你的my.ini的保存编码格式是不是ANSI,如果不是将其改为ANSI (一般我们修改my.ini时,都无法直接保存,而是选择另存为在其他目录下,再去替换 ...
- MFC程序设计小结
由于毕业设计要用到MFC,因此本人这段时间开始学习MFC编程,边学边做,现将一些重要的知识点总结如下: 创建一个MFC程序,操作步骤很简单,要点就是选择MFC AppWizard(exe).单文档或者 ...
- Java常量初始化后不会再去重新获取
Java虚拟机编译机制:更改常量部分 最近一个Java项目中需要修改一个静态常量的值,本地修改编译以后调试正常,然后把对应的entity类的class文件上传到服务器对应的目录以后系统依旧我行我素,各 ...
- vmware迁移到openstack的一些坑
title: 安全平台迁移 tags: 新建,模板,小书匠 grammar_cjkRuby: true --- 前言 主要有三个坑: 一是如果原先虚拟机没有安装virtio驱动,要设置设备驱动为ide ...
- spring web项目下,判断项目是否启动完成
本文同时发布于见鬼网:https://faceghost.com/article/483341 概述:spring 加载完成后,我们有时候会做一些初始化工作,如加载一些缓存,DB,等,这里采用实现Se ...
- linux系统下安装jdk,mysql,tomcat 和redis 和jedis入门案例
Day47笔记Linux+redis入门 Day47 知识讲解:Jedis 1.Linux上jdk,mysql,tomcat安装(看着文档安装) 准备工作: 因为JDK,TOMCAT,MYSQL的 ...
- Node.js Path 模块
Node.js path 模块提供了一些用于处理文件路径的小工具,我们可以通过以下方式引入该模块: var path = require("path") 方法 序号 方法 & ...
- 深度解读GoogleNet之Inception V1
GoogleNet设计的目的 GoogleNet设计的初衷是为了提高在网络里面的计算资源的利用率. Motivation 网络越大,意味着网络的参数较多,尤其当数据集很小的时候,网络更容易发生过拟合. ...
- dimens.xml详解
本文联合两篇博文和自身理解写下 其中一篇:http://blog.csdn.net/hnzcdy/article/details/50628993 另一篇:暂不知原作者 Android中官方建议的屏幕 ...
- Bootstrap3 排版-缩略语
当鼠标悬停在缩写和缩写词上时就会显示完整内容,Bootstrap 实现了对 HTML 的 <abbr> 元素的增强样式.缩略语元素带有 title 属性,外观表现为带有较浅的虚线框,鼠标移 ...