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

javaweb:servlet

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

javaweb:servlet

javaweb:servlet
  • Servlet技术
    • 什么是servlet
    • 手动实现servlet程序
    • url地址定位到服务器
    • Servlet的生命周期
    • GET和POST请求的分发处理
    • 通过继承HttpServlet实现Servlet程序
    • 使用IDEA创建servlet程序
    • Servlet类的继承体系
  • ServletConfig类
    • ServletConfig类的三大所用
  • ServletContext类
    • 什么是ServletContext接口
    • ServletContext类的作用
  • HttpServletResponse
    • 简单分类
    • 常见应用
      • 向浏览器输出信息
      • 下载文件
      • 验证码功能
      • response重定向
  • HttpServletRequest

Servlet技术 什么是servlet

①servlet是javaee规范之一,规范就是接口
②servlet是javaweb三大组件之一。三大组件分别是:servlet程序,Filter过滤器,listener监听器
③servlet是运行在服务器上的一个java小程序,它可以接受客户端发送过来的请求,并相应数据给客户端

手动实现servlet程序

①编写一个类去实现servlet接口
②实现service方法,处理请求,并响应程序
③到web.xml中去配置servlet程序的访问地址

url地址定位到服务器

Servlet的生命周期

①执行Servlet构造器方法
②执行int初始化方法
第一、二步是在第一次访问的时候创建servlet
③执行service方法
第三步,每次访问都会调用
④执行destroy销毁方法
第四步,在web工程停止的时候调用

GET和POST请求的分发处理
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
    //类型转换(因为它有getMethod()方法)
    HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;

    //获取请求的方式
    String method = httpServletRequest.getMethod();
    System.out.println(method);
}
通过继承HttpServlet实现Servlet程序

一般在实际项目开发中,都是使用继承HttpServlet类的方式去实现Servlet程序
①编写一个类去继承HTTPServlet类
②根据业务需要重写doGet或doPost方法
③到web.xml中配置servlet程序的访问地址
servlet类

public class helloServlet2 extends HttpServlet {
    public helloServlet2() {

    }

    

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

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

xml配置


    HelloServlet
    com.servlet.helloServlet2


    HelloServlet
    /hello2

使用IDEA创建servlet程序

Servlet类的继承体系

ServletConfig类

Servlet程序的配置信息类
Servlet程序和ServletConfig对象都是由Tomcat负责创建,我们负责使用。
Servlet程序默认第一次访问的时候创建,ServletConfig是每个程序创建时,就创建一个对应的ServletConfig对象

ServletConfig类的三大所用

①可以获取Servlet程序的别名servlet-name的值
②获取初始化参数init-param
③获取ServletContext对象
web.xml配置


    
    username
    
    root


servlet类

//1.获取servlet程序的别名serv-name的值
    System.out.println("helloServlet程序的别名是:"+servletConfig.getServletName());
    //2.获取初始化参数init-param
    System.out.println("初始化参数uesename的参数值:"+    servletConfig.getInitParameter("username"));
    //3.获取ServletContext对象
    System.out.println(servletConfig.getServletContext());

注意:重写init方法一定要调用父类的init(ServletConfig)操作

@Override
public void init(ServletConfig config) throws  ServletException{
    super.init(config);
    System.out.println("重写init初始化方法");
}

ServletContext类 什么是ServletContext接口

①ServletContext是一个接口,它表示Serv上下文对象
②一个web工程只有一个ServContext对象实例
③ServletContext对象是一个域对象(域对象是可以像Map一样存储数据的对象,“域”指的是存取数据的操作范围)

存数据取数据删除数据
Mapput()get()remove()
域对象setAttribute()getAttribute()removeAttribute()
ServletContext类的作用

①获取web.xml中配置的上下文参数context-param
②获取当前的工程路径,格式:/工程路径
③获取工程部署后在服务器硬盘上的绝对路径
④像Map一样存取数据

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//      获取web.xml中配置的上下文参数context-param
        ServletContext context = getServletConfig().getServletContext();
        String username = context.getInitParameter("username");
        System.out.println("context-param参数username的值是:"+username);
        System.out.println("context-param参数password的值是:"+context.getInitParameter("password"));

//      获取当前的工程路径,格式:/工程路径
        System.out.println("当前工程路径:" + context.getContextPath());
//      获取工程部署后在服务器硬盘上的绝对路径
        
        System.out.println("工程部署的路径是:" + context.getRealPath("/"));
//      像Map一样存取数据

    }

contextServlet1

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    //获取ServletContext对象
    ServletContext context = getServletContext();

    context.setAttribute("key1","value1");

    System.out.println("context中获取域数据key1的值是:" + context.getAttribute("key1"));
}

contextServlet2

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    ServletContext context = getServletContext();
    System.out.println("context2 中获取域数据key1的值是:" + context.getAttribute("key1"));
}

结果:第一次运行contextServlet2时,未给key1设定值,所以结果为null;运行contextServlet1后,给key1设定了值,再次运行发现contextServlet2中获取到了key1的值,说明context是可以在module中任意调用的。

HttpServletResponse

Web服务器接收到客户端的http请求,会针对这个请求分别创建一个代表请求的HttpServletRequest对象,代表响应的一个HttpServletResponse对象。
获取客户端请求过来的参数,找HttpServletRequest
给客户端响应一些信息:找HttpServletResponse

简单分类

负责向浏览器发送数据的方法

servletOutStream getOutputStream() throws IOException;
PrintWriter getWriter() throws IOException;

负责向浏览器发送响应头的方法

void setCharacterEncoding(String var1);
void setContentLength(int var1);
void setContentLengthLong(long var1);
void setContentType(String var1);

负责向浏览器发送响应头的方法

Void setCharacterEncoding(String var)
Void setContentLength(int var1)
Void setCointentLengthLong(long val)
Void setContentType(Stirng var1)
Void setDateHeader(String var1,long var2)
Void addDateHeader(String var1,long var2)
Void setHeader(String var1,String var2)
Void addHeader(String var1,String var2)
Void setIntHeader(String var1,int var2)
Void addIntHeader(String var1,int var2)
常见应用 向浏览器输出信息 下载文件

a.获取下载文件的路径
b.下载的文件名
c.设置浏览器能够支持下载的东西
d.获取下载文件的输入流
e.创建缓冲区
f.获取OutputStream
g.将FileOuputStream流写入到buffer缓冲区
h.使用OutputStream将缓冲区总的数据输出到客户端

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    //a.获取下载文件的路径
    String realPath = "D:\javawebstudy\servletStudy\servletDemo\src\main\resources/background.JPG";
    System.out.println("下载文件的路径:"+realPath);
    //b.下载的文件名
    String fileName = realPath.substring(realPath.lastIndexOf("//")+1);
    //c.设置浏览器能够支持下载的东西
    resp.setHeader("Content-Disposition","attachment;filename="+fileName);
    //d.获取下载文件的输入流
    FileInputStream in = new FileInputStream(realPath);
    //e.创建缓冲区
    int len = 0;
    byte[] buffer = new byte[1024];
    //f.获取OutputStream
    ServletOutputStream out = resp.getOutputStream();
    //g.将FileOuputStream流写入到buffer缓冲区
    while(in.read(buffer) > 0){
        out.write(buffer,0,len);
    }
    in.close();
    out.close();
}
验证码功能

后端实现:java的图片类,生成一个图片

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    //如何让浏览器5秒自动刷新一次
    resp.setHeader("refresh","3");

    //在内存中创建一个图片
    BufferedImage image = new BufferedImage(80,20,BufferedImage.TYPE_INT_RGB);
    //得到图片
    Graphics2D g = (Graphics2D) image.getGraphics();//笔
    //设置图片的背景颜色
    g.setColor(Color.white);
    g.fillRect(0,0,80,20);
    //给图片写数据
    g.setColor(Color.BLUE);
    g.setFont(new Font(null,Font.BOLD,20));
    g.drawString(makeNum(),0,20);

    //告诉浏览器这个请求用图片的方式打开
    resp.setContentType("image/jpeg");
    //网站存在缓存,不让浏览器缓存
    resp.setDateHeader("expires",-1);
    resp.setHeader("Cache-Control","no-cache");
    resp.setHeader("Pragma","no-Cache");

    //把图片写给浏览器
    ImageIO.write(image,"jpg",resp.getOutputStream());

}

//生成随机数
private String makeNum(){
    Random random = new Random();
    String num = random.nextInt(9999999)+"";
    StringBuffer sb = new StringBuffer();
    for(int i = 0; i < 7-num.length(); i++){
        sb.append("0");
    }
    String s = sb.toString()+num;
    num = sb.toString()+num;
    return num;
}

response重定向

一个web资源收到客户端请求后,他会通知客户端去访问另外一个web资源C,这个过程叫做重定向
常见场景:用户登录

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
    resp.sendRedirect("/servletDemo_war_exploded/img");
}

重定向和转发的区别:
相同点:页面都会实现跳转
不同点:①请求转发的时候,url不会产生变化②重定向的时候,url地址栏会发生变化

测试
.jsp

<%--这里提交的路径,需要寻找到项目的路径--%>
<%--${pageContext.request.contextPath} 代表当前项目--%>
用户名:
密码:

.java

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    //处理请求
    String username = req.getParameter("username");
    String password = req.getParameter("password");
    System.out.println(username + ":" + password);

    //重定向要注意路径问题,否则404
    resp.sendRedirect("/servletDemo_war_exploded/success.jsp");
}
HttpServletRequest

HttpServletRequest代表客户端的请求,用户通过Http协议访问服务器,HTTP请求中的所有信息会被封装到HttpServletRequest,通过这个HttpServletRequest的方法,获得客户端的所有信息。

获取前端传递的参数,请求转发

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

    //后台接收中文乱码问题
    req.setCharacterEncoding("UTF-8");
    resp.setCharacterEncoding("UTF-8");

    String username = req.getParameter("username");
    String password = req.getParameter("password");
    String[] hobby = req.getParameterValues("hobbies");
    System.out.println("====================");
    System.out.println(username);
    System.out.println(password);
    System.out.println(Arrays.toString(hobby));
    System.out.println("====================");

    //通过请求转发
    //这里的 / 代表当前的web应用
    req.getRequestDispatcher("/success.jsp").forward(req,resp);
}

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

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

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