栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Servlet配置与使用

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

Servlet配置与使用

Servlet配置与使用

什么是Servlet:Servlet 是 Server 与 Applet 的缩写,是服务端小程序的意思。(言外之意:要实现 web 开
发,需要实现 Servlet 标准),Servlet 本质上也是 Java 类(言外之意:写自己的类,不用写 main 方法,别人自动
调用)


1、Servlet基本内容
  • ⭐首先需要导入依赖
 
    
      javax.servlet
      javax.servlet-api
      3.1.0
      provided
    

  • ⭐创建Servlet的三种方式

①、继承HttpServlet(推荐)
②、继承抽象类GenericServlet
③、实现接口Servlet


  • ⭐Http协议
    ①、特点:请求响应式,无状态链接
    ②、请求方式:请求地址,协议,版本号,请求头
    ③、响应格式:http协议,状态码,响应头
    ④、url(统一资源定位符)和uri(统一资源定位标志)url包括uri

  • ⭐Servlet配置

①、创建Servlet对象属于单例模式中的单例模式
②、配置分为两种方式:一种是注解,一种是配置pom.xml文件


2、Servlet的登录练习
  • 准备登录页面,form.jsp和登录成功页面success.jsp和登录失败页面faile.jsp(默认用户名和密码为lkb abc)

Servlet.Java文件内容》》》

package com.yjxxt.demo01;

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;

@WebServlet("/form01")
public class Servlet03 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {

        //设置编码格式
        req.setCharacterEncoding("utf-8");
        res.setContentType("text/html;charset:utf-8");

        //获取请求
        String uname=req.getParameter("uname");

        //获取密码
        String psd=req.getParameter("psd");
        req.setAttribute("psd",psd);
        //获取爱好
        String[] hobby=req.getParameterValues("hobby");
        req.setAttribute("hobby",hobby);
        for (String str: hobby) {
            System.out.println("爱好:"+str);
        }
        //返回响应
        //res.getWriter().println(name);
        System.out.println(uname +"----------------->"+psd);
        if("lkb".equals(uname)&&"abc".equals(psd)){
            req.setAttribute("uname",uname);
            req.getRequestDispatcher("success.jsp").forward(req,res);
            return;
        }else{           
        req.getRequestDispatcher("faile.jsp").forward(req,res);
        }
    }
}

登录界面form.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Demo01


    
姓名:
密码:
爱好:Java Python C++

成功和失败页面编写

<%@ page contentType="text/html;charset=UTF-8" language="java"  isELIgnored="false" %>


    登录


欢迎${uname }会员~


<%----------------------失败--------------------%>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    登录


    

登录失败~

运行结果:》》




3、转发和重定向的比较
  • 转发:getRequestDispatcher(目标).forwartd(req,resp)服务器一次
  • 重定向:sendRedirect(目标)客户端两次访问

此处用上面的登录案例演示稍作修改如下》

@WebServlet("/form01")
public class Servlet03 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {

        //设置编码格式
        req.setCharacterEncoding("utf-8");
        res.setContentType("text/html;charset:utf-8");

        //获取请求
        String uname=req.getParameter("uname");
        //获取密码
        String psd=req.getParameter("psd");
        req.setAttribute("psd",psd);
        //获取爱好
        String[] hobby=req.getParameterValues("hobby");
        req.setAttribute("hobby",hobby);
        for (String str: hobby) {
            System.out.println("爱好:"+str);
        }
        //返回响应
        //res.getWriter().println(name);
        System.out.println(uname +"----------------->"+psd);
        if("lkb".equals(uname)&&"abc".equals(psd)){
            req.setAttribute("key",uname);
            req.getRequestDispatcher("success.jsp").forward(req,res);
            return;
        }else{
            res.sendRedirect("faile.jsp?message=error");
        }
    }
}


重定向会有两次请求


转发只有一次请求


总结:》重定向:可以跨域访问,两次请求。转发一次,且不可跨域访问


4、HttpServletRequest内置对象的方法

直接代码演示i:

@WebServlet("/req")
public class Req01 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置请求数据的编码格式
        req.setCharacterEncoding("utf-8");

        //移除参数
        //获取参数
        System.out.println(req.getParameter("uname"));//lkb
        String[] str=req.getParameterValues("hobby");
        //存入参数
        req.setAttribute("hobby",str);
        for (String s: str) {
            System.out.println("s---"+s);
        }
        //移除
        req.removeAttribute("hobby");//[Ljava.lang.String;@56832b2b
        System.out.println(str);
        //获取项目名
        String name=req.getContextPath();
        System.out.println(name);///hello
        //获取请求方式
        System.out.println(req.getMethod());//GET
        //获取请求参数
        String str1=req.getQueryString();
        System.out.println("str1-----"+str);//str1-----java
        //获取标识符
        System.out.println(req.getRequestURI());//hello/req
        //获取定位符
        System.out.println(req.getRequestURL());//http://localhost:8080/hello/req
        //获取协议
        System.out.println(req.getProtocol());//HTTP/1.1

        //获取ServletContext
        ServletContext sc=req.getServletContext();
        System.out.println(sc);//org.apache.catalina.core.ApplicationContextFacade@5844cf8b
        //获取Session
        HttpSession hs= req.getSession();
        System.out.println(hs);//org.apache.catalina.session.StandardSessionFacade@5c7b405b

    }
}

结果:》


5、HttpServletResponse内置对象方法

代码演示:

@WebServlet("/resp")
public class Resp01 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置编码格式
        resp.setContentType("text/html;encoding=utf-8");
        String name=req.getParameter("uname");
        //输出流
        resp.getWriter().println(name);
        System.out.println(name);
       System.out.println(resp.getOutputStream());//一般用于文件的上传和下载
        //重定向
        resp.sendRedirect("index.jsp");

    }
}


6、作用域对象
  • 会话之间:Session对象
  • 请求之间:HttpServletRequest对象
  • 服务器启动关闭:servletContext对象
  • get/set/destory销毁,请求之间

Session:会话对象
  • 默认生命周期30分钟(常用方法如下)
@WebServlet("/session")
public class Session01 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       //创建一个会话
        HttpSession hs=req.getSession();//默认参数true,创建一个会话
        //是否是新对象
        System.out.println(hs.isNew());//true
        //获取会话ID
        System.out.println(hs.getId()); //22C157EC7D6F7D5F58AE9294B1AEC0F1
        //使会话结束
        hs.invalidate();
        //或者移除会话
        req.removeAttribute(hs.getId());//参数是会话的ID

    }
}

注意:cookies是属于Session对象的一种,cookie属于客户端,存储与客户端,Session占用的是服务端的资源,所以不推荐用Session,但cookie不安全,即便可以设置其生命周期



cookie(翻译:饼干)
  • 作用:会话跟踪
  • 区分:瞬时cookie(默认)和持久cookie

cookie实现Session会话跟踪,在创建会话时,便会将此会话的id存放在cookie中,当session访问时,则会从cookie中的id进行比较,判断是否是之前会话


cookie常用方法:》

@WebServlet("/cookie")

public class cookie01 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //创建一个cookie
        cookie cookie=new cookie("uname","psw");
        //声明周期
        cookie.setMaxAge(7*24*60*60);
        System.out.println(cookie.getMaxAge());//604800秒
        //cookie添加到响应中
        resp.addcookie(cookie);
        cookie[] cookies=req.getcookies();
        //获取cookie对象
        for (cookie c: cookies ) {
            System.out.println(c.getValue());
            //FFB091E551F3E9BBE2BC14FBA2BBCB70
            //psw
        }
        //绑定路径
        cookie.setPath("/cookie");
    }
}



ServletContext对象
  • 上下文对象,生命周期最大
  • 三种创建方式①req.getServletContext() ②直接getServletContext() ③通过获取会话获取:req.getSession().getServletContext()

@WebServlet("/sc")
public class ServletContext01 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //创建方式一
        ServletContext sc1=req.getServletContext();
        //方式二
        ServletContext sc2=getServletContext();
        //方式三
        ServletContext sc3=req.getSession().getServletContext();

        System.out.println(sc1+"--------"+sc2+"----------"+sc3);
    }
}


补充:B/S:浏览器端/服务端(servlet就是)C/S:客户端/服务端(QQ…)

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

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

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