JavaWeb学习

JavaWeb

1、基本概念

web开发:

  • web,网页
  • 静态web:html,css,数据不会变化
  • 动态web

web应用程序

  • html,css,js
  • jsp,servlet
  • java程序
  • jar包
  • 配置文件properties

静态web

  • *.html , 都是网页后缀,如果一直存在,就可以直接读取
  • 静态weib缺点
    • 无法动态更新,所用用户都是同一个页面

动态web

  • 动态更新,所有用户看到的都不是同一个页面
  • 可以与数据库交互

2、web服务器

asp,jsp,php

服务器是一种被动操作,用来处理用户一些请求和响应信息

3、Tomcat

4、Maven

用来方便导入jar包的 约定大于配置

5、Servlet

5.1、简介
  • Servlet是sun公司开发动态web的一门技术
  • sun在这些API中提供的一个接口叫做:Servlet,如果你想开发一个Servlet程序,需完成:
    • 编写一个类,实现Servlet接口
    • 把开发好的Java类部署到web服务器中

把实现了Servlet接口的Java程序叫做,Servlet

5.2、 ServletContext

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

1、共享数据

在这个Servlet中保存的数据,可以在另一个Servlet中拿到

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    ServletContext context = this.getServletContext();
    String username="qin";

    context.setAttribute("username",username);

}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    ServletContext context = this.getServletContext();
    String username= (String) context.getAttribute("username");

    resp.setContentType("text/html");
    resp.setCharacterEncoding("utf-8");
    resp.getWriter().print("名字"+username);
}
<servlet>
    <servlet-name>hello</servlet-name>
    <servlet-class>com.rtt.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello</url-pattern>
</servlet-mapping>

<servlet>
    <servlet-name>getc</servlet-name>
    <servlet-class>com.rtt.servlet.GetServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>getc</servlet-name>
    <url-pattern>/getc</url-pattern>
</servlet-mapping>
2、获取初始化参数
    <context-param>
        <param-name>url</param-name>
        <param-value>jdbc:mysql://localhost:3306/nybatis</param-value>
    </context-param>
    <servlet>
        <servlet-name>gp</servlet-name>
        <servlet-class>com.rtt.servlet.ServletDemo03</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>gp</servlet-name>
        <url-pattern>/gp</url-pattern>
    </servlet-mapping>
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext context = this.getServletContext();
        String url= context.getInitParameter("url");
        resp.getWriter().print(url);
3、请求转发
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext context = this.getServletContext();
        System.out.println("进入ServletDemo04");
        context.getRequestDispatcher("/gp").forward(req,resp);
    }
4、读取资源文件

Properties

  • 在java目录下新建properties
  • 在resources目录下新建properties

发现:都被打包到同一个路径下:class ,俗称classpath

思路:需要一个文件流

5.3、HttpServletResponse

web服务器接收到客户端http请求,针对这个请求,分别创建一个代表请求的HttpServletRequest对象,代表响应的一个HttpServletResponse。

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

下载文件

  1. 获取下载路径
  2. 下载的文件名
  3. 设置想办法让浏览器能够支持下载我们需要的东西
  4. 获取下载文件的输入流
  5. 创建缓冲区
  6. 获取outputstream对象
  7. 将fileoutputstream流写入到buffer缓冲区
  8. 使用outputstream将缓冲区中的数据输出到客户端

验证码实现

重定向

B一个web资源收到客户端A请求后,B会通知客户端去访问另一个web资源,这个过程叫重定向

与转发的区别:

​ 都会实现跳转,请求转发时url不会变化,重定向时url地址栏会发生变化

5.4、HttpServletRequest

获取前端传递参数,并转发

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

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

    req.getRequestDispatcher("/success.jsp").forward(req,resp);
}

6、Cookie、Session

6.1、会话

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

6.2、保存会话两种技术

cookie

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

session

  • 服务器技术,利用这个技术,可以保存用户信息和数据保存在session中

常见场景:网站登录之后,下次不用登陆了,第二次访问直接进入

6.3、Cookie
  1. 从请求中拿到Cookie信息

  2. 服务器响应给客户端cookie

    Cookie[] cookies = req.getCookies();//获得cookie
    cookie.getValue();//获得cookie的key
    Cookie cookie = cookies[i];//获得cookie的value
    Cookie cookie = new Cookie("lastLoginTime", System.currentTimeMillis()+"");//新建一个cookie
    cookie.setsetMaxAge(24*60*60);//设置有效期
    resp.addCookie(cookie);//响应给客户端一个cookie
    

    cookie:一般会保存在本地用户目录下

6.4、Session

什么是Session:

  • 服务器会给每一个用户(浏览器)创建一个Session对象
  • 一个Session独占一个浏览器,只要浏览器没关闭,Session就存在
  • 用户登录之后,整个网站都能访问

Session和Cookie区别:

  • cookie是把用户的数据写给用户的浏览器,浏览器保存
  • Session是把用户的数据写到用户独占的Session中,服务端保存,保存重要信息,减少服务器资源浪费
  • Session对象由服务器创建

使用场景:

  • 保存一个登录用户的信息
  • 购物车信息
  • 在整个网站中经常会使用的数据,将它保存在Session中
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    req.setCharacterEncoding("GBK");
    resp.setCharacterEncoding("GBK");
    resp.setContentType("text/html;charset=itf-8");

    HttpSession session = req.getSession();//得到Session
    session.setAttribute("name",new Person("饶天天",1));//存
    String sessionId = session.getId();
    if(session.isNew()){
        resp.getWriter().write("session创建成功"+sessionId);
    }else{
        resp.getWriter().write("session已存在"+sessionId);
    }

}


HttpSession session = req.getSession();
session.removeAttribute("name");
session.invalidate();//手动

HttpSession session = req.getSession();//得到Session
Person person = (Person) session.getAttribute("name");
System.out.println(person.toString());

7、JSP

7.1、什么是JSP

java server Pages:Java服务端页面,和Servlet一样,用于动态技术

最大的特点:

  • 写JSP就像在写HTML
  • 区别:
    • HTML只给用户提供静态的数据
    • JSP页面中可以嵌入Java代码,为用户提供动态数据
7.2、JSP原理
  • 代码层面没有任何问题
  • 服务器内部工作
    • Tomcat中有一个work目录
    • idea中使用Tomcat的会在idea的Tomcat中生产一个work目录

浏览器向服务器发送请求,不管访问什么资源,其实都是在访问Servlet

JSP最终也会转换为java类

7.3、JSP基础语法

jsp表达式

<%--
<%=变量或者表达式%>
--%>
<%=new java.util.Date()%>

8、JavaBean

实体类javabean有特定的写法

  • 必须要有无参构造
  • 属性必须私有化
  • 必须有对应的get/set方法

一般用来和数据库的字段做映射


9、MVC三层架构

什么是MVC:model,view,controller,模型,视图,控制器

Model:

  • 业务处理:业务逻辑(Service)
  • 数据持久层:CRUD(dao)

View:

  • 展示数据
  • 提供链接发起Servlet请求(a,form,img...)

Controller:

  • 接收用户请求:request:请求参数
  • 交给业务层处理对应代码
  • 控制视图跳转

image-20230419222353194


10、Filter

过滤器,用来过滤网站数据

  • 处理中文乱码
  • 登录验证...

开发步骤:

  1. 导包

  2. 编写过滤器

    1. 导包不要错 javaServlet

    2. public class CharacterEncodingFilter implements Filter {
      
          //初始化
          @Override
          public void init(FilterConfig filterConfig) throws ServletException {
              System.out.println("CharacterEncodingFilter初始化");
          }
      
          @Override
          public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
              servletRequest.setCharacterEncoding("utf-8");
              servletResponse.setCharacterEncoding("utf-8");
              servletResponse.setContentType("text/html;charset=utf-8");
      
              System.out.println("执行前");
              filterChain.doFilter(servletRequest,servletResponse);
              System.out.println("执行后");
          }
      
          //销毁
          @Override
          public void destroy() {
              System.out.println("CharacterEncodingFilter销毁");
          }
      }
      
      
    3. 在web.xml中配置filter

      <servlet>
          <servlet-name>showservlet</servlet-name>
          <servlet-class>com.rtt.servlet.ShowServlet</servlet-class>
      </servlet>
      <servlet-mapping>
          <servlet-name>showservlet</servlet-name>
          <url-pattern>/servlet/show</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
          <servlet-name>showservlet</servlet-name>
          <url-pattern>/show</url-pattern>
      </servlet-mapping>
      
      <filter>
          <filter-name>CharacterEncodingFilter</filter-name>
          <filter-class>com.rtt.filter.CharacterEncodingFilter</filter-class>
      </filter>
      <filter-mapping>
          <filter-name>CharacterEncodingFilter</filter-name>
          <url-pattern>/servlet/*</url-pattern>
      </filter-mapping>
      

11、监听器

实现一个监听器接口


12、过滤器、监听器常见应用

用户登录之后才能进入主页,用户注销就不能进入主页


13、JDBC

java连接数据库

步骤

  1. 加载驱动
  2. 连接数据库,代表数据库
  3. 向数据库发送SQL对象statement:CRUD
  4. 编写SQL(根据业务,不同的SQL)
  5. 执行SQL
  6. 关闭连接
posted @ 2023-04-24 00:12  尧天天  阅读(39)  评论(0)    收藏  举报