JSP笔记 -Servlet技术

来源:互联网 发布:梁朝伟张曼玉 知乎 编辑:程序博客网 时间:2024/05/20 23:04

凡事都有偶然的凑巧,结果却又如宿命的必然。——沈从文《边城》


Servlet 技术

Servlet 是一种独立于平台和协议的服务器端的 Java 技术,它使用 Java 语言编写,可以用来生成动态的 Web 页面。 与 Java 程序不同,Servlet对象主要封装了对 HTTP 请求的处理,并且它的运行需要 Servlet 容器(Tomcat和 JBoss 等)的支持。 在如今的 Java EE 开发中,Servlet 占有非常重要的地位,它对Web请求的处理功能也是非常强大的。

Servlet 是在服务器上运行的小程序。一个Servlet就是一个Java类,并且可以通过“请求-响应”编程模型来访问的这个驻留在服务器内存里的Servlet程序。

Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层

使用 Servlet,您可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。

Servlet 架构

下图显示了 Servlet 在 Web 应用程序中的位置。

这里写图片描述

Servlet 任务

Servlet 执行以下主要任务:

  • 读取客户端(浏览器)发送的显式的数据。这包括网页上的 HTML 表单,或者也可以是来自 applet 或自定义的 HTTP 客户端程序的表单。

  • 读取客户端(浏览器)发送的隐式的 HTTP 请求数据。这包括 cookies、媒体类型和浏览器能理解的压缩格式等等。

  • 处理数据并生成结果。这个过程可能需要访问数据库,执行 RMI 或 CORBA 调用,调用 Web 服务,或者直接计算得出对应的响应。

  • 发送显式的数据(即文档)到客户端(浏览器)。该文档的格式可以是多种多样的,包括文本文件(HTML 或 XML)、二进制文件(GIF 图像)、Excel 等。

  • 发送隐式的 HTTP 响应到客户端(浏览器)。这包括告诉浏览器或其他客户端被返回的文档类型(例如 HTML),设置 cookies 和缓存参数,以及其他类似的任务。

1 手动编写一个Servlet

1.继承HttpServlet
2.重写doGet() 或者 doPost() 方法
3. 在web.xml中注册Servlet

<!-- 注册Servlet模板 -->    <servlet>        <!-- Servlet描述信息 -->        <description>This is my first Servlet</description>        <!-- Servlet的名称 -->        <servlet-name>FirstServlet</servlet-name>        <!-- Servlet类的完整类名 -->        <servlet-class>com.peng.FirstServlet</servlet-class>    </servlet>    <!-- Servlet映射 -->    <servlet-mapping>        <!-- Servlet名称 -->        <servlet-name>FirstServlet</servlet-name>        <!-- 访问URL地址 -->        <url-pattern>/firstServlet</url-pattern>    </servlet-mapping>

HelloServlet.java

//package servlet;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class HelloServlet extends HttpServlet {    @Override    protected void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        // TODO Auto-generated method stub        System.out.println("处理get请求.....");        PrintWriter out = response.getWriter();        response.setContentType("text/html);charset=utf-8");        out.println("<strong> Hello Servlet!<strong>");    }    @Override    protected void doPost(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        // TODO Auto-generated method stub        System.out.println("处理post请求.....");        PrintWriter out = response.getWriter();        response.setContentType("text/html);charset=utf-8");        out.println("<strong> Hello Servlet!<strong>");    }}

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body>    <h1>我的第一个Servlet例子</h1>    <hr>    <a href="servlet/HelloServlet" >Get方式请求</a>    <form action="servlet/HelloServlet" method="post">        <input type="submit" value="Post提交方法">    </form></body></html>

web.xml

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xmlns="http://java.sun.com/xml/ns/javaee"    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"    id="WebApp_ID" version="3.0">    <display-name>ServletDemo</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>        <servlet-name>HelloServlet</servlet-name>        <servlet-class>servlet.HelloServlet</servlet-class>    </servlet>    <servlet-mapping>        <servlet-name>HelloServlet</servlet-name>        <url-pattern>/servlet/HelloServlet</url-pattern>    </servlet-mapping></web-app>

2 使用Eclipse编写servlet

采用注解配置 Servlet

//package servlet;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * Servlet implementation class ForwordServlet */ /** * Servlet3.0新特性(得Tomcat7.0版本及以上) * 不会自动在web.xml中生成该Servlet对应的mapping信息,而是在Servlet代码中加入注解@WebServlet */@WebServlet("/servlet/ForwordServlet")public class ForwordServlet extends HttpServlet {    private static final long serialVersionUID = 1L;    /**     * @see HttpServlet#HttpServlet()     */    public ForwordServlet() {        super();        // TODO Auto-generated constructor stub    }    /**     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)     */    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        // TODO Auto-generated method stub        System.out.println("调用doget请求....");        response.getWriter().append("Served at: ").append(request.getContextPath());    }    /**     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)     */    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        // TODO Auto-generated method stub        doGet(request, response);    }}

3 Servlet生命周期

1.构造方法,生成实例,第一次请求时,驻存在内存之中。
2.初始化阶段,调用init()方法。
3.响应客户请求阶段,调用service()方法。由service()方法根据提交方式执行doGet()或者doPost()方法。
4.终止方法,调用Destroy()方法。
这里写图片描述

Servlet 生命周期:http://www.runoob.com/servlet/servlet-life-cycle.html
示例
index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body>    <h1>Servlet 生命周期</h1>    <hr>    <a href="servlet/TestServlet1">以Get方式请求</a></body></html>

TestServlet1.java

//package servlet;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * Servlet implementation class TestServlet1 */@WebServlet({ "/TestServlet1", "/servlet/TestServlet1" })public class TestServlet1 extends HttpServlet {    private static final long serialVersionUID = 1L;    /**     * @see HttpServlet#HttpServlet()     */    public TestServlet1() {        System.out.println("TestServlet1的构造方法");        // TODO Auto-generated constructor stub    }    @Override    public void destroy() {         System.out.println("TestServlet1的销毁方法");    }    @Override    public void init() throws ServletException {         System.out.println("TestServlet1的初始化");    }    /**     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)     */    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        System.out.println("TestServlet1的doget方法");        response.setContentType("text/html;charset=utf-8");        PrintWriter out = response.getWriter();        out.println("<h1>你好,我是TestServlet1</h1>");        response.getWriter().append("Served at: ").append(request.getContextPath());    }    /**     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)     */    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        // TODO Auto-generated method stub        doGet(request, response); //让dopost执行doget方法    }}

点开链接:

TestServlet1的构造方法TestServlet1的初始化TestServlet1的doget方法

关闭 Tomcat,才执行构造方法:

TestServlet1的构造方法TestServlet1的初始化TestServlet1的doget方法十月 19, 2016 2:58:56 下午 org.apache.catalina.core.StandardServer await信息: A valid shutdown command was received via the shutdown ..TestServlet1的销毁方法

自动加载servlet,数字越小级别越高。

<servlet>..<servlet-name> ..</servlet-name><load-on-starup>1</load-on-starup></servlet>

http://www.imooc.com/video/5551

Servlet 类文件被更新后,重新装载servlet。

4 在 servlet 中实现页面转发

  • forward() 方法
request.getRequestDispatcher("../userinfo.jsp").forward(request,response);
  • include() 方法
request.getRequestDispatcher.include(request,response);

5 Servlet 处理表单数据

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><!DOCTYPE html><html><head><meta charset="UTF-8"><title>填写留言信息</title></head><body><form id="form1" name="form1" method="post" action="MessageServlet">      留&nbsp;言&nbsp;人:      <input name="person" type="text" id="person" />      <br />      <br />    留言内容:    <textarea name="content" cols="30" rows="5" id="content"></textarea>    <br />    <br />    <input type="submit" name="Submit" value="提交" />    &nbsp;    <input type="reset" name="Submit2" value="重置" /></form></body></html>
//package com.servlet;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * Title: MessageServlet * Description: Servlet实现类MessageServlet * @author Peng * @date 下午3:59:53 */@WebServlet("/MessageServlet") // 注解方式配置Servletpublic class MessageServlet extends HttpServlet {    private static final long serialVersionUID = 1L;    /**     * 构造方法     */    public MessageServlet() {        super();    }    /**     * 处理HTTP POST请求     */    protected void doPost(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        request.setCharacterEncoding("UTF-8");// 设置请求的编码,防止中文乱码        String person = request.getParameter("person"); // 留言人        String content = request.getParameter("content"); // 留言内容        response.setContentType("text/html;charset=UTF-8"); // 设置内容类型        PrintWriter out = response.getWriter(); // 创建输出流对象        out.println("<html><head><title>获取留言信息</title></head><body>");        out.println("留言人:" + person + "<br>");        out.println("留言内容:" + content + "<br>");        out.println("<a href='index.jsp'>返回</a>");        out.println("</body></html>");        out.close(); // 关闭输出流对象    }}

这里写图片描述

2 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 w10系统玩刺激战场声音小怎么办 宝宝不咳嗽但是喉咙有痰怎么办 深圳限行如果车堵在路上怎么办 奔跑吧qq中奖我填写资料怎么办 微信之前绑定的手机号丢了怎么办 龙之谷手游换装备洗炼材料怎么办 小学生在班上碰到流氓同学怎么办 问道手游仓库密码忘了怎么办 问道手游安全码忘了怎么办 问道手游账号密码忘了怎么办 坐一天一夜长途车腰疼怎么办 智联的简历一直说不完整怎么办 智联招聘简历投错了怎么办 投简历的公司写错面试时怎么办 从原单位辞职后档案一直没提怎么办 手机因一些不良软件扣费怎么办 苹果手机玩崩坏3卡顿怎么办 以前很帅现在变得好难看了怎么办 偷了室友东西被发现了该怎么办 自己不喜欢狗但室友养狗怎么办 夏天身上闷热出很多小红豆怎么办? 海棠果核小孩吃进肚子了怎么办 大了叶海棠有点烂根怎么办? 刚栽的月季花苗叶子蔫了怎么办 对节白蜡盆景叶尖干枯发黑怎么办 婴儿皮肤被大人指甲划出血怎么办 三岁宝宝吃了铝箔包装纸怎么办 元宝鱼烂身子烂鳍尾巴怎么办 大掌门2多余的侠客令怎么办 vivo手机关机后开不了机怎么办 红米手机重置后开机黑屏怎么办 dnf夏日套光环选错了怎么办 ios6微信版本低登录不了怎么办 捡了一个苹果手机有id怎么办 外阴长了个包出血很痛怎么办 腿上烫成泡了泡泡破了掉皮了怎么办 脚上的脚气小泡泡破了怎么办 吃鸡使用改名卡改名符号怎么办 爱派平板电脑密码忘了怎么办 电脑优酷下载总显示未知错误怎么办 文本文档打开时显字符丢失怎么办