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

javaweb

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

javaweb

前提说明:本文笔记来自【狂神说java】JavaWeb课程内容,加上部分资料补充。

JavaWeb部分笔记

1. 基本概念

1.1 Web:1.2 web应用程序:1.3 静态web1.4 动态web 2. web服务器(web Server)

2.1技术 3 Tomcat服务器

3.1 介绍3.2 发布web网站 4. http

4.1 http概念4.2 发展历史4.3 Http请求4.4 Http响应 5. Maven6. Servlet

6.1 servlet简介6.2 Hello Servlet6.3 Servlet原理6.4 Mapping映射问题:6.5 ServletContext6.6 HttpServletResponse6.7 HttpServletRequest 7. Session、cookie

7.1 会话(session)7.2 保存状态的技术(session, cookie) 8、 JSP

8.1 JSP概念 10. MVC三层架构11.Filter12. 监听器13 过滤器、监听器的常见应用

参考JavaWeb笔记

1. 基本概念 1.1 Web:

静态:

html, css数据不会发生变化

动态:

数据会改变技术栈:Servlet/JSP,ASP,PHP

动态web资源开发的技术称为Javaweb

1.2 web应用程序:

web应用程序:供浏览器访问的程序含有多个web资源,对外提供服务URL:统一资源定位符(通过url进行访问程序)统一的web资源(html…)被放在同一文件下,一个web应用由多部分组成(静态/动态)

html, css, jsJsp, servletjar配置文件Properties

如果想外界访问,需要一个服务器进行统一管理

1.3 静态web

缺点:

web页面无法动态更新,每时每刻都是同一个页面

动态页面:1.轮播图/特效(伪动态)2.javascript 不能和数据库交互(数据不能及时更新,用户无法交互) 1.4 动态web

缺点:

如果动态web资源出错,需要重新编写后台程序 优点:

动态动态资源与数据库交互(JDBC:Java数据库连接),数据可以持久化 2. web服务器(web Server) 2.1技术

JSP:JavaServer Pages, java服务器页面

JSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTML、XML或其他格式文档的Web网页,然后返回给请求者。

servlet

解决高并发,高可用,高性能问题

3 Tomcat服务器 3.1 介绍

web服务器:处理用户请求,并返回响应

Tomcat目录结构:

bin:存放tomcat命令脚本文件

conf:存放tomcat的配置信息。其中server.xml文件是核心的配置文件。

Server.xml:

可以配置启动的端口,默认端口8080

可以配置启动的主机名称,默认为localhost->127.0.0.1;默认网站应用存放的位置为webapps

lib:支持tomcat软件运行的jar包。其中还有技术支持包,如servlet,jsp

logs:运行过程的日志信息

temp:临时目录

webapps:共享资源目录。web应用目录。

work:tomcat的运行目录。

相关命令:

进入tomcat/bin目录下再执行命令
//打开tomcat
sudo ./startup.sh 
//关闭tomcat
sudo ./shutdown.sh
// 访问http://localhost:8080/

PS:网站访问过程:

url域名解析:查找本地host文件是否有;有直接返回ip;没有通过DNS域名解析系统查找返回iptcp三次握手协议 3.2 发布web网站

网站结构:

—webapps : Tomcat服务器的web目录
  -ROOT
  -webName: 网站的目录名
  - WEB-INF
    -classes : java程序
    -lib : web应用所依赖的jar包
    -web.xml : 网站配置文件
  -index.html 默认的首页   
  - static
          - css
              - style.css
          - js
          - img4
      - ……

4. http 4.1 http概念

http: 超文本传输协议)

请求-响应协议运行在TCP上默认端口80

Https:以安全为目标的 HTTP

在HTTP 的基础下加入SSL默认端口443 4.2 发展历史

HTTP/1.0:非持久连接,客户端与web服务器连接后,只能进行一次请求,获得一个资源,请求结束后就断开连接HTTP/1.1:持久连接,客户端与web服务器连接后,仍然保持这条连接,可以进行多次请求,获得多个资源 4.3 Http请求

客户端-发送请求(request)-服务器

request方法:get, post, …

get: 携带参数少,大小有限制,在url会显示数据内容,不安全post: 携带参数没有限制,大小没有限制,在url不会显示数据内容,比较安全

request head(请求头):

Accept: 告诉浏览器,它所支持的数据类型
Accept-Encoding: 支持哪种编码格式 GBK UTF-8 GB2312 ISO8859-1
Accept-Language: 告诉浏览器,它的语言环境
Cache-Control: 缓存控制
Connection: 告诉浏览器,请求完成是断开连接还是保持连接
Host: 主机……/.
4.4 Http响应

服务器-响应-客户端

响应体:

Accept: 告诉浏览器,它所支持的数据类型
Accept-Encoding: 支持哪种编码格式 GBK UTF-8 GB2312 ISO8859-1
Accept-Language: 告诉浏览器,它的语言环境
Cache-Control: 缓存控制
Connection: 告诉浏览器,请求完成是断开连接还是保持连接
Host: 主机……/.
Refrush: 告诉客户端,多久刷新一次
Location:让网页重新定位

状态码:

2XX:成功3XX:重定向4XX:客户端错误,请求包含语法错误或无法完成请求5XX:服务器错误,服务器在处理请求的过程中发生了错误常见的状态码:

200 - 请求成功301 - 资源(网页等)被永久转移到其它URL404 - 请求的资源(网页等)不存在500 - 内部服务器错误

PS:当你在浏览器地址栏中输入地址并回车的一瞬间到页面展示回来,经历了什么?

1.域名解析
2.tcp3次握手建立连接
3.客户端发起http请求
4. 服务器响应http请求,浏览器得到html代码
5. 浏览器解析html代码,并请求html代码中的资源(css Javascript 图片)
6. 浏览器对页面进行渲染呈现
5. Maven

5.1 作用

项目架构管理工具方便导入jar包

核心概念:约定大于配置。即,系统,类库,框架假定其合理的默认值,避免提供不必要的配置。在大部分情况下,使用框架提供的默认值会让项目运行的更快。

6. Servlet 6.1 servlet简介

动态web开发技术步骤:实现servlet接口,部署到web服务器中

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

6.2 Hello Servlet

1.创建普通的maven项目,删除src

2.创建Module模块

父项目中pom.xml:

    
        servlet-01
    

父子项目关系类似于类继承,子项目可以用父项目的资源,父项目不能用子项目的独有的资源。

    Maven环境优化:
      修改web.xml为最新配置在子模块中添加java和resoures文件夹

Web.xml:

web.xml文件是用来配置:欢迎页、servlet、filter等的。当你的web工程没用到这些时,你可以不用web.xml文件来配置你的web工程。

每个web.xml文件的根元素中,都必须标明这个web.xml使用的是哪个模式文件(Schema)。根据它的模式文件所定义的标签元素,它就能拥有定义出来的那些功能。

web.xml的模式文件中定义的标签并不是定死的,模式文件也是可以改变的,一般来说,随着web.mxl模式文件的版本升级,里面定义的功能会越来越复杂,标签元素的种类肯定也会越来越多,但有些不是很常用的,我们只需记住一些常用的并知道怎么配置就可以了。

Web.xml最新配置:




4.编写servlet程序

    创建普通java类

    实现Servlet接口,通过继承HttpServlet, GenericServlet(提供的Servlet实现类)

    编写Servlet映射

    为什么需要映射:我们写的Java程序,但是要通过浏览器访问,而浏览器需要连接web服务器,所有我们需要在web服务中注册我们写的Servlet,还需要给他一个浏览器能够访问的路径;

     		
        
            hello
            com.company.servlet.HelloServlet
        
        
        
            hello
            /hello
        
    
      配置Tomcat启动测试
6.3 Servlet原理

Servlet生命周期:

Servlet 生命周期可被定义为从创建直到毁灭的整个过程。以下是 Servlet 遵循的过程:

Servlet 初始化后调用 init () 方法。Servlet 调用 service() 方法来处理客户端的请求。Servlet 销毁前调用 destroy() 方法。最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。

init() 方法:

init 方法被设计成只调用一次。它在第一次创建 Servlet 时被调用。

service() 方法:

service() 方法是执行实际任务的主要方法。Servlet 容器(即 Web 服务器)调用 service() 方法来处理来自客户端(浏览器)的请求,并把格式化的响应写回给客户端。service() 方法检查 HTTP 请求类型(GET、POST、PUT、DELETE 等),并在适当的时候调用 doGet、doPost、doPut,doDelete 等方法。

service() 方法由容器调用,只需要重写 doGet() 或 doPost() 即可。

destroy() 方法:

destroy() 方法 关闭数据库连接、停止后台线程、把 cookie 列表或点击计数器写入到磁盘,并执行其他类似的清理活动。

6.4 Mapping映射问题:

一个Servlet可以指定一个映射路径一个Servlet可以指定多个映射路径一个Servlet可以指定通用路径一个Servlet可以指定默认映射路径一个Servlet可以指定任意前缀或后缀(后缀前面不能加路径)


    hello
    /hello



    hello
    /hello


    hello
    /hello2


    hello
    /hello3


    hello
    /hello4



    hello
    /hello*.properties
                ***.properties
                **
public class CharacterEncodingFilter implements Filter {
    @Override
    //初始化:在Web服务器启动时就初始化,因为要随时监听,处理请求
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("已经初始化");
    }

    
    @Override
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
        //解决中文乱码
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/html");

        //请求继续执行,否则请求被拦截停止
        chain.doFilter(req, resp);

    }

    @Override
    //销毁:web服务器关闭的时候销毁
    public void destroy() {
        System.out.println("已经销毁");
    }
}
    web.xml下添加,配置filter:
    
        ServletFilter
        com.company.servlet.ServletFilter
    
    
        ServletFilter
        
        /servlet
//统计网站在线人数,即统计session(每个用户对应一个session)
public class OnlineListener implements HttpSessionListener {
    @Override
    //创建sessionListener
    //一旦创建就会触发监听
    public void sessionCreated(HttpSessionEvent se) {
        System.out.println(se.getSession().getId());
        ServletContext ctx = se.getSession().getServletContext();
        Integer onlineCount = (Integer) ctx.getAttribute("OnlineCount");
        if (onlineCount == null){
            onlineCount = new Integer(1);
        }else{
            int cnt = onlineCount.intValue();
            onlineCount = new Integer(cnt+1);
        }

        ctx.setAttribute("OnlineCount", onlineCount);
    }

    @Override
    //销毁sessionListener
    public void sessionDestroyed(HttpSessionEvent hse) {
        ServletContext ctx = hse.getSession().getServletContext();
        Integer onlineCount = (Integer) ctx.getAttribute("OnlineCount");
        if (onlineCount == null){
            onlineCount = new Integer(1);
        }else{
            int cnt = onlineCount.intValue();
            onlineCount = new Integer(cnt-1);
        }
        ctx.setAttribute("OnlineCount", onlineCount);
    }
}

注册监听器

    
        com.company.servlet.OnlineListener
    

其他:因为tomcat启动时,构造出了多个ip向本机服务器发起tcp请求,所以导致多个会话,只要重新部署项目,重置刷新一下服务器的数据。

浏览器关了session并不会马上调用sessionDestroyed方法,session被destroyed只有两个途径,一个是session过期,还有一个就是显式调用session.invalidate()方法。(session.invalidate()不能写在destroy函数里)

当关闭浏览器的时候想要关闭session,可以使用Javascript捕获关闭浏览器的事件(onbeforeunload事件),然后发请求调用服务端的session的invalidate方法,之后就会调用sessiondestroy函数。

13 过滤器、监听器的常见应用

监听器多用于图形化编程中监听事件发生XXXListener

过滤器实现权限拦截:

例:用户登录后进入主页,注销后不能进入(登录拦截)

用户登录后,向Session中放入用户的数据
进入主页的时候要判断用户是否已经登录,如果注销后,就不能再进入成功登录页面

    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) servletRequest;
        HttpServletResponse resp = (HttpServletResponse) servletResponse;
        Object user_session = req.getSession().getAttribute("USER_SESSION");
        if(user_session == null){
            resp.sendRedirect(req.getContextPath() + "/error.jsp");
        }
        filterChain.doFilter(req, resp);//必须加上chain.doFilter才能继续运行
    }
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/781119.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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