美文网首页
Servlet入门

Servlet入门

作者: 磊_5d71 | 来源:发表于2018-09-19 15:58 被阅读0次
  • Servlet(Server Applet),全称Java Servlet,未有中文译文。是用Java编写的服务器程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。

  • 案例

package com.alan.servlet;

import java.io.IOException;

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

//需要继承HttpServlet类
public class LoginServlet extends HttpServlet{

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("我是doGet方法");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("我是doPost方法");

    }
}
  • 在web.xml中进行虚拟路径配置
    <!-- 
    给LoginServlet类配置一个对象访问的虚拟路径,一个servlet标签对应一个类
   -->
   <servlet>
        <!-- 给类配置别名,方便使用,一般配置为类的名称 -->
        <servlet-name>LoginServlet</servlet-name>
        <servlet-class>com.alan.servlet.LoginServlet</servlet-class>
   </servlet>
    <servlet-mapping>
        <servlet-name>LoginServlet</servlet-name>   
        <!-- 配置对外访问虚拟路径,就是/LoginServlet -->
        <url-pattern>/LoginServlet</url-pattern>
    </servlet-mapping>

servlet路径问题

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!-- 路径对应http://localhost:8080/ServletProj/LoginServlet -->
<%
    String basePath = request.getScheme()+":"+"//"+request.getServerName()+":"+request.getServerPort()
    +request.getServletContext().getContextPath()+"/";
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登陆</title>
</head>
<body>
    <form align="center"
        action="<%=basePath %>LoginServlet" method="post">
        <p>
            用户名:<input type="text" name="username">
        </p>
        <p>
            密码:<input type="password" name="password">
        </p>
        <p>
            <input type="submit" value="登陆"> <input type="reset"
                value="重置">
        </p>
    </form>
</body>
</html>

Servlet生命周期

  • Servlet生命周期分为三个阶段
    1、初始化阶段调用init() 方法
    2、响应客户请求阶段调用service()方法
    3、终止阶段调用destroy()方法

  • 案例

package com.alan.servlet;

import java.io.IOException;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

//下述配置方式等同于在web.xml中配置
@WebServlet("/LifeServlet")
public class LifeServlet extends HttpServlet {
    
    @Override
    public void init(ServletConfig config) throws ServletException {
        System.out.println("Servlet的init()方法");
    }
    
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("Servlet被请求了");
    }

    @Override
    public void destroy() {
        System.out.println("Servlet被销毁了");
    }

}

image.png

Servlet请求与响应

  • 案例
package com.alan.servlet;

import java.io.IOException;

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

//需要继承HttpServlet类
public class LoginServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 获取表单提交过来的数据,先设置编码格式。只对post方式有效
        request.setCharacterEncoding("utf-8");
        String name = request.getParameter("username");
        String password = request.getParameter("password");

        System.out.println("username:" + name);
        System.out.println("password:" + password);
    }

    // 使用doPost()方法时,也调用doGet()方法
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }

}

ServletContext与ServletConfig

  • ServletDemo1类
package com.alan.servlet;

import java.io.IOException;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


/**
 * ServletContext对象:表示整个JavaWeb工程
 * ServletConfig对象:表示某一个Servlet类的配置文件
 * @author alan
 *
 */

@WebServlet("/ServletDemo1")
public class ServletDemo1 extends HttpServlet {
       

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取整个web工程对象
        //context对象是一个域对象,可以往某一个域对象中存放数据,并且还可以取出存放的数据
        ServletContext context = this.getServletContext();
        //往context域对象中存放数据
        context.setAttribute("username","张三");
        //取出context域中的存放数据
        Object result = context.getAttribute("username");
        //打印取出的结果
        System.out.println(result);
        
    }


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

}
  • ServletDemo2类
package com.alan.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;




@WebServlet("/ServletDemo2")
public class ServletDemo2 extends HttpServlet {


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

        Object resutl = this.getServletContext().getAttribute("username");
        System.out.println(resutl);
    }

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

}
  • ServletDemo3类
package com.alan.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;




//虚拟路径在web.xml中配置,ServletConfig
public class ServletDemo3 extends HttpServlet {


    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //首先获取ServletConfig对象
        String result = this.getServletConfig().getInitParameter("encoding");
        System.out.println(result);
        
    }


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

        
    }

}
  • web.xml更新
    <servlet>
    <servlet-name>ServletDemo3</servlet-name>
    <servlet-class>com.alan.servlet.ServletDemo3</servlet-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>utf-8</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>ServletDemo3</servlet-name>
    <url-pattern>/ServletDemo3</url-pattern>
  </servlet-mapping>

转发与重定向的区别

  • 实现转发调用的是HttpServletRequest对象中的方法,实现重定向调用的是HttpServletResponse对象中的方法
  • 转发时浏览器中的url地址不会发生改变,重定向时浏览器中的url地址会发生改变
  • 转发时浏览器只请求一次服务器,重定向时浏览器请求两次服务器
  • 案例
package com.alan.servlet;

import java.io.IOException;

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

//需要继承HttpServlet类
public class LoginServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 获取表单提交过来的数据,先设置编码格式。只对post方式有效
        request.setCharacterEncoding("utf-8");
        String name = request.getParameter("username");
        String password = request.getParameter("password");

        System.out.println("username:" + name);
        System.out.println("password:" + password);
        
        //1、通过转发实现跳转
        if(name.equals("admin")&&password.equals("123")) {
            request.getRequestDispatcher("/success.jsp").forward(request, response);
        }else {
            //request.getRequestDispatcher("/fail.jsp").forward(request, response);
            //2、通过重定向实现跳转,重定向需要写工程名字
            //注意url也放生变化,最后为fail.jsp
            response.sendRedirect("/ServletProj/fail.jsp");
            
        }
        
    }

    // 使用doPost()方法时,也调用doGet()方法
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }

}

相关文章

  • 4/14day33_Servlet

    回顾 Servlet入门 今日目标 一 Servlet概述 servlet= server+applet 运行在服...

  • 看似简单的Servlet,搞定它让你web开发道路一片光明

    Servlet入门 今日目标 一 Servlet概述 servlet= server+applet 运行在服务器端...

  • Web 基础 7 Servlet的概述与入门案例

    1.1 Servlet入门案例 1.1.1 Servlet简介   Servlet是用Java编写的服务器端程序。...

  • Servlet入门教程

    Servlet入门教程 源码下载 什么是Servlet? Servlet 为创建基于 web 的应用程序提供了基...

  • day02

    Servlet入门 1.1Serlvet介绍 文档总结: 什么是servlet?处理请求和响应的java程序。 怎...

  • servlet

    servlet的入门 1、创建一个类,实现Servlet接口 2、重写init、service、destory 3...

  • J2EE——之Servlet篇

    本篇要点:1、servlet入门准备2、servlet生命周期3、request和response对象4、解决中文...

  • Servlet入门

    Servlet简介 Servlet(Servlet Applet)是Java Servlet的简称,称为小服务程序...

  • Servlet入门

    Servlet(Server Applet),全称Java Servlet,未有中文译文。是用Java编写的服务器...

  • Servlet入门

    //参考来源:https://www.cnblogs.com/whgk/p/6399262.html 一、什么是s...

网友评论

      本文标题:Servlet入门

      本文链接:https://www.haomeiwen.com/subject/pyrvnftx.html