【Servlet&过滤器】

JavaEE

创建javaEE程序
创建一个类 继承HttpServlet,我们这个类就是一个javaEE程序,
在web.xml文件配置,向外提供一个访问地址,就可以在浏览器中访问,找到对应javaEE程序

什么是Servlet

Servlet是Server Applet的简称,意思为用Java编写的服务器端的程序. 它运行在web服务器中,web服务器负责Servlet和客户的通信以及调用
Servlet方法。

Servlet的作用
1.接收用户发送的请求数据
2.调用其他的java程序来处理请求
3.根据处理结果,将结果响应给客户端

创建和使用Servlet

1.创建一个类继承javax.servlet.http包下的HttpServlet
2.在web.xml文件中配置Servlet

<!-- 
       配置Servlet程序,把我们开发的servlet程序注册到服务器,由服务器启动时加载,在第一次访问时,由服务器创建对象
     -->
      <servlet>
          <servlet-name>demo</servlet-name><!--定义对象名-->
          <servlet-class>com.ffyc.dormServer.web.DemoServlet</servlet-class><!--注册servlet程序-->
          <init-param><!--向servlet中配置一些参数-->
              <param-name>count</param-name>
              <param-value>10</param-value>
          </init-param>
      </servlet>
    <!--Servlet程序配置一个访问地址
     -->
    <servlet-mapping>
        <servlet-name>demo</servlet-name><!--为指定name的servlet程序配置访问地址-->
        <url-pattern>/demo</url-pattern><!--配置的供外界访问的地址  必须以 / 开头-->
    </servlet-mapping>

Servlet的生命周期

在这里插入图片描述

public class DemoServlet extends HttpServlet {
    /*
      无参构造方法,默认是存在的,初始化创建的对象
      只被调用一次(始终只创建了一个对象),在第一次访问servlet程序由服务器创建执行
     */
    public DemoServlet(){
        System.out.println("无参构造方法");
    }


    /*
      init() 初始化  在构造方法执行完成后,立即被调用执行,完成一些servlet程序的初始化(例如,读取配置文件中的参数)
                     只执行一次
     */
    @Override
    public void init(ServletConfig config) throws ServletException {
        System.out.println("init:"+config.getInitParameter("count"));
    }

    /*
      service()用来接收前端请求,为前端提供服务的,
                每次前端发送的请求,都会调用service(),多次调用
                HttpServletRequest req:表示请求对象,前端提交过来所有的数据,都由服务器封装在此对象中
                HttpServletResponse resp:表示响应对象,用来向前端响应数据
     */
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("service:"+req);
        System.out.println("service:"+resp);
    }

    /*
      destroy()在服务器关闭时,如果我们的程序想要最终执行某些操作,就可以在destroy中实现

     */
    @Override
    public void destroy() {
        System.out.println("destroy");
    }

}

过滤器

什么是过滤器
过滤器,顾名思义就是对事物进行过滤的,在Web中的过滤器,当然就是对请求进行过滤。
过滤器有什么用
我们使用过滤器,就可以对请求进行拦截,然后做相应的处理,实现许多特殊功能。如登录控制,权限管理,过滤敏感词汇等.

过滤器的搭建

创建过滤器,只需要继承Filter接口即可
/*
定义统一编码过滤器
 */

public class EncodFilter implements Filter {
    String reqencod = "";
    String respencod = "";

    //在init方法中,可以通过filterConfig获得配置文件中的初始化参数
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        reqencod = filterConfig.getInitParameter("reqencod");
        respencod = filterConfig.getInitParameter("respencod");
    }
 /*
        执行过滤任务
         */
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("编码过滤器");
        servletRequest.setCharacterEncoding(reqencod);//设置请求数据编码格式
        servletResponse.setContentType(respencod);//设置响应内容编码格式
        //让请求离开当前的过滤器,向后执行
        filterChain.doFilter(servletRequest, servletResponse);
    }
}

配置过滤器拦截路径
<!-- 配置统一编码过滤器 -->
    <filter>
        <filter-name>encodfilter</filter-name>
        <filter-class>com.ffyc.dormServer.filter.EncodFilter</filter-class>
        <init-param>
            <param-name>reqencod</param-name>
            <param-value>utf-8</param-value>
        </init-param>
        <init-param>
            <param-name>respencod</param-name>
            <param-value>text/html;charset=utf-8</param-value>
        </init-param>
    </filter>
    <!-- 配置哪些请求地址可以进入到过滤器 -->
    <filter-mapping>
        <filter-name>encodfilter</filter-name>
        <!--<url-pattern>/demo</url-pattern>
        <url-pattern>/login</url-pattern>-->
        <url-pattern>/*</url-pattern><!-- 让所有的请求都进入到编码过滤器 -->
    </filter-mapping>

跨域问题

跨域是指从一个域名的网页去请求另一个域名的资源。比如从www.baidu.com
页面去请求www.google.com的资源。但是一般情况下不能这么做,它是由
浏览器的同源策略造成的,是浏览器对JavaScript施加的安全限制。跨域的严
格一点的定义是:只要协议,域名,端口有任何一个的不同,就被当作是跨域.
所谓同源是指,域名,协议,端口均相同,只要有一个不同,就是跨域.

后端解决

配置允许跨域的过滤器
<!-- 允许跨域访问的过滤器 -->
    <filter>
        <filter-name>cors</filter-name>
        <filter-class>com.ffyc.dormServer.filter.CorsFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>cors</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
public class CorsFilter implements Filter {
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
            throws IOException, ServletException {
        HttpServletResponse httpResponse = (HttpServletResponse) servletResponse;
        HttpServletRequest httpRequest = (HttpServletRequest) servletRequest;
        //允许携带Cookie时不能设置为* 否则前端报错
        httpResponse.setHeader("Access-Control-Allow-Origin", httpRequest.getHeader("origin"));//允许所有请求跨域
        httpResponse.setHeader("Access-Control-Allow-Methods", "*");//允许跨域的请求方法GET, POST, HEAD 等
        httpResponse.setHeader("Access-Control-Allow-Headers", "*");//允许跨域的请求头
        httpResponse.setHeader("Access-Control-Allow-Credentials", "true");//是否携带cookie

        filterChain.doFilter(servletRequest, servletResponse);
    }
}
  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕业设计,基于SpringBoot+Vue+MySQL开发的校园二手书交易平台,源码+数据库+毕业论文+视频演示 信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性,还是安全性,还是可操作性等各个方面来讲,遇到了互联网时代才发现能补上自古以来的短板,有效的提升管理的效率和业务水平。传统的管理模式,时间越久管理的内容越多,也需要更多的人来对数据进行整理,并且数据的汇总查询方面效率也是极其的低下,并且数据安全方面永远不会保证安全性能。结合数据内容管理的种种缺点,在互联网时代都可以得到有效的补充。结合先进的互联网技术,开发符合需求的软件,让数据内容管理不管是从录入的及时性,查看的及时性还是汇总分析的及时性,都能让正确率达到最高,管理更加的科学和便捷。本次开发的校园二手书交易平台实现了图书信息查询。系统用到了关系型数据库中MySql作为系统的数据库,有效的对数据进行安全的存储,有效的备份,对数据可靠性方面得到了保证。并且程序也具备程序需求的所有功能,使得操作性还是安全性都大大提高,让校园二手书交易平台更能从理念走到现实,确确实实的让人们提升信息处理效率。 关键字:信息管理,时效性,安全性,MySql;Spring Boot
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值