java listen_JavaWeb之Filter、Listener

昨天和大家介绍了一下JSON的用法,其实JSON中主要是用来和数据库交互数据的。今天给大家讲解的是Filter和Listener的用法。

一、Listenner监听器

1.1、定义

Javaweb中的监听器是用于监听web常见对象HttpServletRequest,HttpSession,ServletContext。

1.2、监听器的作用

监听web对象创建与销毁.

监听web对象的属性变化

监听session绑定javaBean操作.

1.3、监听机制中的概念

事件----一件事情

事件源---产生这件事情的源头

注册监听---将监听器与事件绑定,当事件产生时,监听器可以知道,并进行处理。

监听器---对某件事情进行处理监听的一个对象

二、JavaWeb中常见的监听器

2.1、创建一个监听器的步骤

创建一个类,实现需要监听器的接口

重写接口中的方法

在web.xml中配置注册该监听器

2.2、监听域对象的创建与销毁

监听ServletContext创建与销毁 ServletContextListener

监听HttpSession创建与销毁 HttpSessionListener

监听HttpServletRequest创建与销毁 ServletRequestListener

下面为大家展示的实例,首先我们的实例在jsp中进行的话,我们要明确这三个域对象什么时候被jsp创建什么时候又被销毁呢。

在ServletContext中是服务器开启的时候就被创建,当服务器关闭的时候就被销毁

在session中,jsp里的page指令中可以配置默认是ture的,所以当你加载这个jsp页面的时候session就被创建了,而销毁的话就有

四种方法:默认超时30分钟、关闭服务器、invalidate()方法、setMaxInactiveInterval(int interval) 可以设置超时时间,在servlet中

需要通过request.getSseeion()来创建session。

在request中,发送请求服务器就会创建它,当响应产生时,request对象就会销毁。在jsp页面的话,你加载开始创建,加载完就销毁了。

2.2.1、实例:监听域对象的创建与销毁

这里只演示一个,其他的两个同理都是这样子操作的。

HttpServletListener监听器

a.创建类,实现HttpServletListener接口,并重写方法

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagetest;importjavax.servlet.http.HttpSessionEvent;importjavax.servlet.http.HttpSessionListener;public class MyHttpSessionListener implementsHttpSessionListener {

@Overridepublic voidsessionCreated(HttpSessionEvent arg0) {

System.out.println("session被创建了");

}

@Overridepublic voidsessionDestroyed(HttpSessionEvent arg0) {

System.out.println("session被销毁了");

}

}

View Code

b.在web.xml中的配置

28277d0f7aae1bef4da4464d76b31baf.png

c.在newFile.jsp中测试

注:在jsp中我添加了invalidate方法来测试销毁

3edfd38f4dae822d223fa28490a84bdf.png

d.结果

8ed7887860f2215adcea10604c427fef.png

2.3、监听域对象的属性变化

监听ServletContext属性变化 ServletContextAttributeListener

监听HttpSession属性变化 HttpSessionAttributeListener

监听HttpServletRequest属性变化 ServletRequestAttributeListener

2.3.1、实例:监听域对象的实例变化

a.创建一个MyServletRequest类继承ServletRequestAttributeListener接口,并实现改接口方法

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagetest;importjavax.servlet.ServletRequestAttributeEvent;importjavax.servlet.ServletRequestAttributeListener;public class MyServletRequest implementsServletRequestAttributeListener{

@Overridepublic voidattributeAdded(ServletRequestAttributeEvent arg0) {

System.out.println("requestAttribute添加了属性");

}

@Overridepublic voidattributeRemoved(ServletRequestAttributeEvent arg0) {//TODO Auto-generated method stub

System.out.println("requestAttribute被移除了");

}

@Overridepublic voidattributeReplaced(ServletRequestAttributeEvent arg0) {//TODO Auto-generated method stub

System.out.println("requestAttribute被替换了");

System.out.println(arg0.getName()+arg0.getValue());

}

}

View Code

b.在web.xml中注册该监听器

test.MyServletRequest

c.在jsp测试一下

14a7193a4620fd9b886af793280db036.png

结果:

f2b354e16543bb8cbafcad8edbfc8064.png

当我们在添加一个removeAttribute()方法时

491e517aa39b4a1cf1cd276737727ad9.png

2.4、监听session绑定javabean

2.4.1、HttpSessionBindingListener(这个是用javabean去实现的,所以不需要去注册)

用于监听javaBean对象是否绑定到了session域

创建一个User去实现HttpSessionBindingListener接口

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagetest;importjavax.servlet.http.HttpSessionBindingEvent;importjavax.servlet.http.HttpSessionBindingListener;public class User implementsHttpSessionBindingListener {privateString name;private intage;publicString getName() {returnname;

}public voidsetName(String name) {this.name =name;

}public intgetAge() {returnage;

}public void setAge(intage) {this.age =age;

}

@Overridepublic voidvalueBound(HttpSessionBindingEvent arg0) {

System.out.println("User对象被session绑定了!");

}

@Overridepublic voidvalueUnbound(HttpSessionBindingEvent arg0) {

System.out.println("User对象解除session绑定了!");

}

}

View Code

在jsp页面中测试

061fc3463375792656254be2220afefe.png

结果:

371fd418ea54acbbc580baa4e7eaa2e4.png

注意:不需要再web.xml中去配置该监听器,在执行setAttrubute()方法的时候自动去识别该监听器

2.4.2.HttpSessionActivationListener

用于监听javaBean对象的活化与钝化。

HttpSessionActivationListener如果javaBean实现了这个接口,那么当我们正常关闭服务器时,session中的javaBean对象就会被钝化到我们指定的文件中。

当下一次在启动服务器,因为我们已经将对象写入到文件中,这时就会自动将javaBean对象活化到session中。

首先我们要明白什么是活化与钝化等下单独写一篇文章介绍活化与钝化

a2b02190b491049e09b1433291c2fd40.png

我们还需要个context.xml文件来配置钝化时存储的文件

三、Filter

接下来为大家讲解的是Filter,这个相对于Listener来说就重要的多了,它的应用非常的广泛,主要是起到一个过滤、拦截的作用。

3.1、Filter的定义

Javaweb中的过滤器可以拦截所有访问web资源的请求或响应操作。执行过滤任务的对象,这些任务是针对对某一资源(servlet 或静态内容)的请求或来自某一资源的响应执行的,抑或同时针对这两者执行。

3.2、怎么创建一个过滤器

创建一个类实现Filter接口

重写接口中方法 doFilter方法是真正过滤的

在web.xml文件中配置

注意:在Filter的doFilter方法内如果没有执行chain.doFilter(request,response)那么资源是不会被访问到的。

3.3、实例

首先我创建了一个MyFilter.java实现Filter接口

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.jxlg.filter;importjava.io.IOException;importjavax.servlet.Filter;importjavax.servlet.FilterChain;importjavax.servlet.FilterConfig;importjavax.servlet.ServletException;importjavax.servlet.ServletRequest;importjavax.servlet.ServletResponse;public class MyFilter implementsFilter{

@Overridepublic voiddestroy() {

}

@Overridepublic voiddoFilter(ServletRequest req, ServletResponse res,

FilterChain chain)throwsIOException, ServletException {

System.out.println("doFilter执行了");

chain.doFilter(req, res);//放行

System.out.println("执行完返回到客户端");

}

@Overridepublic void init(FilterConfig arg0) throwsServletException {

}

}

View Code

在web.xml中配置过滤器

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

MyFilter

com.jxlg.filter.MyFilter

MyFilter

/demo1

View Code

写一个servlet让MyFilter进行过滤

53ae10f8f6677ef7f8a44f87333ece64.png

结果

27aff5ee25a5e0c23507980b132282c3.png

3.4、FilterChain

FilterChain 是 servlet 容器为开发人员提供的对象,它提供了对某一资源的已过滤请求调用链的视图。过滤器使用 FilterChain 调用链中的下一个过滤器,如果调用的过滤器是链中的最后一个过滤器,则调用链末尾的资源。

问题:怎样可以形成一个Filter链?

只要多个Filter对同一个资源进行拦截就可以形成Filter链

问题:怎样确定Filter的执行顺序?

由来确定,在web.xml文件中哪一个过滤器的放到了前面谁就先执行。

3.5、Filter的生命周期

Servlet生命周期:

实例化 --》 初始化--》 服务--》 销毁

当服务器启动,会创建Filter对象,并调用init方法,只调用一次.

当访问资源时,路径与Filter的拦截路径匹配,会执行Filter中的doFilter方法,这个方法是真正拦截操作的方法.

当服务器关闭时,会调用Filter的destroy方法来进行销毁操作.

3.6、FilterConfig

在Filter的init方法上有一个参数,类型就是FilterConfig.

FilterConfig它是Filter的配置对象,它可以完成下列功能

1.获取Filtr名称

2.获取Filter初始化参数

3.获取ServletContext对象。

怎么获取到一个filterConfig对象

c696b75f1a860f6554a0df927b53cdc4.png

fiterConfig中的方法

5098855a1c458ccd95c4c38a36bf1fd3.png

实例:获取web.xml文件中的字符编码,用来过滤,告知服务器请求用的是什么编码。

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.jxlg.filter;importjava.io.IOException;importjavax.servlet.Filter;importjavax.servlet.FilterChain;importjavax.servlet.FilterConfig;importjavax.servlet.ServletException;importjavax.servlet.ServletRequest;importjavax.servlet.ServletResponse;public class MyFilterConfig implementsFilter {privateFilterConfig filterConfig;

@Overridepublic voiddestroy() {

}

@Overridepublic voiddoFilter(ServletRequest request, ServletResponse response,

FilterChain chain)throwsIOException, ServletException {//通过filterConfig来获取配置信息中的初始化参数

String encoding = filterConfig.getInitParameter("encoding");

request.setCharacterEncoding(encoding);

chain.doFilter(request, response);//放行

}

@Overridepublic void init(FilterConfig filterConfig) throwsServletException {this.filterConfig =filterConfig;

}

}

View Code

web.xml中的配置信息

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

MyFilterConfig

com.jxlg.filter.MyFilterConfig

encoding

UTF-8

MyFilterConfig

/*

View Code

3.7、Filter配置

基本配置

filter名称

Filter类的包名.类名

filter名称

路径

关于其它配置

1.

完全匹配 以”/demo1”开始,不包含通配符*

目录匹配 以”/”开始 以*结束

扩展名匹配 *.xxx 不能写成/*.xxx

2.

它是对指定的servlet名称的servlet进行拦截的。

3.

可以取的值有 REQUEST FORWARD ERROR INCLUDE

它的作用是:当以什么方式去访问web资源时,进行拦截操作.

1.REQUEST 当是从浏览器直接访问资源,或是重定向到某个资源时进行拦截方式配置的 它也是默认值

2.FORWARD 它描述的是请求转发的拦截方式配置

3.ERROR 如果目标资源是通过声明式异常处理机制调用时,那么该过滤器将被调用。除此之外,过滤器不会被调用。

4.INCLUDE 如果目标资源是通过RequestDispatcher的include()方法访问时,那么该过滤器将被调用。除此之外,该过滤器不会被调用。

四、使用Fliter实现自动登录

这个例子就是一个简单的登录验证与数据库交互,我们使用Fliter来实现自动登录。

思路分析:

72283ed613eb3686b3d8d47f34f787c2.png

login.jsp

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

${msg}

用户名:密码:

自动登陆

View Code

FindUserServlet.java

这里获取了表单提交的数据,然后如果按了自动登录,我们就会把用户名和密码保存到cooki中去

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.jxlg.web.servlet;importjava.io.IOException;importjavax.servlet.ServletException;importjavax.servlet.http.Cookie;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importcom.jxlg.web.domain.User;importcom.jxlg.web.service.UserService;public class FindUserServlet extendsHttpServlet {public voiddoGet(HttpServletRequest request, HttpServletResponse response)throwsServletException, IOException {//获取表单数据

String username = request.getParameter("username");

String password= request.getParameter("password");//处理业务逻辑

UserService us = newUserService();

User user=us.findUser(username,password);if(user!=null){

String autoLogin= request.getParameter("autoLogin");

Cookie cookie= new Cookie("user",user.getUsername()+"&"+user.getPassword());

cookie.setPath("/");if(autoLogin!=null){//将用户名和密码保存到cookie中

cookie.setMaxAge(60*60*24*7);

}else{//清除cookie

cookie.setMaxAge(0);

}

response.addCookie(cookie);//把cookie保存到客户端

request.getSession().setAttribute("u", user);

request.getRequestDispatcher("/home.jsp").forward(request, response);

}else{

request.setAttribute("msg", "用户名或密码输入错误,请重新登陆");

request.getRequestDispatcher("/login.jsp").forward(request, response);

}

}public voiddoPost(HttpServletRequest request, HttpServletResponse response)throwsServletException, IOException {

doGet(request, response);

}

}

View Code

UserService

这里是service业务层代码

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

ackage com.jxlg.web.service;importjava.sql.SQLException;importcom.jxlg.Dao.UserDao;importcom.jxlg.web.domain.User;public classUserService {

UserDao ud= newUserDao();publicUser findUser(String username, String password) {try{returnud.findUser(username,password);

}catch(SQLException e) {

e.printStackTrace();

}return null;

}

}

View Code

UserDao

这里是DAO实现类,与数据库交互,我这里是用的是C3P0连接池,和dbUtils与数据库交互

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.jxlg.Dao;importjava.sql.SQLException;importorg.apache.commons.dbutils.QueryRunner;importorg.apache.commons.dbutils.handlers.BeanHandler;importcom.jxlg.util.C3P0Util;importcom.jxlg.web.domain.User;public classUserDao {public User findUser(String username, String password) throwsSQLException {

QueryRunner qr= newQueryRunner(C3P0Util.getDateSource());return qr.query("select * from user where username=? and password=?", new BeanHandler(User.class),username,password);

}

}

View Code

home.jsp

登录成功跳转的界面

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

View Code

MyFilter

这是一个过滤器,记住一定要去web.xml配置,如果我们在longin.jsp中选择了自动登录的话,我们可以直接访问home.jsp实现自动登录。

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.jxlg.web.domain;importjava.io.IOException;importjavax.servlet.Filter;importjavax.servlet.FilterChain;importjavax.servlet.FilterConfig;importjavax.servlet.ServletException;importjavax.servlet.ServletRequest;importjavax.servlet.ServletResponse;importjavax.servlet.http.Cookie;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importcom.jxlg.web.service.UserService;public class MyFilter implementsFilter{

@Overridepublic voiddestroy() {

}

@Overridepublic voiddoFilter(ServletRequest request, ServletResponse response,

FilterChain Chain)throwsIOException, ServletException {//转化两个对象

HttpServletRequest req =(HttpServletRequest)request;

HttpServletResponse res=(HttpServletResponse) response;

String uri=req.getRequestURI();//System.out.println(uri);///StudentLogin/login.jsp

String path =req.getContextPath();

path=uri.substring(path.length());//System.out.println(path);///login.jsp

if("/login.jsp".equals(path)||"/servlet/findUserServlet".equals(path)){

User user= (User) req.getSession().getAttribute("u");//如果用户没有登录过,我们就执行登录操作。

if(user==null){//得到cookies数组

Cookie[] cookies =req.getCookies();

String username="";

String password="";//从cookie中找到想要的user对象

for(int i=0;cookies!=null&&i

String value= cookies[i].getValue(); //tom&123

String[] values = value.split("&");

username= values[0];

password= values[1];

}

}//执行登录操作

UserService us = newUserService();

User u=us.findUser(username, password);//如果登录成功,把user保存到session中

if(user!=null){

req.getSession().setAttribute("u", u);

}

}

}//放行

Chain.doFilter(request, response);

}

View Code

开发中遇到的问题

1.在写MyFilter中,在遍历保存在客户端的cookie的时候,我没有家伙写cookies!=null,这样会导致空指针异常

2.在使用HttpServletRequest时,记住在Filter中一定要记住,进行转化,因为在Filter中是ServletRequest对象。

3.因为我在Filter中web.xml文件中配置的url-pattern是当前应用的所有url,所以当我们请求的每一个资源都会调用Filter进行过滤,但是我们并不需要在login.jsp等也自动登录,所以就记得要排除掉这些。

提供源码,收好不谢:

链接:http://pan.baidu.com/s/1c1K6UJ2 密码:mewe

五、全局编码的过滤器

前言:

ef71b9d72938b7237237c607d088a1e6.png

使用过滤器对post请求的乱码进行过滤,测试之后是没有问题的,但是当我们是get请求的时候,我们该怎么去处理呢?

怎样可以做成一个通用的,可以处理post,get所有的请求的?

在java中怎样可以对一个方法进行功能增强?

1.继承

2.装饰设计模式

1.创建一个类让它与被装饰类实现同一个接口或继承同一个父类

2.在装饰类中持有一个被装饰类的引用

3.重写要增强的方法

分析:我们获取请求参数无非就三种方式:getParameter、getParameterValues、getParameterMap.

我们知道getParameter与getParameterValue方法可以依赖于getParamterMap方法来实现。

login.jsp

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

username:
username:

View Code

LoginServlet

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

public voiddoGet(HttpServletRequest request, HttpServletResponse response)throwsServletException, IOException {

String name1= request.getParameter("username1");

String name= request.getParameterValues("username")[0];

System.out.println(name);

System.out.println(name1);

}

View Code

MyFilter

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.itheima.filter;importjava.io.IOException;importjava.io.UnsupportedEncodingException;importjava.util.Map;importjavax.servlet.Filter;importjavax.servlet.FilterChain;importjavax.servlet.FilterConfig;importjavax.servlet.ServletException;importjavax.servlet.ServletRequest;importjavax.servlet.ServletResponse;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletRequestWrapper;public class MyFilter implementsFilter {public void init(FilterConfig filterConfig) throwsServletException {

}public voiddoFilter(ServletRequest request, ServletResponse response,

FilterChain chain)throwsIOException, ServletException {

HttpServletRequest req=(HttpServletRequest) request;//解决post方式//req.setCharacterEncoding("UTF-8");

req = newMyRequest(req);

chain.doFilter(req, response);

}public voiddestroy() {

}

}//实现与被包装对象相同的接口//定义一个与被包装类相对象的引用//定义一个构造方法,把被包装对象传过来//对于不需要改写方法,直接调用//对于无需要改写方法,写自己的方法体

class MyRequest extendsHttpServletRequestWrapper {

HttpServletRequest request;//是用于接收外部传递的原始的request

publicMyRequest(HttpServletRequest request) {super(request);//是因为父类没有无参数构造

this.request =request;

}/** @Override public String getParameter(String name) { name =

* request.getParameter(name);//乱码 try { return new

* String(name.getBytes("iso-8859-1"),"UTF-8"); } catch

* (UnsupportedEncodingException e) { e.printStackTrace(); } return null; }*/@OverridepublicString getParameter(String name) {

Map map =getParameterMap();return map.get(name)[0];

}

@OverridepublicString[] getParameterValues(String name) {

Map map =getParameterMap();returnmap.get(name);

}private boolean flag = true;

@Overridepublic MapgetParameterMap() {

Map map = request.getParameterMap();//乱码

if(flag) {for (Map.Entrym : map.entrySet()) {

String[] values=m.getValue();for (int i = 0; i < values.length; i++) {try{

values[i]= newString(

values[i].getBytes("iso-8859-1"), "UTF-8");

}catch(UnsupportedEncodingException e) {

e.printStackTrace();

}

}

}

flag= false;

}returnmap;

}

}

View Code

68f724bad5a33d9a9f6bd2ca7369ecb7.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/536890.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BFC的概念及作用

在了解什么是BFC之前&#xff0c;首先得明白什么是Box , Formatting Context &#xff08;一个决定如何渲染文档的容器&#xff09;的概念 Box: CSS布局的基本单位 Box是 CSS 布局的对象和基本单位&#xff0c; 直观点来说&#xff0c; 就是一个页面是由很多个 Box组成的&#…

bitcount java_java-Long.bitCount()如何找到设置的位数?

让我们以255为例.我们将这些位组合在一起.首先,我们从255开始,为0b1111.1111(二进制为8 1)第一行代码是&#xff1a;i i - ((i > > > 1) & 0x5555555555555555L);这条线正在梳理每对1.由于我们有8个1,所以我们希望组合成对,并得到2,2,2,2之类的东西.由于它是二进…

Luogu P2463 [SDOI2008]Sandy的卡片

题目链接 \(Click\) \(Here\) 真的好麻烦啊。。事实证明&#xff0c;理解是理解&#xff0c;一定要认认真真把板子打牢&#xff0c;不然调锅的时候真的会很痛苦。。&#xff08;最好是八分钟能无脑把\(SA\)码对的程度\(QAQ\)&#xff09; 这个题最开始我想的是\(RMQ\)遍历每一个…

java log输出到文件路径_Java - 配置log4j的日志文件路径 (附-获取当前类路径的多种方法)...

1 日志路径带来的痛点Java 项目中少不了要和log4j等日志框架打交道, 开发环境和生产环境下日志文件的输出路径总是不一致, 设置为绝对路径的方式缺少了灵活性, 每次变更项目路径都要修改文件, 目前想到的最佳实现方式是: 根据项目位置自动加载并配置文件路径.本文借鉴 Tomcat 的…

常用数据结构

字典&#xff1a;即map&#xff0c;映射&#xff0c;通过key>value的方式直接查找与之对应的值&#xff0c;实现一般是hash表或二叉树跳跃表&#xff1a;本质是链表&#xff0c;只不过将数据进行提取分层&#xff0c;将总数据置为底层&#xff0c;提取2、4、的倍数为第一二层…

java jasypt_Jasypt

软件简介Jasypt这个Java类包为开发人员提供一种简单的方式来为项目增加加密功能&#xff0c;包括&#xff1a;密码Digest认证&#xff0c;文本和对象加密&#xff0c;集成hibernate&#xff0c;SpringSecurity(Acegi)来增强密码管理。Jasypt开发团队推出了Java加密工具Jasypt 1…

ZABBIX监控JAVA日志文件

最近开发人员有一个需求&#xff0c;监控java程序的报错日志&#xff0c;如日志中包含“ERROR”关键字的信息&#xff0c;就邮件告警&#xff0c;以下是具体实现方法。 一、创建模板以上是已经创建好的模板&#xff0c;名为“Template App Java logs”创建应用集二、创建监控项…

如何快速把音乐转成MP3格式

身边有这样一群朋友经常搞音乐&#xff0c;仿佛生活的乐趣只有音乐&#xff0c;不能也能理解&#xff0c;谁没有点自己的爱好呢&#xff1f;但是如果想要在茫茫人海中成为佼佼者&#xff0c;并不是这么容易的&#xff0c;但是我们要在速度上赢更多的人&#xff0c;所以写了这篇…

new URI(zk_servers_1) 路径包含下划线无法获取host的问题

spring cloud gateway使用zookeeper作为注册中心调用其它服务的时候报了下面这个错误&#xff1a; ava.lang.NullPointerException: nullat io.netty.util.NetUtil.isValidIpV4Address(NetUtil.java:648) ~[netty-common-4.1.29.Final.jar:4.1.29.Final]at io.netty.util.NetUt…

java ee 值范围_JAVAEE之内置对象和属性范围

内置对象和属性范围四种属性范围九个内置对象1.内置对象如果说想要使用一个对象&#xff0c;必须new 出来&#xff0c;但是在我们的jsp操作中&#xff0c;发现我们使用过的out,request对象没有进行实例化&#xff0c;类似于这样的对象&#xff0c;我们叫做jsp的内置对象&#x…

JavaWeb学习笔记(九)--HttpServletResponse

web服务器接收到客户端的HTTP请求&#xff0c;会针对每一次请求&#xff0c;分别创建一个用于代表请求的request对象和代表响应的response对象。 request和response对象既然代表请求和响应&#xff0c;那我们要获取客户端提交过来的数据&#xff0c;只需要找request对象即可。要…

java html5 上传_HTML5结合ajax实现文件上传以及进度显示

基于原生html5实现&#xff0c;不需要falsh支持&#xff0c;进度可以自定义显示&#xff0c;控制灵活&#xff0c; 本来打算使用jquery插件进行异步文件上传&#xff0c;比如uploadfy但是需要额外的支持&#xff0c;也有人用iframe模仿异步上传机制&#xff0c;感觉都比较别扭。…

7天玩转机器学习

7天玩转机器学习 人工智能时代&#xff0c;数据迎来大爆发&#xff0c;数据对于提升业务价值的重要性与日俱增。但面对海量数据&#xff0c;传统分析方法已经显得无能为力&#xff0c;而机器学习的成熟为企业带来了强大的分析引擎&#xff0c;可在众多领域帮助企业挖掘数据价值…

centos 6.5 yum java_Centos6.5 yum 安装jdk1.8

centos 6.5 安装卸载jdk-- 查看有没有预装jdk版本java -version-- 查看已安装的版本rpm -qa|grep java-- 卸载预装版本 rpm -e --nodeps 命令卸载rpm -e --nodeps java-1.7.0-openjdk-1.7.0.45-2.4.3.3.el6.x86_64-- 查找可以安装的jdk列表yum search java | grep -i --color J…

java 中使用mongodb_mongodb在java中的使用

agg Aggregation.newAggregation(Aggregation.match(new Criteria().andOperator(Criteria.where("timeStamp").lte(TypeChange.dateToLong(times[1])).gte(TypeChange.dateToLong(times[0])),new Criteria().orOperator(ruleCr))),//筛选符合条件的记录Aggregation…

一次面试总结(记录)

1,从一个数组里找重复出现次数最多的一个数&#xff1f;2,常用的linux命令3.垃圾收集器有哪些 &#xff1f;垃圾收集算法&#xff1f;4,线上服务器变慢了你是如何定位问题并处理的&#xff1f;5,你自己实现一个本地缓存,淘汰最久未使用,你怎么设计6,用栈实现计算器7,剔除二叉树…

java 累加 0-9 a-z_JAVA获得包含0-9、a-z、A-Z范围内字符串的的随机数实例

一、获得0-9,a-z,a-z范围的随机字符串/*** java获得0-9,a-z,a-z范围的随机数* param length 随机数长度* return string*/public static string getrandomchar(int length) {char[] chr {0, 1, 2, 3, 4, 5, 6, 7, 8, 9,a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r,…

【PHP 扩展开发】Zephir 基础篇

上一篇 《Zephir 简介》 简单介绍了环境搭建&#xff0c;编写了一个的简单示例。这一篇继续介绍 Zephir 基础。 基本语法Zephir 中&#xff0c;每个文件都必须有且只有一个类&#xff0c;每个类都必须有一个命名空间&#xff0c;目录结构必须与所使用的类和命名空间的名称相匹配…

java常见排序算法有哪些_Java中常用的6种排序算法详细分解

排序算法很多地方都会用到&#xff0c;近期又重新看了一遍算法&#xff0c;并自己简单地实现了一遍&#xff0c;特此记录下来&#xff0c;为以后复习留点材料。废话不多说&#xff0c;下面逐一看看经典的排序算法&#xff1a;1. 选择排序选择排序的基本思想是遍历数组的过程中&…

python range函数

这个函数很简单&#xff0c;就不写例子了&#xff0c;看看语法&#xff0c;拿来即用 python range() 函数可创建一个整数列表&#xff0c;一般用在 for 循环中。 函数语法 range(start, stop[, step]) 参数说明&#xff1a; start: 计数从 start 开始。默认是从 0 开始。例如ra…