栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Servlet总结

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Servlet总结

Servlet
    • 1.Servlet基础
      • 1.1 Servlet结构体系
      • 1.2 Sevlet技术特点
      • 1.3 Servlet与JSP的区别
      • 1.4 第一个Servlet例子
      • 1.5 Servlet生命周期
    • 2.Servlet API编程常用接口和类
      • 2.1 Servlet接口
      • 2.2 ServletConfig接口
      • 2.3 HttpServletRequest接口
      • 2.4 HttpServletResponse接口
      • 2.5 GenericServlet类
      • 2.6 HttpServlet类
    • 3.Servlet获取表单数据
    • 4.Servlet之间的跳转
    • 5.获取初始化参数
    • 6.servlet九大内置对象

1.Servlet基础

servlet是运行在Web服务器端的Java应用程序,与Java此程序的区别就是,Serlvet对象主要封装了HTTP请求的处理,并且它的运行需要Servle容器的支持。

1.1 Servlet结构体系

Servlet是一个标准
Servlet和ServletConfig定义了Servlet的基本方法和相关配置信息

1.2 Sevlet技术特点
  • 功能强大
  • 可移植
  • 性能高效
  • 安全性高
  • 可扩展
1.3 Servlet与JSP的区别
  • 角色不同
  • 编程方法不同
  • Servlet需要编译后运行
  • 速度不同
1.4 第一个Servlet例子

创建Servlet

package com.lxg.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class Serlvet3 extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req,resp);
    }
}

在web.xml中配置servlet


        servlet3
        com.lxg.servlet.Servlet3
        
        5
    

    
    
        servlet3
        /servlet3
    
1.5 Servlet生命周期
  • 初始化阶段,可以是在服务器启动初始化,也可以在第一次调用初始化,生成实例。
  • 调用init();
  • 调用servicr();判断是哪一种请求,get请求会调用doGet(),post请求调用doPost();
  • 在服务器停止的时候,调用destroy();
package com.lxg.servlet;

import javax.servlet.*;
import java.io.IOException;


public class Servlet2 implements Servlet {

    
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("init...");
    }

    
    public ServletConfig getServletConfig() {
        return null;
    }

    
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("service...");
    }

    
    public String getServletInfo() {
        return null;
    }

    
    public void destroy() {
        System.out.println("destroy...");
    }
}

几个知识点:

  • Servlet 启动时自动装载servlet,需要在 web.xml配置,在之间添加如下代码:< loadon-starup >1< /loadon-starup>,数字越小,优先级越高。如果不配置,则第一次访问servlet时装载。
  • servlet被加载的时候,会调用init()方法,在整个生命周期中init() 只会调用一次,装载后,实例贮存在服务器的内存中。
2.Servlet API编程常用接口和类 2.1 Servlet接口
package com.lxg.servlet;

import javax.servlet.*;
import java.io.IOException;


public class Servlet1 implements Servlet {
    
    public void init(ServletConfig servletConfig) throws ServletException {

    }

    
    public ServletConfig getServletConfig() {
        return null;
    }

    
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("servlet service running...");
    }

    
    public String getServletInfo() {
        return null;
    }

    
    public void destroy() {

    }
}

2.2 ServletConfig接口

封装Servlet的配置信息,在Serlvet初始化期间被传递,每一个Servlet都有且是有一个ServletConfig对象。

		ServletConfig servletConfig = getServletConfig();
        servletConfig.getInitParameter("init");//获取初始化参数值
        servletConfig.getInitParameterNames();//获取所有初始化参数名称
        servletConfig.getServletContext();//获取Servlet上下文对象
        servletConfig.getServletName();//获取Servlet对象的实例名
2.3 HttpServletRequest接口

继承了javax.servlet.ServletRequest接口。

		req.getContextPath(); //获取请求的上下文路径,以"/"开头
        req.getcookies();//获取请求中发送的所有cookie对象,返回cookie的数组
        req.getMethod();//获取请求的方式
        req.getQueryString();//获取请求参数中的字符串形式
        req.getRequestURI();//获取URI
        req.getServletPath();//获取URI中的Servlet路径
        req.getSession();//获取与请求关联的HttpSession对象
package com.lxg.request;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Enumeration;


@WebServlet("/request1")
public class Request1 extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //演示request对象的方法

        //获取请求消息数据

        //1.获取请求行数据
        String method = req.getMethod();//获取请求行
        String contextPath = req.getContextPath();//获取虚拟路径
        String servletPath = req.getServletPath();//获取servlet路径
        String queryString = req.getQueryString();//获取get方式请求参数
        String requestURI = req.getRequestURI();//获取请求的URI
        StringBuffer requestURL = req.getRequestURL();//获取URL
        String protocol = req.getProtocol();//获取协议
        System.out.println(method);
        System.out.println(contextPath);
        System.out.println(servletPath);
        System.out.println(queryString);
        System.out.println(requestURI);
        System.out.println(requestURL);
        System.out.println(protocol);
        System.out.println("-------------------------------");
        
        //2.获取请求头数据
        Enumeration headerNames = req.getHeaderNames();//获取所有请求头的名称
        while(headerNames.hasMoreElements()){
            String header = req.getHeader(headerNames.nextElement());
            System.out.println(header);
        }
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req,resp);
    }
}

2.4 HttpServletResponse接口

继承了javax.servlet.ServletResponse接口

		//向客户端写入cookie
        resp.addcookie(new cookie("hh","test"));
        //发送一个错误代码响应到客户端
        resp.sendError(404);
        //发送错误代码到客户端,以及错误信息
        resp.sendError(404,"msg");
        //重定向到location指向的资源
        resp.sendRedirect("/location");
2.5 GenericServlet类

GenericServlet实现了Servlet接口,将接口中的其他方法都做了默认实现,只是将service()方法作为抽象方法
如果通过集成GenericServlet来实现Serlvet类,只需要重写service方法即可,其他的方法,根据需要来选择是否重写

2.6 HttpServlet类

HttpServlet继承了GenericServlet类,通过其对GenericServlet类的扩展,可以很方便的对HTTP 请求进行处理及响应.

3.Servlet获取表单数据

login.jsp



    login
    
    


    
用户名
密码
验证码
<%=request.getAttribute("cc_error")==null?"":request.getAttribute("cc_error")%>
<%=request.getAttribute("login_error")==null?"":request.getAttribute("login_error")%>

loginServlet.ava获取登录页面的参数并处理

package com.lxg.session;


@WebServlet("/loginServlet")
public class LonginServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置编码
        req.setCharacterEncoding("utf-8");
        //获取参数
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        String checkCode = req.getParameter("checkCode");

        //获取生成的验证码
        HttpSession session = req.getSession();
        String  checkCode_session = (String)session.getAttribute("checkCode_session");
        //删除session
        session.removeAttribute("checkCode_session");
        //先判断验证码是否正确
        if(checkCode_session!=null && checkCode_session.equalsIgnoreCase(checkCode)){
            //忽略大小写比较字符串
            //验证码一致
            if("zhangsan".equals(username)&&"123".equals(password)){
                //登录成功
                //存储用户信息
                session.setAttribute("user",username);
                //重定向到success.jsp
                resp.sendRedirect(req.getContextPath()+"/success.jsp");

            }else{
                //登录失败
                req.setAttribute("login_error","用户名或密码错误");

                //转发到登录页面
                req.getRequestDispatcher("/login.jsp").forward(req,resp);
            }
            //判断用户名和密码是否一致
        }else{
            //验证码不一致
            //存储提示信息到request中
            req.setAttribute("cc_error","验证码不一致");
            //转发到登录页面
            req.getRequestDispatcher("/login.jsp").forward(req,resp);
        }
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req,resp);
    }
}

4.Servlet之间的跳转

1.转发(forward)

转发是通过requestDispatcher对象的forward(httpServletRequest req,HttpServletResponse res)方法来实现的。

request.getRequestDispatcher("/servlet/LifeCycleServlet").forward(request,response);

其中getRequestDispatcher方法的参数,必须以“/”开头,表示web的根目录,比如要 跳转: ”http://locahost:8080/servlet/servet/LifeCycleServlet”, 则参数为”/servlet/LifeCycleServlet”.

2.重定向(redirect)

通过httpServlet的sendDirect(String location)方法。

5.获取初始化参数
  1. 在 web.xml中配置servlet时,可以配置一些初始化参数,在servlet可以通过servletConfig接口提供的接口获取这些参数。

在web.xml中配置init-param 参数:


		
		HelloServlet
		servlet.HelloServlet
		
			username
			forezp
		
	

在servlet中获取

public class HelloServlet extends HttpServlet {
	
	@Override
	public void init() throws ServletException {
		// TODO Auto-generated method stub
		super.init();
		String name=this.getInitParameter("username");
		System.out.println(name);
	}
	
}

部署项目,访问helloServlet就可以看见在控制台打印了forezp

2.也可以配置一些全局的参数:context-param.


	
	
		index.jsp
	


     
	
		haha
		xixi
	
	
	

获取方式:

servlet中通过getServletContext()获取servletContext对象,使用ServletContext的getInitParameter()方法获取制定参数名来获取参数。

ServletContext servletContext=getServletConfig().getServletContext();
		String str=servletContext.getInitParameter("haha");
		System.out.println(str);
6.servlet九大内置对象

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/345664.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号