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

JavaWeb笔记

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

JavaWeb笔记

Http 什么是Http

Servlet 创建Servlet
  1. 构建一个普通的Maven项目,删掉里面的src目录
  2. 引入servlet依赖

    javax.servlet
    javax.servlet-api
    4.0.1

  1. 创建子项目
  2. 创建表现层类并继承HttpServlet类,重写父类的doGet和doPost方法
public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //响应的文本类型
        resp.setContentType("text/html");
        //设置编码
        resp.setCharacterEncoding("utf-8");
        //获取响应的输出流,将数据输出到网页
        PrintWriter out = resp.getWriter();
        out.println("");
        out.println("");
        out.println("hello world!!!!");
        out.println("");
        out.println("");
        out.println("你好");
        out.println("");
        out.println("");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req,resp);
    }
}
  1. 在web.xml文件中注册servlet


    
    
        hello
        com.kuang.HelloServlet
    
    
    
    
        hello
        /
    

  1. 配置Tomcat
  2. 启动测试
Mapping

一个servlet对应一个mapping映射
一个servlet对应多个mapping映射
通用映射路径请求映射
指定后缀实现请求映射


    hello
    /hello


    hello
    /hello2


    hello
    
    /*


    hello
    
    *.do

ServletContext

web容器在启动的时候,它会为每个web程序都创建一个对应的ServletContext对象,它代表了当前的web应用

1 共享数据

我在这个Servlet中保存的数据,可以在另外一个servlet中拿到
1.将数据保存到ServletContext中

public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext context = this.getServletContext();
        String name="安";
        //将数据以键值对方法保存在ServletContext中
        context.setAttribute("name",name);
    }

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

2.从ServletContext中获得数据

public class GetServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext context = this.getServletContext();
        //从ServletContext中获得数据
        String name = (String) context.getAttribute("name");

        //返回文本类型
        resp.setContentType("text/html");
        //设置编码格式
        resp.setCharacterEncoding("utf-8");

        resp.getWriter().println("姓名=" + name);
    }

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

3.配置web.xml



    
    
        hello
        com.kuang.HelloServlet
    
    
        hello
        /hello
    
    
        get
        com.kuang.GetServlet
    
    
        get
        /get
    

2 获取初始化参数

1.在web.xml中配置初始化参数



    url
    jdbc:mysql


    url
    com.kuang.ServletDemo3


    url
    /url

2.获取初始化参数

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    ServletContext servletContext = this.getServletContext();
    //获取初始化参数
    String url = servletContext.getInitParameter("url");
    resp.getWriter().println(url);
}
3 请求转发

1

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    ServletContext context = this.getServletContext();
    //转发的请求路径
    RequestDispatcher requestDispatcher = context.getRequestDispatcher("/get");
    //调用forward实现请求转发
    requestDispatcher.forward(req, resp);
}

2


    get
    com.kuang.GetServlet


    get
    /get


    sd4
    com.kuang.ServletDemo4


    sd4
    /sd4

4 读取资源文件

读取properties文件

  • 创建properties文件(一般创建在resources文件夹里)
username=root
password=123456

2.获得properties文件

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    //将文件变成流
    InputStream is = this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties");
    //创建Properties对象来操作properties文件
    Properties prop = new Properties();
    //传入流文件
    prop.load(is);
    //传入key获得values
    String username = prop.getProperty("username");
    String password = prop.getProperty("password");
    resp.getWriter().println(username+""+password);
}

3.配置servlet


    db
    com.kuang.PropertiesServlet


    db
    /db

5 HttpServletResponse 响应

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

  • 如果要获取客户端请求过来的参数:找HttpServletRequest
  • 如果要给客户端响应一些信息:找HttpServletResponse

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

ServletOutputStream getOutputStream()
PrintWriter getWriter()

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

void setCharacterEncoding(String var1); 
void setContentLength(int var1); 
void setContentLengthLong(long var1); 
void setContentType(String 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);
5.2下载文件
  1. 要获取下载文件的路径
  2. 下载的文件名是啥?
  3. 设置想办法让浏览器能够支持下载我们需要的东西
  4. 获取下载文件的输入流
  5. 创建缓冲区
  6. 获取OutputStream对象
  7. 将FileOutputStream流写入到buffer缓冲区,使用OutputStream将缓冲区中的数据输出到客户端!
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    //1. 要获取下载文件的路径
    String path = "D:\kuang\javaWeb\javaweb-02-servelt\response\target\response\WEB-INF\classes\images\1.jpg";
    //2. 下载的文件名是啥?
    int i = path.lastIndexOf("\") + 1;
    String fileName = path.substring(i);
    System.out.println(fileName);
    //3. 设置想办法让浏览器能够支持下载我们需要的东西
    //中文文件名使用URLEncoder.encode(fileName,"UTF-8")转换编码
    resp.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
    //4. 获取下载文件的输入流
    FileInputStream in = new FileInputStream(path);//将文件变成流
    //5. 创建缓冲区
    int len = 0;
    byte[] buffer = new byte[1024];
    //6. 获取OutputStream对象
    ServletOutputStream outputStream = resp.getOutputStream();
    //7. 将FileOutputStream流写入到buffer缓冲区,使用OutputStream将缓冲区中的数据输出到客户端!
    while ((len = in.read(buffer)) > 0) {
        outputStream.write(buffer, 0, len);
    }
    //关闭流
    in.close();
    outputStream.close();
}
5.3验证码
public class ImageServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //如何让浏览器3秒刷新一次
        resp.setHeader("refresh", "3");
        //在内存中创建一个图片
        BufferedImage image = new BufferedImage(80, 20, BufferedImage.TYPE_INT_RGB);
        //得到图片
        Graphics2D g = (Graphics2D) image.getGraphics();//笔
        //设置图片的背景颜色
        g.setColor(Color.cyan);//设置颜色
        g.fillRect(0, 0, 80, 20);//填充颜色

        //给图片写数据
        g.setColor(Color.green);
        g.setFont(new Font(null, Font.BOLD, 20));
        g.drawString(makeNum(), 0, 20);

        //告诉浏览器这个请求用图片的方式打开
        resp.setContentType("image/png");

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

    //创建随机数
    private String makeNum() {
        String num = (int) (Math.random() * 1000000) + "";
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < 7 - num.length(); i++) {
            sb.append("0");
        }
        num = sb + num;
        return num;
    }
}

    image
    com.kuang.servlet.ImageServlet


    image
    /img

5.4 重定向

一个web资源收到客户端请求后,他会通知客户端去访问另外一个web资源,这个过程叫重定向
sendRedirect(String var1)重定向

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    //重定向
    resp.sendRedirect("/r/img");
}
重定向和转发的区别

面试题:请你聊聊重定向和转发的区别?

相同点:

  • 页面都会实现跳转

不同点:

  • 请求转发的时候,url不会产生变化 编码307
  • 重定向时候,url地址栏会发生变化;编码302

跳转的语句不同. 转发速度要高于重定向, 因为请求转发是在服务器内部完成的; 转发的url一定要是在当前web工程内部的地址, 而重定向可以是任意地址;

5.5简单实现登录

引入jsp依赖



    javax.servlet.jsp
    jsp-api
    2.2
    provided

1.编写.jsp页面

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


Hello World!

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

2.处理请求

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    //处理请求
    //getParameter接收参数
    String username = req.getParameter("username");
    String password = req.getParameter("password");
    System.out.println(username + "====" + password);
    //重定向
    resp.sendRedirect("/r/success.jsp");
}

3.配置web.xml


    requ
    com.kuang.servlet.RequestTest


    requ
    /login

6 HttpServletRequest 请求

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

6.1简单实现登录

引入jsp依赖



    javax.servlet.jsp
    jsp-api
    2.2
    provided

1.编写.jsp页面

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


    Title


登录

<%--action这里提交的路径,需要寻找到项目的路径--%> <%--${pageContext.request.contextPath}代表当前项目--%>
用户名:
密码:
爱好: 女孩 唱歌 敲代码 打游戏

2.获取参数,请求转发

@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[] hobbies = req.getParameterValues("hobby");

    System.out.println(username);
    System.out.println(password);
    System.out.println(Arrays.toString(hobbies));

    //重定向
    //resp.sendRedirect("/r/success.jsp");
    //通过请求转发
    req.getRequestDispatcher("/success.jsp").forward(req, resp);
}

3.注册servlet

    
        login
        com.kuang.servlet.LoginServlet
    
    
        login
        /login
    

4.编写登录成功的jsp页面

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


    Title


登录成功

7 Cookie,Session 7.1会话

会话:用户打开一个浏览器,点击了很多超链接,访问多个web资源,关闭浏览器,这个过程可以称之为会话;

一个网站,怎么证明你来过?
客户端 服务端

  1. 服务端给客户端一个 信件,客户端下次访问服务端带上信件就可以了;cookie
  2. 服务器登记你来过了,下次你来的时候我来匹配你; seesion
7.2 保存会话的两种技术

cookie

  • 客户端技术 (响应,请求)

session

  • 服务器技术,利用这个技术,可以保存用户的会话信息? 我们可以把信息或者数据放在Session中!

常见场景:网站登录之后,你下次不用再登录了,第二次访问直接就上去了!

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

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

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