第9章WEB09-Servlet篇

今日任务
? 完成系统的登录的功能
? 完成登录系统后页面定时跳转
? 记录系统登录成功后,系统被访问多少次
教学导航
教学目标
了解HTTP协议
掌握Servlet的编写
了解ServletConfig的使用
掌握ServletContext对象的使用
教学方法
案例驱动法
1.1 上次课内容回顾:
XML :

  • XML的概述:

    • 什么是XML:可扩展标记语言.
    • XML的作用:作为软件的配置文件,传输和存取数据.
    • XML的使用:
      • XML的基本语法:

        • 标签必须有开始和结束.
        • 必须有跟标签
        • 区分大小写.
        • 正确嵌套.
      • XML的文档声明:<?xml version=”1.0” encoding=”UTF-8”?>
      • XML的注释:<!-- 注释 -->
      • XML的元素:
        • 命名规范:不能以数字开头,标签包含字母或数字,不能以xml开头,不能出现空格 冒号.
      • XML的属性:
        • 命名规范:与元素一致.属性必须加引号.
      • XML的特殊字符和CDATA区.
  • XML的解析:
    • XML的解析方式有哪些:

      • DOM和SAX:

        • DOM一次性将文档加载到内存,形成树形结构.如果文档过大容易导致内存溢出.方便增删改的操作.
        • SAX边读边解析的方式,如果文档大,不会导致内存溢出,但是不能进行增删改.
    • 常见的解析XML的API:
      • JAXP,JDOM,DOM4J...
    • 使用DOM4J解析XML:
  • XML的约束:(了解)
    • XML的约束有哪些区别是什么?

      • DTD和Schame:

        • DTD的语法是自成一体,Schema使用的XML的语法.
        • Schema有比DTD更强大的语义和语法的约束.
        • Schema支持名称空间.
          Tomcat
  • WEB的相关的内容:
    • 软件架构:
    • 服务器:就是一台电脑,这台电脑上安装了服务器的软件.
    • 常见的WEB服务器:WebSphere,WebLogic,Tomcat,JBoss,IIS,apache...
    • 使用Tomcat:
  • 下载和安装Tomcat:
  • Tomcat的目录的结构:
    • tomcat/conf:
    • tomcat/webapps:
    • tomcat/logs:
    • tomcat/bin:
  • 发布一个web项目到服务器的方式:
    • 一、复制项目到webapps下.
    • 二、修改server.xml,配置<Context path=”” docBase=””/>
    • 三、在conf/Catalina/localhost/xxx.xml 配置<Context docBase=””/>
  • 使用STS配置Tomcat:
    1.2 案例一:使用Servlet完成一个用户登录的案例.1.2.1 需求:
    在网站的首页上,登录的链接,点击登录的链接,可以跳转到登录的页面.在登录的页面中输入用户名和密码点击登录的案例.完成登录的功能.

    1.2.2 分析:1.2.2.1 技术分析:
    【HTTP的协议的概述】
    ? 协议:
  • 什么是协议:规定双方需要遵守的规则.
    ? HTTP协议:
  • 什么是HTTP协议:用来规定浏览器与服务器之前需要遵守的规则.

    ? HTTP协议的作用:规范浏览器和服务器之间的数据传递.
    ? HTTP协议的特点:
  • 基于请求和响应的模型.
    • 必须先有请求后有响应.
    • 请求和响应必须成对出现.
  • 默认的端口号是80.
    ? HTTP协议的版本:
  • 1.0 :每次响应后即刻关闭了连接.
  • 1.1 :现在使用.不是每次响应后挂断,等待长时间以后没有请求会挂断.
    【HTTP协议的演示】
    抓包分析:GET方式:
  • 请求部分:
    GET /day09/demo1-http/demo2.html?name=aaa&age=23 HTTP/1.1
    Accept: text/html, application/xhtml+xml, /
    X-HttpWatch-RID: 59176-10011
    Referer: http://localhost:8080/day09/demo1-http/demo1.html
    Accept-Language: zh-CN
    User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko
    Accept-Encoding: gzip, deflate
    Host: localhost:8080
    DNT: 1
    Connection: Keep-Alive
    抓包分析:POST方式:
    POST /day09/demo1-http/demo2.html HTTP/1.1
    Accept: text/html, application/xhtml+xml, /
    X-HttpWatch-RID: 59176-10031
    Referer: http://localhost:8080/day09/demo1-http/demo1.html
    Accept-Language: zh-CN
    User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko
    Content-Type: application/x-www-form-urlencoded
    Accept-Encoding: gzip, deflate
    Host: localhost:8080
    Content-Length: 15
    DNT: 1
    Connection: Keep-Alive
    Cache-Control: no-cache
    name=bbb&age=38
  • 响应部分:
    HTTP/1.1 200 OK
    Server: Apache-Coyote/1.1
    Accept-Ranges: bytes
    ETag: W/"145-1461807615933"
    Last-Modified: Thu, 28 Apr 2016 01:40:15 GMT
    Content-Type: text/html
    Content-Length: 145
    Date: Thu, 28 Apr 2016 01:43:52 GMT
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    <h1>Demo2.html</h1>
    </body>
    </html>
    【HTTP协议的详解】
    ? 请求部分
  • 请求行
    • 提交方式:

      • 提交方式有很多,常用的GET和POST:
      • GET和POST的区别:
        • GET的提交的参数会显示到地址栏上,而POST不显示.
        • GET往往是有大小限制的,而POST没有大小的限制.
        • GET没有请求体,而POST有请求体.
    • 提交路径:
    • 协议版本:
  • 请求头
    • 都是键值对的形式显示的.一般一个key对应一个value,也有个别的是一个key对应多个value.
    • User-Agent :代表浏览器的类型. --- 文件下载:下载中文文件:IE使用URLEncodor进行编码,而Firefox使用Base64编码.
    • Referer :代表的是网页的来源. --- 防盗链.
    • If-Modified-Since :通常与响应中的头Last-Modified一起使用查找本地缓存.
  • 请求体
    • 就是POST提交方式的提交的参数.
      ? 响应部分
  • 响应行:
    • 协议版本
    • 状态码 :
      • 200 :成功
      • 302 :重定向
      • 304 :查找本地缓存
      • 404 :资源不存在
      • 500 :服务器内部错误
    • 状态码描述
  • 响应头:键值对,一般一个key对应一个value,也有一个key对应多个value.
    • Last-Modified :与请求中的If-Modified-Since一起使用查找本地缓存.
    • Content-Dispostion :文件下载的使用使用的一个头信息.
    • Location :重定向的跳转的路径.
    • Refresh :定时刷新/定时跳转.
  • 响应体:显示浏览器的页面的内容.
    【Servlet的概述】
    ? 什么是Servlet:
  • 就是一个运行在WEB服务器上的小的Java程序,用来接收和响应从客户端发送过来的请求,通常使用HTTP协议.
  • Servlet就是SUN公司提供的一个动态网页开发技术.
    ? Servlet的作用:
  • 用来处理从客户端浏览器发送的请求,并且可以对请求作出响应
    ? 使用Servlet:
  • 编写一个类实现Servlet接口.
  • 将编写的这个类配置到服务器中.
    ? Servlet的入门:
  • 编写类:
    public class ServletDemo1 implements Servlet{br/>@Override
    /**
    • 为用户处理请求和响应的方法.
      */
      public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
      res.getWriter().println("Hello Servlet...");
      }
      ...
      }
  • 配置:

    test1

    com.itheima.a_servlet.ServletDemo1

    test1

    /ServletDemo1

  • 访问:
    http://localhost:8080/day09/ServletDemo1
    【使用ServletRequest接收参数】
  • String getParameter(String name); ---用于接收一个名称对应一个值的数据.
  • String[] getParameterValues(String name);---用于接收一个名称对应多个值的数据.
  • Map getParameterMap(); ---用于接收表单中的所有的数据,Map的key是表单提交的参数名称,Map的value是提交参数的值.
  • Enumeration getParameterNames() ---用于获取表单中提交的所有的参数的名称.
    【Servlet的访问流程】
    【Servlet的实现的关系】
    Servlet :接口
    GenericServlet :通用的Servlet

    HttpServlet :HttpServlet

  • 编写一个类继承HttpServlet,重写doGet和doPost方法.
  • 配置
    1.2.3 代码实现1.2.3.1 步骤一:创建数据库和表:
create database day09;
use day09;
create table user(
id int primary key auto_increment,
username varchar(20),
password varchar(20),
nickname varchar(20)
);
insert into user values (null,‘aaa‘,‘111‘,‘小凤‘);
insert into user values (null,‘bbb‘,‘111‘,‘小童童‘);

1.2.3.2 步骤二:创建包和类:
1.2.3.3 步骤三:引入jar包

在登录成功后的代码上,定时的跳转.
public class UserRefreshServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
// 解决向页面输出中文的乱码问题!!!
response.setContentType("text/html;charset=UTF-8");
// 1.接收表单提交的参数.
String username = request.getParameter("username");
String password = request.getParameter("password");
// 2.封装到实体对象中.
User user = new User();
user.setUsername(username);
user.setPassword(password);
// 3.调用业务层处理数据.
UserService userService = new UserService();
User existUser = userService.login(user);
// 4.根据处理结果显示信息(页面跳转).
if(existUser == null){
// 登录失败
response.getWriter().println("<h1>登录失败:用户名或密码错误!~</h1>");
}else{
// 登录成功
// response.getWriter().println("Login Success...");
response.getWriter().println("<h1>登录成功!您好:"+existUser.getNickname()+"</h1>");
response.getWriter().println("<h3>页面将在5秒后跳转!</h3>");
response.setHeader("Refresh", "5;url=/day09/demo5-refresh/index.html");
}
} catch (Exception e) {
e.printStackTrace();
}
}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}

}

1.3.4 总结:1.3.4.1 使用JS控制读秒的效果.

<script type="text/javascript">
var time = 5;
window.onload = function(){
setInterval(‘changeTime()‘,1000);
}
function changeTime(){
time--;
document.getElementById("s1").innerHTML = time;
}
</script>

1.4 案例三:记录网站的登录成功的人数.1.4.1 需求:
登录成功后,5秒后跳转到某个页面,在页面中显示您是第x位登录成功的用户.
1.4.2 分析:1.4.2.1 技术分析:
【ServletContext对象】
***** ServletContext对象存取数据,存的数据都是有一定的作用的范围的.这种对象称为是域对象.

  • 用来存取数据:
  • 用来向ServletContext中存入数据.
  • 用来从ServletContext中获取数据.
  • 用来从ServletContext中移除数据.
    1.4.3 代码实现:
/**
 * 登录代码的Servlet
 */
public class UserCountServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

@Override
public void init() throws ServletException {
// 初始化一个变量count的值为0.
int count = 0;
// 将这个值存入到ServletContext中.
this.getServletContext().setAttribute("count", count);
}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
response.setContentType("text/html;charset=UTF-8");
// 1.接收表单提交的参数.
String username = request.getParameter("username");
String password = request.getParameter("password");
// 2.封装到实体对象中.
User user = new User();
user.setUsername(username);
user.setPassword(password);
// 3.调用业务层处理数据.
UserService userService = new UserService();
User existUser = userService.login(user);
// 4.根据处理结果显示信息(页面跳转).
if(existUser == null){
// 登录失败
response.getWriter().println("<h1>登录失败:用户名或密码错误!</h1>");
}else{
// 登录成功
// 记录次数:
int count = (int) this.getServletContext().getAttribute("count");
count++;
this.getServletContext().setAttribute("count", count);
response.getWriter().println("<h1>登录成功:您好:"+existUser.getNickname()+"</h1>");
response.getWriter().println("<h3>页面将在5秒后跳转!</h3>");
response.setHeader("Refresh", "5;url=/day09/CountServlet");
}
} catch (Exception e) {
e.printStackTrace();
}
}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}

}

public class CountServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 获得Count的值。
response.setContentType("text/html;charset=UTF-8");
int count = (int) this.getServletContext().getAttribute("count");
response.getWriter().println("<h1>您是第"+count+"位登录成功的用户!</h1>");
}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}

}

1.4.4 总结:1.4.4.1 ServletConfig:了解.获得Servlet的配置信息.

  • String getServletName(); ---获得Servlet在web.xml中配置的name的值.
  • String getInitParameter(String name); ---获得Servlet的初始化参数的.
  • Enumeration getInitParameterNames(); ---获得所有Servlet的初始化参数的名称.
    1.4.4.2 ServletContext:重要
    ServletContext的作用:
  • 1.用来获得全局初始化参数.
  • 2.用来获得文件的MIME的类型.
  • 3.作为域对象存取数据.
    ServletContext是一个域对象.
    • 作用范围:整个web工程.
    • 创建:服务器启动的时候,tomcat服务器为每个web项目创建一个单独ServletContext对象.
    • 销毁:服务器关闭的时候,或者项目从服务器中移除的时候.
  • 4.用来读取web项目下的文件.

原文地址:http://blog.51cto.com/13587708/2096516

时间: 2024-11-09 01:39:00

第9章WEB09-Servlet篇的相关文章

Java学习之Servlet篇

<JAVA遇见HTML——Servlet篇> Servlet 生命周期:Servlet 加载--->实例化--->服务--->销毁. init():在Servlet的生命周期中,仅执行一次init()方法.它是在服务器装入Servlet时执行的,负责初始化Servlet对象.可以配置服务器,以在启动服务器或客户机首次访问Servlet时装入Servlet.无论有多少客户机访问Servlet,都不会重复执行init(). service():它是Servlet的核心,负责响应客

.NET C#到Java没那么难,Servlet篇

前言 .NET C#到Java没那么难,都是面向对向的语言,而且语法还是相似的,先对比一下开发环境,再到Servlet,再到MVC,都是一样一样的,只是JAVA的配制项比较多而已,只要配好一个,后面都是copy,简直so easy,而且用myeclipse可以省一些配制 Java与.NET的区别不在它们的本身,最大的区别在于他们背后的力量,相信大家都能感觉得到,我就不多说. 目录 一..NET C#到Java没那么难,开发环境篇 二..NET C#到Java没那么难,Servlet篇 三..NE

XSS的原理分析与解剖:第三章(技巧篇)**************未看*****************

??0×01 前言: 关于前两节url: 第一章:http://www.freebuf.com/articles/web/40520.html 第二章:http://www.freebuf.com/articles/web/42727.html 说的xss的原理及不同环境的构造方法.和XSS的分类及挖掘方法.那么本期则说XSS技巧,前面两个干货不太多,讲的都是比较基础的.而这期则是满满的干货. 从本期开始,XSS我就开始深入了.至 于下一章XSS编码,已经被0xExploit写过了( http:

XSS的原理分析与解剖:第三章(技巧篇)【转】

0×01 前言: 关于前两节url: 第一章:http://www.freebuf.com/articles/web/40520.html 第二章:http://www.freebuf.com/articles/web/42727.html 说的xss的原理及不同环境的构造方法.和XSS的分类及挖掘方法.那么本期则说XSS技巧,前面两个干货不太多,讲的都是比较基础的.而这期则是满满的干货. 从本期开始,XSS我就开始深入了.至 于下一章XSS编码,已经被0xExploit写过了( http://

第三章 深入Servlet技术

3.1 配置Servlet <servlet-name>,<servlet-class>是必须配置的,以便于web容器知道浏览器具体访问的是哪个servlet. <init-param>用于初始化参数,在servlet中可使用getServletContext().getInitParam(String paramName)来获取初始化参数值. <load-on-startup>配置该servlet加载方式,置1时Tomcat将在启动时便加载该servlet

JavaWeb之Servlet篇

一.Servlet概述 1.什么是Servlet? Servlet可以说是JavaWeb的核心,属于动态资源.其作用就是处理客户端请求,服务器会把接收到的请求交给Servlet来处理,在Servlet要做的就是: 1.获取请求数据:2,处理请求:3.回复响应给客户端. 每个Servlet必须实现javax.servlet.Servlet接口. 2.Servlet的生命周期方法: void init(ServletConfig):(出生时调用,一生只有1次): void service(Servl

java web 入门实例servlet篇(显示后台数据库列表,删除某一条记录并显示)

编写过程中需要注意的问题: 1.建立eclipse动态web工程时,需要改写编译后class文件的位置,通常情况下是这个位置:/WebContent/WEB-INF/classes 2.配置的页面链接和servlet类之间有两种方式: 1)通过在web.xml文件中进行配置:示例如下 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2

第二章.JSP/Servlet及相关技术详解

JSP的4种基本语法: 1.JSP注释: <%-- JSP注释部分 --%> 2.JSP声明: <%! //声明一个整型变量 public int count; //声明一个方法 public String info(){ return "hello"; } %> 3.输出JSP表达式: <%=count++%> 这句话代替了Java中的out.print(count++);但是注意输出表达式后面不能有分号. 4.JSP脚本: 1 <%@ pa

ASP.NET 实现上一篇文章 下一篇文章

select top 1 * from job_hrnews where newsid>162  --下一篇 select top 1 * from job_hrnews where newsid<162 order by newsid desc --上一篇 这篇源于网络,网址已经忘记,敬请谅解!

淘宝(阿里百川)手机客户端开发日记第十一篇 JSP+Servlet篇(一)

由于本人从事.net开发已有多年经验,今天由于工作需要,我只能学习下JSP+Servlet,至于java web提供了更好的开发框架MVC,现在由于时间关系,我只好用JSP+Servlet来搭建服务器端开发.主要是提供了客户端的广告位设置,引导页的设置,以及商品分类的设置,和商品的详情,最后是购物车(客户端). 首先,我们先认识下Java Web开发项目基本的结构 我们写Servlet,和我们.net开发里的服务器端开发类似.服务端的开发主要是和数据库,业务逻辑代码有很大关系.然后将数据投递给前