Asp.net core identityServer4 回调跳转到signin-oidc得到404 Not Found的问题

我采用IdentityServer4示例代码(Combined_AspId_and_EFStorage)
,并参考了晓晨的博客(IdentityServer4(10)- 添加对外部认证的支持之QQ登录)

在第三方登录时开始都没问题,能够跳转到QQ授权页面并成功返回QQ用户信息,但是在跳转回MvcClient时却得到404空白页面:

404 Not Found

identity服务器的startup.cs代码如下:

        public void ConfigureServices(IServiceCollection services)
{
            Services = services;

            var connectionString = Configuration.GetConnectionString("qcloud-postgres-applicationdb");
            var migrationsAssembly = typeof(Startup).GetTypeInfo().Assembly.GetName().Name;

            services.AddDbContext<ApplicationDbContext>(options =>
                options.UseNpgsql(connectionString));

            services.AddIdentity<ApplicationUser, IdentityRole>()
                .AddEntityFrameworkStores<ApplicationDbContext>()
                .AddDefaultTokenProviders();

            services.AddMvc().SetCompatibilityVersion(Microsoft.AspNetCore.Mvc.CompatibilityVersion.Version_2_2);

            services.Configure<IISOptions>(iis =>
            {
                iis.AuthenticationDisplayName = "Windows";
                iis.AutomaticAuthentication = false;
            });

            var builder = services.AddIdentityServer(options =>
            {
                options.Events.RaiseErrorEvents = true;
                options.Events.RaiseInformationEvents = true;
                options.Events.RaiseFailureEvents = true;
                options.Events.RaiseSuccessEvents = true;
            })
                // this adds the config data from DB (clients, resources)
                .AddConfigurationStore(options =>
                {
                    options.ConfigureDbContext = b =>
                        b.UseNpgsql(Configuration.GetConnectionString("qcloud-postgres-configurationdb"),
                            sql => sql.MigrationsAssembly(migrationsAssembly));
                })
                // this adds the operational data from DB (codes, tokens, consents)
                .AddOperationalStore(options =>
                {
                    options.ConfigureDbContext = b =>
                        b.UseNpgsql(Configuration.GetConnectionString("qcloud-postgres-persistedgrantdb"),
                            sql => sql.MigrationsAssembly(migrationsAssembly));

                    // this enables automatic token cleanup. this is optional.
                    options.EnableTokenCleanup = true;
                    options.TokenCleanupInterval = 60;
                })
                .AddAspNetIdentity<ApplicationUser>();

            builder.AddDeveloperSigningCredential();
            /*
            if (Environment.IsDevelopment())
            {
                builder.AddDeveloperSigningCredential();
            }
            else
            {
                throw new Exception("need to configure key material");
            }*/

            services.AddAuthentication(
                options =>
                {
                    options.DefaultScheme = "QQ";
                })
                .AddQQ(qqOptions =>
                {
                    qqOptions.AppId = "AppId123456"; //
                    qqOptions.AppKey = "AppKey1234567890";
                });
        }

        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
            if (Environment.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                //app.UseDatabaseErrorPage();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
                }

            app.UseStaticFiles();
            app.UseIdentityServer();
            app.UseMvcWithDefaultRoute();
        }

MvcClient端的startup.cs代码如下:

public void ConfigureServices(IServiceCollection services)
        {
            Services = services;

            Services.AddMvc();

            JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();

            Services.AddAuthentication(options =>
                {
                    options.DefaultScheme = "Cookies";
                    options.DefaultChallengeScheme = "oidc";
                })
                .AddCookie("Cookies")
                .AddOpenIdConnect("oidc", options =>
                {
                    options.SignInScheme = "Cookies";

                    //options.Authority = "http://localhost:5000";
                    options.Authority = "https://identity.web123456.cn";

                    options.RequireHttpsMetadata = false;

                    options.ClientId = "yingyu88";
                    options.ClientSecret = "secret";
                    options.ResponseType = "code id_token";

                    options.SaveTokens = true;
                    options.GetClaimsFromUserInfoEndpoint = true;

                    options.Scope.Add("yingyu88api");
                    //options.Scope.Add("offline_access");

                    //options.ClaimActions.MapJsonKey("website", "website");
                });
            }

                    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                //app.UseDatabaseErrorPage();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
            }

            app.UseAuthentication();
            app.UseStaticFiles();
            app.UseMvcWithDefaultRoute();
        }

客户端得到的log如下:

2019-03-23 11:36:07.588 +08:00 [INF] User profile not available. Using 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET\4.0.30319.0\AutoGenKeys\S-1-5-82-1592072215-1740167268-757123690-3585059337-856257778\DataProtection' as key repository and Windows DPAPI to encrypt keys at rest.
2019-03-23 11:36:08.070 +08:00 [INF] Request starting HTTP/1.0 GET http://www.yingyu88.cn/Home/Secure  
2019-03-23 11:36:08.187 +08:00 [INF] Route matched with {action = "Secure", controller = "Home"}. Executing action MvcClient.Controllers.HomeController.Secure (Yingyu88web)
2019-03-23 11:36:08.197 +08:00 [INF] Authorization failed.
2019-03-23 11:36:08.202 +08:00 [INF] Authorization failed for the request at filter 'Microsoft.AspNetCore.Mvc.Authorization.AuthorizeFilter'.
2019-03-23 11:36:08.209 +08:00 [INF] Executing ChallengeResult with authentication schemes ([]).
2019-03-23 11:36:08.713 +08:00 [INF] AuthenticationScheme: oidc was challenged.
2019-03-23 11:36:08.722 +08:00 [INF] Executed action MvcClient.Controllers.HomeController.Secure (Yingyu88web) in 531.87060000000008ms
2019-03-23 11:36:08.742 +08:00 [INF] Request finished in 673.8004ms 302 
2019-03-23 11:36:15.048 +08:00 [INF] Request starting HTTP/1.0 POST http://www.yingyu88.cn/signin-oidc application/x-www-form-urlencoded 1532
2019-03-23 11:36:15.418 +08:00 [INF] AuthenticationScheme: Cookies signed in.
2019-03-23 11:36:15.419 +08:00 [INF] Request finished in 370.649ms 302 

从以上Log可以看出Signin是成功的,但是callback回到signin-oidc之后请求就结束了,诡异的是应用并没有报错。

如有哪位大神熟悉IdentityServer的请多多赐教!
如果需要我这边更多的代码和log信息可以加QQ:352862120联系我私聊。多谢!

2019-03-29更新:

经过试验发现,IdentityServer4的示例代码在调试状态下没有问题,能够在localhost:5000和localhost:5002之间跳转并传递相应的Cookies。但是部署到服务器后(我用的是windows 2016和iis)就不行了(代码完全一致)。最初直接想到的是跨域问题,但是加上AddCors也并没有解决。

public void ConfigureServices(IServiceCollection services)
        {
            //配置跨域处理,允许所有来源:
            services.AddCors(options =>
                options.AddPolicy("corspolicy",
                    p => p.AllowAnyOrigin())
                    );
        }

                        public void Configure(IApplicationBuilder app)
        {
            if (Environment.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                app.UseDatabaseErrorPage();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
            }

            app.UseStaticFiles();
            app.UseIdentityServer();
**            app.UseCors("corspolicy");
**            app.UseMvcWithDefaultRoute();
        }

以上代码加到了IdentityServer和MvcClient,但是并没有效果。

追踪部署环境和调试环境下的log可以发现,公网部署时IdentityServer运行到signin-oidc就停止了,没有任何报错。
这是公网部署时的log:

2019-03-25 13:46:19.030 +08:00 [INF] Request starting HTTP/1.0 GET http://www.yingyu88.cn/Home/Secure  
2019-03-25 13:46:19.031 +08:00 [INF] Route matched with {action = "Secure", controller = "Home"}. Executing action MvcClient.Controllers.HomeController.Secure (MvcClient)
2019-03-25 13:46:19.039 +08:00 [INF] Authorization failed.
2019-03-25 13:46:19.041 +08:00 [INF] Authorization failed for the request at filter 'Microsoft.AspNetCore.Mvc.Authorization.AuthorizeFilter'.
2019-03-25 13:46:19.045 +08:00 [INF] Executing ChallengeResult with authentication schemes ([]).
2019-03-25 13:46:19.403 +08:00 [INF] AuthenticationScheme: oidc was challenged.
2019-03-25 13:46:19.408 +08:00 [INF] Executed action MvcClient.Controllers.HomeController.Secure (MvcClient) in 376.51370000000003ms
2019-03-25 13:46:19.413 +08:00 [INF] Request finished in 382.7936ms 302 
2019-03-25 13:46:40.244 +08:00 [INF] Request starting HTTP/1.0 POST http://www.yingyu88.cn/signin-oidc application/x-www-form-urlencoded 1531
2019-03-25 13:46:40.651 +08:00 [INF] AuthenticationScheme: Cookies signed in.
2019-03-25 13:46:40.651 +08:00 [INF] Request finished in 406.993ms 302 

这是调试环境下的log:

2019-03-25 12:32:15.062 +08:00 [INF] Request starting HTTP/1.1 GET http://localhost:5002/Home/Secure  
2019-03-25 12:32:15.064 +08:00 [INF] Route matched with {action = "Secure", controller = "Home"}. Executing action MvcClient.Controllers.HomeController.Secure (MvcClient)
2019-03-25 12:32:15.070 +08:00 [INF] Authorization failed.
2019-03-25 12:32:15.072 +08:00 [INF] Authorization failed for the request at filter 'Microsoft.AspNetCore.Mvc.Authorization.AuthorizeFilter'.
2019-03-25 12:32:15.073 +08:00 [INF] Executing ChallengeResult with authentication schemes ([]).
2019-03-25 12:32:15.077 +08:00 [INF] AuthenticationScheme: oidc was challenged.
2019-03-25 12:32:15.077 +08:00 [INF] Executed action MvcClient.Controllers.HomeController.Secure (MvcClient) in 13.078700000000001ms
2019-03-25 12:32:15.077 +08:00 [INF] Request finished in 14.6766ms 302 
2019-03-25 12:32:39.168 +08:00 [INF] Request starting HTTP/1.1 POST http://localhost:5002/signin-oidc application/x-www-form-urlencoded 1522
2019-03-25 12:32:39.543 +08:00 [INF] AuthenticationScheme: Cookies signed in.
2019-03-25 12:32:39.543 +08:00 [INF] Request finished in 375.4138ms 302 
//以下是调试环境下继续执行跳转回/home/secure的动作。部署后这些动作就没有被执行。
2019-03-25 12:32:39.550 +08:00 [INF] Request starting HTTP/1.1 GET http://localhost:5002/Home/Secure  
2019-03-25 12:32:39.551 +08:00 [INF] Route matched with {action = "Secure", controller = "Home"}. Executing action MvcClient.Controllers.HomeController.Secure (MvcClient)
2019-03-25 12:32:39.551 +08:00 [INF] Authorization was successful.
2019-03-25 12:32:39.551 +08:00 [INF] Executing action method MvcClient.Controllers.HomeController.Secure (MvcClient) - Validation state: "Valid"
2019-03-25 12:32:39.552 +08:00 [INF] Executed action method MvcClient.Controllers.HomeController.Secure (MvcClient), returned result Microsoft.AspNetCore.Mvc.ViewResult in 0.2637ms.
2019-03-25 12:32:39.556 +08:00 [INF] Executing ViewResult, running view Secure.
2019-03-25 12:32:39.562 +08:00 [INF] Executed ViewResult - view Secure executed in 10.0428ms.
2019-03-25 12:32:39.563 +08:00 [INF] Executed action MvcClient.Controllers.HomeController.Secure (MvcClient) in 11.7323ms
2019-03-25 12:32:39.565 +08:00 [INF] Request finished in 14.3843ms 200 text/html; charset=utf-8

观察对比两种环境下的cookie,发现部署后从IdentityServer跳转到MvcClient/signin-oidc后少了两个cookie:
.AspNetCore.Identity.Application
idsrv.session


从IdentityServer4官方的示例代码来看,其示例代码可能还无法直接应用于部署环境,在startup.cs中有一段代码:

            if (Environment.IsDevelopment())
            {
                builder.AddDeveloperSigningCredential();
            }
            else
            {
                throw new Exception("need to configure key material");
            }

由此可见sigin-oidc的404问题有可能是解密凭据引起的。但是我对ASP.net core源码了解太少,提供上述信息希望能够得到大神的指点。

2019-03-29更新:AddDeveloperSigningCredential会生成RSA加密证书,使得程序能够正常运行,虽然其安全性会比较差。详见IdentityServer4部署到服务器,配置证书问题。因此AddDeveloperSigningCredential并非导致本次问题的原因。


2019-03-26更新:
如果把IdentityServer4.Samples\Quickstarts\4_ImplicitFlowAuthenticationWithExternal示例部署到同样的环境,发现能够运行通过。但是如果改为Hybrid模式就会出现signin-oidc 404 Not Found的问题。
identityserver.config.cs代码:

                                // OpenID Connect hybrid flow client (MVC)
                new Client
                {
                    ClientId = "mvc",
                    ClientName = "MVC Client",
    // 能正常部署运行:
                    AllowedGrantTypes = GrantTypes.Implicit,
    // 会出现404问题:
                    AllowedGrantTypes = GrantTypes.Hybrid,

                    ClientSecrets = { new Secret("secret".Sha256()) },

                    RedirectUris           = { "http://www.someweb.cn/signin-oidc" },
                    PostLogoutRedirectUris = { "http://www.someweb.cn/signout-callback-oidc" },

                    AllowedScopes =
                    {
                        IdentityServerConstants.StandardScopes.OpenId,
                        IdentityServerConstants.StandardScopes.Profile,
                        "api1"
                    },
                    AllowOfflineAccess = true
                }

MvcClient.startup.cs:

{
                    options.DefaultScheme = "Cookies";
                    options.DefaultChallengeScheme = "oidc";
                })
                .AddCookie("Cookies")
                .AddOpenIdConnect("oidc", options =>
                {
                    options.SignInScheme = "Cookies";
                    options.Authority = "https://identity.someweb.cn";
                    options.RequireHttpsMetadata = false;
                    options.ClientId = "mvc";
                    options.ClientSecret = "secret";
                    options.SaveTokens = true;
                    options.GetClaimsFromUserInfoEndpoint = true;
                    options.Scope.Add("offline_access");
                    options.ClaimActions.MapJsonKey("website", "website");
    // 能够正常部署运行:
                    options.ResponseType = "id_token";
    // 会发生signin-oidc 404错误:
                    options.Scope.Add("api1");
                    options.ResponseType = "code id_token";
    // 会发生"invalid_scope" 错误:
                    options.Scope.Add("api1");
                    options.ResponseType = "id_token";
                });

现在虽然已经知道Hybrid模式下公网部署才会出现错误,但究竟是我对client的配置错误还是IS4的bug所引起的问题并不清楚。
我试过AddCors,但并没有解决以上问题。

3个回答

问题已经解决。
在生产环境下 IS4要求server和client都做https部署。之前我identityserver是https,Mvc client是http,所以导致了错误。

本次问题解决参考了qianfeng_dashuju的博文IdentityServer4实战 - 必须使用HTTPS问题解析

“必须使用HTTPS这个问题,很多人都是部署到生产环境才发生的,因为生产环境很多情况下不会用localhost作为 IdentityServer4(后文简称 Ids4) 的地址,这个问题并不是 Ids4 引起的,而是我们使用的IdentityModel这个组件引起的,它默认限制了当 Ids4 非localhost地址时,必须启用HTTPS。”

特此感谢!

F_Ten
F_Ten 同是天涯沦落人,这几天从早找到晚找了3天,最后也是发现了同样的问题!
3 个月之前 回复
m0_38098958
指月指 回复imady: 给你点赞,我也遇到了这个问题(开发环境就遇到了...),目前都没有能力阅读那么多的资料来解决,但是CSDN吞了C币不应该,在上面问题总是解决不了问题,问答环境和解决问题的环境不好
10 个月之前 回复
silentrock
拥有双核大脑的Frank 这个问题我自己最终通过查阅大量的文章、做了大量的试验完成,CSDN问答平台并没有起到作用,然而却把我提供的160C币私吞了,号称这是社区的规则。这种行径表示鄙视。估计问答平台这种情况占了大多数吧,很多技术人员自己的钻研才解决的,C站也就是私吞了大量的C币。
10 个月之前 回复
silentrock
拥有双核大脑的Frank 这个问题我自己最终通过查阅大量的文章、做了大量的试验完成,CSDN问答平台并没有起到作用,然而却把我提供的160C
10 个月之前 回复
silentrock
拥有双核大脑的Frank 与IUserClaimsPrincipalFactory应该没有关系。整个过程并没有报错。没有任何提示,就是执行到signin-oidc就停止了。请参见我后续补充的信息。
10 个月之前 回复

这问题解决了吗 我在本地用hybrid模式的 也不行

silentrock
拥有双核大脑的Frank 你试试本地也全部用https部署调试看看。
9 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
web api路由跳转,原网站是asp.net website站点,为了实现接入Java网站而做
原网站是asp.net website站点,为了实现接入Java网站而做了web api路由跳转,不知如何在不影响原程序的情况下实现路由跳转。 在登录页面signIn.aspx增加以下web api路由注册代码后,第一次登录正常,第二次登录就会跳转到signIn。 GlobalConfiguration.Configuration.Routes.MapHttpRoute(name: "DefaultApi",routeTemplate: "api/{controller}/{id}", defaults: new { id = System.Web.Http.RouteParameter.Optional } ); GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear(); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles);
SpringSecurity 实现授权码模式遇到了跨域问题,在网上找了一些解决办法,只能解决password模式的跨域问题,但是在授权码模式无法进行登录页跳转
SpringSecurity 实现授权码模式遇到了跨域问题,在网上找了一些解决办法,只能解决password模式的跨域问题,但是在授权码模式无法进行登录页跳转, 错误信息: 错误信息 Whitelabel Error Page This application has no explicit mapping for /error, so you are seeing this as a fallback. Sun Nov 24 13:05:53 CST 2019 There was an unexpected error (type=Internal Server Error, status=500). User must be authenticated with Spring Security before authorization can be completed. 代码如下: ``` SecurityConfig代码 @EnableWebSecurity(debug = true) @Configuration @EnableGlobalMethodSecurity(prePostEnabled = true) @Order(-1) public class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired private UserDetailsService userDetailsService; @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } @Override protected void configure(HttpSecurity http) throws Exception { http.formLogin().loginPage("/signIn.html") .loginProcessingUrl("/authentication/form") .and() .authorizeRequests() .antMatchers("/signIn.html","/authentication/form","/oauth/**").permitAll() .anyRequest() .fullyAuthenticated().and() .requestMatchers().antMatchers(HttpMethod.OPTIONS, "/oauth/token") .and() .cors() .and() .csrf().disable(); } } 全局过滤器代码 @Configuration public class GlobalCorsConfiguration { @Bean public CorsFilter corsFilter() { CorsConfiguration corsConfiguration = new CorsConfiguration(); corsConfiguration.setAllowCredentials(true); corsConfiguration.addAllowedOrigin("*"); corsConfiguration.addAllowedHeader("*"); corsConfiguration.addAllowedMethod("*"); // corsConfiguration.addExposedHeader("head1"); //corsConfiguration.addExposedHeader("Location"); UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource = new UrlBasedCorsConfigurationSource(); urlBasedCorsConfigurationSource.registerCorsConfiguration("/**", corsConfiguration); return new CorsFilter(urlBasedCorsConfigurationSource); } } 前端代码: $.ajax({ url: 'http://127.0.0.1:8090/oauth/token', xhrFields: { withCredentials: true }, contentType:'application/x-www-form-urlencoded;charset=UTF-8', crossDomain: true, data: {'grant_type':'authorization_code','code':s["code"],'scope':'all','redirect_uri':'http://127.0.0.1/manage/pages/index.html'}, type: 'POST', //dataType:'JSON', beforeSend: function (xhr) { xhr.setRequestHeader('Authorization', 'Basic ' + window.btoa("imooc:imoocsecret")); xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded;charset=UTF-8'); }, success: function (data) { }, error: function (xhr) { console.log(xhr) } }); ```
用Mac版Matlab的fraclab工具箱计算分形维数时出错。
用Mac版Matlab的fraclab工具箱计算分形维数时出错 可以到达这个界面 ![图片说明](https://img-ask.csdn.net/upload/201911/28/1574905590_824947.png) 但是点击计算之后无论是自动还是手动都无法计算分形维数。 手动计算报错代码如下: MEX 文件 '/Applications/MATLAB_R2018a.app/toolbox/FracLab-2-2.2-Universal_20170325/FracLab-2.2-Universal/FracLab/Binaries/osx64intel/monolr.mexmaci64' 无效: dlopen(/Applications/MATLAB_R2018a.app/toolbox/FracLab-2-2.2-Universal_20170325/FracLab-2.2-Universal/FracLab/Binaries/osx64intel/monolr.mexmaci64, 6): Library not loaded: @loader_path/libmex.dylib Referenced from: /Applications/MATLAB_R2018a.app/toolbox/FracLab-2-2.2-Universal_20170325/FracLab-2.2-Universal/FracLab/Binaries/osx64intel/monolr.mexmaci64 Reason: image not found。 出错 fl_monolr (line 36) [a_hat,b_hat] = monolr(x,y,RegType,u{:}); 出错 choixbornes (line 64) [a_hat,b_hat]=fl_monolr(x(Indexes),y(Indexes),RegParam_bis{:}); 计算 Line ButtonDownFcn 时出错。 自动计算报错代码如下: MEX 文件 '/Applications/MATLAB_R2018a.app/toolbox/FracLab-2-2.2-Universal_20170325/FracLab-2.2-Universal/FracLab/Binaries/osx64intel/monolr.mexmaci64' 无效: dlopen(/Applications/MATLAB_R2018a.app/toolbox/FracLab-2-2.2-Universal_20170325/FracLab-2.2-Universal/FracLab/Binaries/osx64intel/monolr.mexmaci64, 6): Library not loaded: @loader_path/libmex.dylib Referenced from: /Applications/MATLAB_R2018a.app/toolbox/FracLab-2-2.2-Universal_20170325/FracLab-2.2-Universal/FracLab/Binaries/osx64intel/monolr.mexmaci64 Reason: image not found。 出错 fl_monolr (line 36) [a_hat,b_hat] = monolr(x,y,RegType,u{:}); 出错 fl_regression (line 89) [a_hat,b_hat]=fl_monolr(x,y,RegParam{:}); 出错 boxdim_listepoints (line 135) [boxdim,handlefig,bounds]=fl_regression(log2(tailles_carres),log2(Nboites),'-a_hat','BoxDimension',reg,RegParam{:}); 出错 boxdim_binaire (line 136) [boxdim,Nboites,handlefig,bounds]=boxdim_listepoints(listepoints,tailles_carres,pave_elementaire,Waitbar,reg,u{:}); 出错 fl_boxdim_compute (line 251) [dim,nb,handlefig]=boxdim_binaire(SignIn,box_size,AspectRatio,[],1,reg,RegParam{:}); 计算 UIControl Callback 时出错。 请求大佬帮忙看一下
SSH Action 动态调用 参数 404异常
``` 1. 异常情况: 1. There is no Action mapped for namespace [/dd] and action name [laladList] associated with context path [/baee]. - [unknown location] 1. at com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:185) 1. at org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:63) 1. at org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:39) 1. at com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:58) 1. at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:501) 1. at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77) 1. at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91) 1. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 1. web.xml 1. <?xml version="1.0" encoding="UTF-8"?> 1. <web-app version="3.0" 1. xmlns="http://java.sun.com/xml/ns/javaee" 1. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 1. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 1. http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 1. 1. <display-name>项目名称</display-name> 1. <description>项目描述</description> 1. 1. <jsp-config> 1. <taglib> 1. <!-- 配置标签的引用地址 JSP页面中引用时使用--> 1. <taglib-uri>/el-extends</taglib-uri> 1. <!-- 配置标签的TLD文件地址 --> 1. <taglib-location>/WEB-INF/ELExtends.tld</taglib-location> 1. </taglib> 1. </jsp-config> 1. 1. <!-- 指示服务器在收到引用一个目录名而不是文件名的URL时,使用哪个文件 --> 1. <welcome-file-list> 1. <welcome-file>index.jsp</welcome-file> 1. </welcome-file-list> 1. 1. <!-- 配置Session十分钟有效时间 --> 1. <session-config> 1. <session-timeout>10</session-timeout> 1. </session-config> 1. 1. <!-- 配置错误页面 --> 1. 1. 1. <!-- 将HibernateSession开关控制配置在Filter,保证一个请求一个session,并对lazy提供支持 --> 1. <filter> 1. <filter-name>OpenSessionInViewFilter</filter-name> 1. <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class> 1. </filter> 1. 1. <!-- 配置伪静态 --> 1. <filter> 1. <filter-name>UrlRewriteFilter</filter-name> 1. <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class> 1. </filter> 1. 1. <filter-mapping> 1. <filter-name>UrlRewriteFilter</filter-name> 1. <url-pattern>/*</url-pattern> 1. <dispatcher>REQUEST</dispatcher> 1. <dispatcher>FORWARD</dispatcher> 1. </filter-mapping> 1. 1. <!-- 配置Struts2 --> 1. <filter> 1. <filter-name>struts2</filter-name> 1. <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> 1. <init-param> 1. <param-name>config</param-name> 1. <param-value>struts-default.xml,struts-plugin.xml,struts.xml</param-value> 1. </init-param> 1. </filter> 1. 1. <filter-mapping> 1. <filter-name>struts2</filter-name> 1. <url-pattern>/*</url-pattern> 1. <dispatcher>FORWARD</dispatcher> 1. <dispatcher>REQUEST</dispatcher> 1. </filter-mapping> 1. 1. <!-- 配置Spring --> 1. <context-param> 1. <param-name>contextConfigLocation</param-name> 1. <param-value>classpath:cn/baee/config/applicationContext.*.xml</param-value> 1. </context-param> 1. <listener> 1. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 1. </listener> 1. 1. <!-- log4j的配置文件里可以用${project}来表示刚刚设进去的系统变量 --> 1. <context-param> 1. <param-name>webAppRootKey</param-name> 1. <param-value>project</param-value> 1. </context-param> 1. 1. <!-- 配置由Sprng载入的Log4j配置文件位置 --> 1. <context-param> 1. <param-name>log4jConfigLocation</param-name> 1. <param-value>/WEB-INF/classes/cn/baee/config/log.properties</param-value> 1. </context-param> 1. 1. <!-- Spring刷新Log4j配置文件变动的间隔,单位为毫秒 --> 1. <context-param> 1. <param-name>log4jRefreshInterval</param-name> 1. <param-value>10000</param-value> 1. </context-param> 1. <listener> 1. <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> 1. </listener> 1. 1. <!-- 配置监听器 --> 1. <listener> 1. <listener-class>cn.baee.listener.IniListener</listener-class> 1. </listener> 1. <listener> 1. <listener-class>cn.baee.listener.ReportsListener</listener-class> 1. </listener> 1. <listener> 1. <listener-class>cn.baee.listener.CountsListener</listener-class> 1. </listener> 1. </web-app> 1. 1. struts.xml 1. <?xml version="1.0" encoding="UTF-8" ?> 1. <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> 1. 1. <struts> 1. 1. <!-- 加载国际资源文件 --> 1. <constant name="struts.custom.i18n.resources" value="cn.baee.config.langResource"></constant> 1. 1. <!-- 将Action的创建交给spring来管理 --> 1. <constant name="struts.objectFactory" value="spring" /> 1. 1. <!-- 去掉struts2请求后缀 --> 1. <constant name="struts.action.extension" value=","></constant> 1. 1. <package name="dd" namespace="/dd" extends="struts-default"> 1. <action name="*List?id=*" method="{1}" class="OrderActionBean" > 1. <param name="id">{2}</param> 1. <!--<param name="indexPage">{2}</param>--> 1. <result name="success" type="redirectAction"> 1. <param name="actionName">cc</param> 1. </result> 1. </action> 1. </package> 1. 1. <package name="root" namespace="/" extends="struts-default"> 1. <!-- 用户中心 --> 1. <action name="i" method="i" class="UserCenterActionBean"> 1. <result name="signin">/user_center/signin.jsp</result> 1. <result name="welcome">/user_center/welcome.jsp</result> 1. <result name="system">/user_center/system.jsp</result> 1. <result name="order">/user_center/order.jsp</result> 1. </action> 1. <action name="UserCenter*" method="UserCenter{1}" class="UserCenterActionBean"> 1. <result name="success" type="redirectAction"> 1. <param name="actionName">i</param> 1. </result> 1. </action> 1. 1. <!-- 控制中心 --> 1. <action name="cc" method="cc" class="ControlCenterActionBean"> 1. <result name="signin">/control_center/signin.jsp</result> 1. <result name="welcome">/control_center/welcome.jsp</result> 1. <result name="system">/control_center/system.jsp</result> 1. <result name="order">/control_center/order.jsp</result> <!-- 订单页 --> 1. <result name="order_list">/control_center/order_list.jsp</result> <!-- 订单列表 --> 1. </action> 1. <action name="ControlCenter*" method="ControlCenter{1}" class="ControlCenterActionBean"> 1. <result name="success" type="redirectAction"> 1. <param name="actionName">cc</param> 1. </result> 1. </action> 1. <action name="ControlCenter*?id=*" method="ControlCenter{1}" class="ControlCenterActionBean"> 1. <param name="id">{2}</param> 1. <result name="success" type="redirectAction"> 1. <param name="actionName">cc</param> 1. </result> 1. </action> 1. 1. 1. <!-- 订单 --> 1. <action name="*Order?id=*;sn=*" method="{1}" class="OrderActionBean"> 1. <param name="id">{2}</param> 1. <param name="sn">{3}</param> 1. <result name="success" type="redirectAction"> 1. <param name="actionName">cc</param> 1. </result> 1. </action> 1. 1. <action name="*List?indexPage=*" method="{1}" class="OrderActionBean" > 1. <param name="indexPage">{2}</param> 1. <result name="success" type="redirectAction"> 1. <param name="actionName">cc</param> 1. </result> 1. </action> 1. <!-- 订单列表 --> 1. <action name="*OrderList?orderBusinessId=*;orderSourceTypeId=*;orderStateId=*;indexPage=*" method="{1}" class="OrderActionBean"> 1. <param name="orderBusinessId">{2}</param> 1. <param name="orderSourceTypeId">{3}</param> 1. <param name="orderStateId">{4}</param> 1. <param name="indexPage">{5}</param> 1. <result name="success" type="redirectAction"> 1. <param name="actionName">cc</param> 1. </result> 1. </action> 1. 1. </package> 1. 1. <!-- BAEE Action --> 1. <package name="baee" namespace="/Be" extends="struts-default"> 1. <action name="SiteInitialize" method="Site" class="InitializeActionBean"></action> 1. <action name="PageInitialize?pageAction=*;errorTextCode=*;illegalTextCode=*" method="Page" class="InitializeActionBean"> 1. <param name="pageAction">{1}</param> 1. <param name="errorTextCode">{2}</param> <param name="illegalTextCode">{3}</param> <result name="success" type="dispatcher"> <param name="location">/cc</param> </result> </action> <action name="BugInitialize" method="Bug" class="InitializeActionBean"></action> </package> </struts> action java package cn.baee.action; @SuppressWarnings("serial") public class OrderAction extends GenericAction { private String id; // 订单Id public String getId() { return id; } public void setId(String id) { this.id = id; } public void lalad() throws Exception { System.out.println("lalad()被执行到了" + this.getId()); //return null; } } 问题描述: (1)<s:action name="laladList?id=2" executeResult="true" namespace="/dd"/> (2)http://localhost:8080/baee/dd/laladList?id=2 执行(1)语句的时候没有任何问题,控制台输出了相应的东西,表示我的配置没有任何问题可以正常运行。 执行(2)直接在浏览器访问这个网址的时候却出现了上面的异常,控制台也没有输出,表示根本没有到Acion的这个方法里。 我要实现的效果是利用标签访问Action我指定的这个方法并且可以动态传递参数给它,所有我直接编写了绝对路径去访问这个Action 但是不行,我就很疑惑了,百度了一圈还是解决不了。 附加:如果我没传递任何参数、类似于直接访问(http://localhost:8080/baee/dd/laladList)是可以正常运行的,但是我动态传递了参数进去 就是出现上面的404 找不到这个ACTION的异常。 疑惑1:我思考了半天就是不解了,(1)(2)按理说执行的都是一模一样的东西,连参数都是一样的 为什么在<s:action>就能成功执行呢?难道就因为它指定了一个namespace? 疑惑2:在疑惑1基础上,既然是因为没有指定namespace那么为什么没有带任何参数的时候,两种访问都能成功的访问到我指定的Action的指定方法()呢? 求大神帮解决。。。。 ```
thinkphp index.php跳转问题
目前在根目录下有一个项目point。 这个项目采用的是thinkphp框架,其中有一个HTML路径为http://127.0.0.1/point/index.php/home/user/signin.html。 我想要简化访问路径,在point下面的index.php中写一句header。 但是不知道怎么添加,请大神指教。 define('APP_PATH','./nshPoint/'); if(!file_exists(APP_PATH.'Home/View/User/signin.html')) { //header('Location:index.php/Home/User/signin');exit(); //$this->redirect("./nshPoint/Home/View/User/signin.html");exit(); } // 引入ThinkPHP入口文件 require './ThinkPHP/ThinkPHP.php';
action="/user" 不跳转到根目录
框架是struts1.3 jsp在form文件夹下 本来应该跳转到根目录的 但是url每次都跳转到/form/user?... . . 下面是相关代码 . . . signin.jsp,放在webroot/form文件夹下。 (form那块第一部分注释掉的是原本用struts的html标签做的,这个是可以正常跳转的。但我想用普通的html标签,但就是不行。。) ``` <%@ page language="java" pageEncoding="UTF-8"%> <%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%> <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%> <html> <head> <title>JSP for UserForm form</title> </head> <body> <%-- <html:form action="/user"> <html:hidden property="action" value="signin"/> 账号 : <html:text property="account"/><html:errors property="account"/><br/> 密码 : <html:password property="pwd"/><html:errors property="pwd"/><br/> <html:submit/><html:cancel/> </html:form> --%> <form action="/user"> 账户 : <input type="text" name="account" value="admin1"><br> 密码 : <input type="text" name="pwd" value="1q!"><br> <input type="submit" value="Submit"> </form> </body> </html> ``` struts-config ``` <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" "http://struts.apache.org/dtds/struts-config_1_3.dtd"> <struts-config> <form-beans > <form-bean name="userForm" type="com.changhe.struts.form.UserForm" /> </form-beans> <global-exceptions /> <global-forwards /> <action-mappings > <action attribute="userForm" input="/form/signin.jsp" name="userForm" path="/user" scope="request" type="com.changhe.struts.action.UserAction" cancellable="true"> <forward name="failure" path="/result/failure.jsp" /> <forward name="success" path="/result/success.jsp" /> </action> </action-mappings> <message-resources parameter="com.changhe.struts.ApplicationResources" /> </struts-config> ``` web.xml ``` <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <display-name>ncdba2_0</display-name> <servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts-config.xml</param-value> </init-param> <init-param> <param-name>debug</param-name> <param-value>3</param-value> </init-param> <init-param> <param-name>detail</param-name> <param-value>3</param-value> </init-param> <load-on-startup>0</load-on-startup> </servlet> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> </web-app> ```
jerichotab插件问题,求大神庇佑
菜鸟一枚,今天想用jerichotab插件实现选项卡功能。明明在例子程序上实现很好的,但是放到我代码里main就出现了问题。问题如下: ![图片说明](https://img-ask.csdn.net/upload/201703/17/1489741331_562252.png) jquery-3.1.1.js:3855 Uncaught ReferenceError: tabHash is not definedcreateJerichoTab @ jquery.jerichotab.js:223$.extend.initJerichoTab @ jquery.jerichotab.js:226jericho.buildTabpanel @ signin:41(anonymous function) @ signin:55mightThrow @ jquery-3.1.1.js:3570process @ jquery-3.1.1.js:3638 29frame.js:14 hello world
tornado登陆跳转问题 用ajax提交post请求
用ajax提交post请求后通过验证服务器返回跳转地址,然后又莫名出现了get请求跳回login页面。服务器log如下: ``` [I 170208 15:58:10 web:1971] 200 GET /login (::1) 2.00ms test1 123456 [I 170208 15:58:19 web:1971] 302 POST /login (::1) 3.00ms [I 170208 15:58:19 web:1971] 304 GET / (::1) 2.00ms [I 170208 15:58:19 web:1971] 200 GET /login?_xsrf=2%7Ceaa8943a%7C09432d5ffa3cd4bc80fe8232a2f5e89e%7C1486526704 (::1) 2.00ms ``` 很好奇?_xsrf=27C09432d5ffa3cd4bc80fe8232a2f5e89e%7C148如何添加进去的 index.py ``` #!/usr/bin/env Python # coding=utf-8 import tornado.escape import methods.db as mrd from handlers.base import BaseHandler class LoginHandler(BaseHandler): def get(self): self.render('login.html') def post(self): username = self.get_argument("username") password = self.get_argument("password") print(username,password) user_infos = mrd.select_table(table="users",column="*",condition="username",value=username) if user_infos: db_pwd = user_infos[0][2] if db_pwd == password: self.set_current_user(username) self.redirect("/") else: self.write("2") else: self.write("1") def set_current_user(self, user): print(user) if user: self.set_secure_cookie('user', tornado.escape.json_encode(user))#注意这里使用了 tornado.escape.json_encode() 方法 #print(tornado.escape.json_decode(self.current_user)) else: self.clear_cookie("user") class WelcomeHandler(BaseHandler): @tornado.web.authenticated def get(self): username = tornado.escape.json_decode(self.current_user) self.render('index.html', user=username) print(username) ``` login.html ``` <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <!-- Bootstrap CSS --> <link rel="stylesheet" href="{{static_url("css/bootstrap.min.css")}}" /> <style> body{ padding: 70px 0; } .pos_m{ margin-top: 10%; margin-bottom: 10%; } </style> </head> <body> <div class="container pos_m"> <div class="row justify-content-center"> <div class="col-lg-3 col-md-5 col-sm-8 "> <form class="form-signin"> {% module xsrf_form_html() %} <h2 class="form-signin-heading">Please sign in</h2> <div class="form-group"> <label for="InputUserName" class="sr-only">username</label> <input type="text" class="form-control form-control-danger" placeholder="Username" id="username"> <label for="InputPassword" class="sr-only">password</label> <input type="password" class="form-control" placeholder="Password" id="password"> </div> <div class="checkbox"> <label> <input type="checkbox"> Remember me </label> </div> <button type="submit" class="btn btn-primary btn-block" id="login">Submit</button> </form> </div> </div> </div> </body> </html> ``` script.js ``` function getCookie(name){ var x = document.cookie.match("\\b" + name + "=([^;]*)\\b"); return x ? x[1]:undefined; } $(document).ready(function(){ $("#login").click(function(){ var user = $("#username").val(); var pwd = $("#password").val(); var pd = {"username":user, "password":pwd, "_xsrf":getCookie("_xsrf")}; $.ajax({ type:"post", url:"/login", data:pd, cache:false, success:function(data){ alert(data); } }); }); }); ``` 菜鸟入门 求大神指教,调试一天了,实在不知道问题在哪里。
c#+jquery+ajax实现注册登录功能
数据库是sql server 客户端和服务器端怎么交换数据 页面代码如下 ``` <nav class="main_nav"> <ul> <li ><a class="cd-signin" href="#0">登录</a></li> <li ><a class="cd-signup" href="#0">注册</a></li> </ul> </nav> <div class="cd-user-modal"> <div class="cd-user-modal-container"> <ul class="cd-switcher"> <li ><a href="#0">用户登录</a></li> <li ><a href="#0">注册新用户</a></li> </ul> <div id="cd-login"><!-- 登录表单 --> <form class="cd-form" method="post"> <p class="fieldset"> <label class="image-replace cd-username" for="signin-username-email">姓名或邮箱</label> <input class="full-width has-padding has-border" id="signin-username" type="text" placeholder="输入姓名或邮箱" > </p> <p class="fieldset"> <label class="image-replace cd-password" for="signin-password">密码</label> <input class="full-width has-padding has-border" id="signin-password" type="text" placeholder="输入密码"> </p> <p class="fieldset"> <input type="checkbox" id="remember-me" checked> <label for="remember-me">记住登录状态</label> </p> <p class="fieldset"> <input class="full-width2" id="login" type="submit" value="登 录"> </p> </form> </div> <div id="cd-signup"> <!-- 注册表单 --> <form class="cd-form" method="post"> <p class="fieldset"> <label class="image-replace cd-username" for="signup-username">姓名</label> <input class="full-width has-padding has-border" id="signup-username" type="text" placeholder="输入姓名"> </p> <p class="fieldset"> <label class="image-replace cd-email" for="signup-email">邮箱</label> <input class="full-width has-padding has-border" id="signup-email" type="email" placeholder="输入mail"> </p> <p class="fieldset"> <label class="image-replace cd-password" for="signup-password">密码</label> <input class="full-width has-padding has-border" id="signup-password" type="text" placeholder="输入密码"> </p> <p class="fieldset"> <input type="checkbox" id="accept-terms"> <label for="accept-terms">我已阅读并同意 <a href="#0">用户协议</a></label> </p> <p class="fieldset"> <input class="full-width2" id="register" type="submit" value="注册新用户"> </p> </form> </div> <a href="#0" class="cd-close-form">关闭</a> </div> </div> ``` js代码如下: ``` jQuery(document).ready(function ($) { var $form_modal = $('.cd-user-modal'), $form_login = $form_modal.find('#cd-login'), $form_signup = $form_modal.find('#cd-signup'), $form_modal_tab = $('.cd-switcher'), $tab_login = $form_modal_tab.children('li').eq(0).children('a'), $tab_signup = $form_modal_tab.children('li').eq(1).children('a'), $main_nav = $('.main_nav'); //弹出窗口 $main_nav.on('click', function (event) { if ($(event.target).is($main_nav)) { // on mobile open the submenu $(this).children('ul').toggleClass('is-visible'); } else { // on mobile close submenu $main_nav.children('ul').removeClass('is-visible'); //show modal layer $form_modal.addClass('is-visible'); //show the selected form ($(event.target).is('.cd-signup')) ? signup_selected() : login_selected(); } }); //关闭弹出窗口 $('.cd-user-modal').on('click', function (event) { if ($(event.target).is($form_modal) || $(event.target).is('.cd-close-form')) { $form_modal.removeClass('is-visible'); } }); //使用Esc关闭弹出窗口 $(document).keyup(function (event) { if (event.which == '27') { $form_modal.removeClass('is-visible'); } }); //切换表单 $form_modal_tab.on('click', function (event) { event.preventDefault(); ($(event.target).is($tab_login)) ? login_selected() : signup_selected(); }); function login_selected() { $form_login.addClass('is-selected'); $form_signup.removeClass('is-selected'); $form_forgot_password.removeClass('is-selected'); $tab_login.addClass('selected'); $tab_signup.removeClass('selected'); } function signup_selected() { $form_login.removeClass('is-selected'); $form_signup.addClass('is-selected'); $form_forgot_password.removeClass('is-selected'); $tab_login.removeClass('selected'); $tab_signup.addClass('selected'); } }); //credits http://css-tricks.com/snippets/jquery/move-cursor-to-end-of-textarea-or-input/ jQuery.fn.putCursorAtEnd = function () { return this.each(function () { // If this function exists... if (this.setSelectionRange) { // ... then use it (Doesn't work in IE) // Double the length because Opera is inconsistent about whether a carriage return is one character or two. Sigh. var len = $(this).val().length * 2; this.setSelectionRange(len, len); } else { // ... otherwise replace the contents with itself // (Doesn't work in Google Chrome) $(this).val($(this).val()); } }); }; ``` 接下来该怎么写功能 与数据库交换数据 最好有详细代码 谢谢了!
菜鸟求助,如何用sql 查询出用户在当月,有那些天签到了(不用查连续的)
表名及字段:user_sign_in (user_id ,signin_time) 传参数 : Integer userId 返回:Integer[] [ 1,5,6,...... ] (返回数组,当月签到的日期)
curl 和 file_get_content 模拟登陆页面的问题
想请教一下各种大神们,我用file_get_content设置了UA就可以输出页面,可是用curl的话反而会报出所请求的资源被分配一个新的永久性的URI,百思不得其解,希望有人能帮下我.. PS:该页面是1688的登陆页面 $url="http://login.1688.com/member/signin.htm"; //可以输出 /* ini_set('user_agent','Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322)'); echo file_get_contents($url) */; //exit; //输出为302 Found //所请求的资源被分配一个新的永久性的URI $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); //curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)'); //curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $content = curl_exec($ch); curl_close($ch); echo $content;
请教:html中点击一个按钮后无法跳转到php
按钮代码如下 ``` <button id="singup" class="btn" onclick="signup();">sign up</button> <button id="signin" class="btn" onclick="signin();">sign in</button> ``` 点击事件 ``` <script type="text/javascript"> function signup() { $.ajax({ url: 'verifyNew.php', method: 'POST', success: function(data) { if(data.success == 1) { alert(data.msg); } } }); } ``` php ``` <?php echo "Welcome" ?> ```
用java我想获取登录后的html文档,一直报错403
import java.io.*; import java.net.*; public class FormPoster { String str="account=******&password=******"; static String a=""; public InputStream post(URL url) throws IOException { HttpURLConnection uc=(HttpURLConnection) url.openConnection(); uc.setDoOutput(true); uc.setDoInput(true); uc.setRequestProperty("User-Agent","Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko"); uc.setRequestProperty("请求","POST / HTTP/1.1"); uc.setRequestProperty("Content-Type","application/x-www-form-urlencoded; charset=UTF-8"); uc.setRequestProperty("Accept","text/html, application/xhtml+xml"); uc.setRequestProperty("Accept-Language","zh-CN"); uc.setRequestProperty("Accept-Encoding","gzip, deflate"); uc.setRequestProperty("Connection","Keep-Alive"); uc.setRequestProperty("Set-Cookie", "q_c1=1dcad38e4a244cb8b611d277de4335a5|1469272988000|1469272988000; l_cap_id=ZmNhNmNjODUzMjMxNDI1Njk1MzdmMmU3OThiOTVlOGU=|1470296178|87e09bd94f9aec0ae514d1a68ee2b0cd76145de6; cap_id=M2JjNzJmYzBmMzJkNDI2NTk1NWU3YzQ4ZDYyMDhjY2E=|1470296178|92d64fc0d0c0fd09454fcf7f07b0b27ca451863f; d_c0=AGDAi1LzRQqPTkeb2yGxHD3Twy27Rm9pXJg=|1469272988; _zap=4bbe642e-7b77-4a68-9a6b-83ad90501a03; __utma=51854390.1443812525.1470275701.1470275701.1470296204.2; __utmz=51854390.1470296204.2.2.utmcsr=zhihu.com|utmccn=(referral)|utmcmd=referral|utmcct=/; login=NDZiY2NiYWNmYTAzNDM3Mzk4NmUwM2NjNWEzOWUyZmU=|1470296186|c1a52509e3e165fb562a273e777c6dffcc514058; __utmb=51854390.8.10.1470296204; __utmt=1; __utmv=51854390.000--|2=registration_date=20160722=1^3=entry_date=20160723=1; n_c=1; __utmc=51854390; a_t=2.0AHAAxB5ARAoXAAAA233KVwBwAMQeQEQKAGDAi1LzRQoXAAAAYQJVTdt9ylcAj4mrzqw5nM97J_Px2AdXkry9tQflr_vYx3dBbD2WypTZRrVqGA8cnA==; z_c0=Mi4wQUhBQXhCNUFSQW9BWU1DTFV2TkZDaGNBQUFCaEFsVk4yMzNLVndDUGlhdk9yRG1jejNzbjhfSFlCMWVTdkwyMUJ3|1470296283|0fd18b8560e36d23aedf8cab27785a74b1b753b2"); uc.setUseCaches(false); uc.setRequestMethod("POST"); OutputStreamWriter out=new OutputStreamWriter(uc.getOutputStream(),"UTF-8"); out.write(str); out.write("\r\n"); out.flush(); return uc.getInputStream(); } public static void main(String args[]) throws IOException { URL url=new URL("https://www.zhihu.com/#signin"); FormPoster poster=new FormPoster(); InputStream in=poster.post(url); InputStreamReader theHTML=new InputStreamReader(in,"UTF-8"); int c; while((c=theHTML.read())!=-1) { System.out.print((char)c); } } } 下面是报错的信息Exception in thread "main" java.io.IOException: Server returned HTTP response code: 403 for URL: https://www.zhihu.com/#signin at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(Unknown Source) at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source) at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(Unknown Source) at FormPoster.post(FormPoster.java:30) at FormPoster.main(FormPoster.java:38) 我试了过吧post改get,没用
showTabBarReddot or setTabBarBadge无效没报错
最近开发个小程序,需要实现其它用户发送评论就在消息的tab那里显示个红点的功能,但是无论是调用showTabBarReddot还是setTabBarBadge,tabbar都没有任何反应,真不知道该如何解决┭┮﹏┭┮。下面发一下代码给大家看看。 ![qq](https://mmbiz.qlogo.cn/mmbiz_png/2iaK23RJlhnlTiaTcN4K7P6wZJUF7jmibIBxNu1zxpslLXOfjoSamYUj4Nhp8RZejia3iaLhliaTAyMXicXhsApibJNqLw/0?wx_fmt=png) ``` referComment: function (e){ // 只能用缓存来传评论数据 var criticism = wx.getStorageSync('criticism') var userInfo = wx.getStorageSync('userInfo') var commentCreatTime = utils.formatTime(new Date()) var result = [userInfo.nickName, userInfo.avatarUrl, commentCreatTime, e.detail.value.comment, this.data.touristID, this.data.figureID, []] criticism.push(result) if(result[3]){ this.refer(criticism, 'comment') news.add({ data:{ acceptor: this.data.creatorID, writer: [userInfo.nickName, userInfo.avatarUrl,this.data.touristID], content: [e.detail.value.comment, this.data.figureID], time: commentCreatTime, url: `/pages/details/details?id=${this.data.pageID}`, newsType:'消息回复', essayType: this.data.type } }) // 意思是用户提交了评论后,先判断是否为空评论,将评论信息写入数据库,然后在消息的tabbar那里显示红点 wx.showTabBarRedDot({ index: 1, success: res => { console.log(res) }, fail: res => { console.error } }) } ``` ``` <form bindsubmit='referComment' report-submit='{{true}}'> <view class='form'> <textarea class='comment' name='comment' value='{{content}}' placeholder-style='color:#000;width:800rpx;z-index:-1' focus='{{focus}}' bindfocus="focusText" bindblur="blurText">{{placeholder}}</textarea> <view class='uploadImages'> <view class="addimages"> <block wx:for='{{figures}}' wx:key="*this"> <image src='{{figures[index]}}' style='margin:0 0 0 20rpx'></image> </block> <image bindtap='addimages' src="/images/plus-square-fill.png" style='width:50px;height:50px;margin-left: 20rpx;'></image> <image bindtap='delimages' src="/images/minus-square-fill.png" style='width:50px;height:50px'></image> </view> </view> <button form-type='submit' type='primary' wx:if='{{signIn}}' style='background-color:#8de7bb;width:90%;color: white;' bindtap='reddot'>发送</button> </view> </form> ```
SpringMVC controller 方法里如何返回JSON消息或跳转页面?
根据执行情况或返回消息或跳转页面: [code="java"] @RequestMapping(value = "/signin", method = RequestMethod.POST) @ResponseBody public String signin(String code, String password, ModelMap model){ String message = ""; User user = new User(); if(!code.equalsIgnoreCase("000001")) message = "code:帐号不存在"; else if(!password.equalsIgnoreCase("123")) message = "password:密码错误"; else{ model.addAttribute(Constants.SESSION_USER, user); message = "redirect:index.html"; } return message; } [/code]
环信webim demo 怎么隐藏登录页,直接在后面直接账号密码登录。
//demo的git git clone https://github.com/easemob/webim.git const Login = ({ I18N, login, doLogin, doLoginByToken, jumpRegister, form: { getFieldDecorator, validateFieldsAndScroll } }) => { const { loginLoading } = login const handleOk = () => { validateFieldsAndScroll((errors, values) => { if (errors) { return } console.log(values) if (values.type) { doLoginByToken(values.username, values.password) } else { doLogin(values.username, values.password) console.log(doLogin(values.username, values.password)); } }) } const logo = WebIM.config.i18n == 'cn' ? <i className='font'>V</i> : <i className="iconfont icon-hyphenate"/> return ( <div className="form x-login" style={{display:'none'}}> <div className="logo"> {logo} <span>{config.name}</span> </div> <form> <FormItem hasFeedback> {getFieldDecorator('username', { rules: [ { required: true } ] })(<Input size="large" onPressEnter={handleOk} id='ddcx_name' placeholder={I18N.username}/>)} </FormItem> <FormItem hasFeedback> {getFieldDecorator('password', { rules: [ { required: true } ] })(<Input size="large" type="password" onPressEnter={handleOk} id='ddcx_pass' placeholder={I18N.password}/>)} </FormItem> <FormItem hasFeedback>{getFieldDecorator('type')(<Checkbox>{I18N.tokenSignin}</Checkbox>)}</FormItem> <Row> <Button type="primary" size="large" id='ddcx_btn' onClick={handleOk} loading={loginLoading}> {I18N.signIn} </Button> </Row> </form> <div className="extra"> <p> {I18N.noaccount} <span onClick={jumpRegister}>{I18N.signUp}</span> </p> </div> </div> ) } Login.propTypes = { form: PropTypes.object, login: PropTypes.object, dispatch: PropTypes.func } export default connect( ({ login, i18n }) => ({ I18N: (i18n.locale && i18n.translations && i18n.translations[i18n.locale]) || {}, login: { loginLoading: false } }), dispatch => ({ doLogin: (username, password) => dispatch(LoginActions.login(username, password)), doLoginByToken: (username, token) => dispatch(LoginActions.loginByToken(username, token)), jumpRegister: () => dispatch(LoginActions.jumpRegister()) }) )(Form.create()(Login))
求大神帮忙写一个模拟登录知乎抓取登录后html文档java代码!
这是我的代码有报错,可以帮我写一个或者帮我修改成能运行也行 用httpurlconnection或httpclient import java.io.*; import java.net.*; public class FormPoster { String str="account=*********&password=*******"; static String a=""; public InputStream post(URL url) throws IOException { HttpURLConnection uc=(HttpURLConnection) url.openConnection(); uc.setDoOutput(true); uc.setDoInput(true); uc.setRequestProperty("User-Agent","Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko"); uc.setRequestProperty("请求","POST / HTTP/1.1"); uc.setRequestProperty("Content-Type","application/x-www-form-urlencoded; charset=UTF-8"); uc.setRequestProperty("Accept","text/html, application/xhtml+xml"); uc.setRequestProperty("Accept-Language","zh-CN"); uc.setRequestProperty("Accept-Encoding","gzip, deflate"); uc.setRequestProperty("Connection","Keep-Alive"); uc.setRequestProperty("Set-Cookie", "q_c1=1dcad38e4a244cb8b611d277de4335a5|1469272988000|1469272988000; l_cap_id=ZmNhNmNjODUzMjMxNDI1Njk1MzdmMmU3OThiOTVlOGU=|1470296178|87e09bd94f9aec0ae514d1a68ee2b0cd76145de6; cap_id=M2JjNzJmYzBmMzJkNDI2NTk1NWU3YzQ4ZDYyMDhjY2E=|1470296178|92d64fc0d0c0fd09454fcf7f07b0b27ca451863f; d_c0=AGDAi1LzRQqPTkeb2yGxHD3Twy27Rm9pXJg=|1469272988; _zap=4bbe642e-7b77-4a68-9a6b-83ad90501a03; __utma=51854390.1443812525.1470275701.1470275701.1470296204.2; __utmz=51854390.1470296204.2.2.utmcsr=zhihu.com|utmccn=(referral)|utmcmd=referral|utmcct=/; login=NDZiY2NiYWNmYTAzNDM3Mzk4NmUwM2NjNWEzOWUyZmU=|1470296186|c1a52509e3e165fb562a273e777c6dffcc514058; __utmb=51854390.8.10.1470296204; __utmt=1; __utmv=51854390.000--|2=registration_date=20160722=1^3=entry_date=20160723=1; n_c=1; __utmc=51854390; a_t=2.0AHAAxB5ARAoXAAAA233KVwBwAMQeQEQKAGDAi1LzRQoXAAAAYQJVTdt9ylcAj4mrzqw5nM97J_Px2AdXkry9tQflr_vYx3dBbD2WypTZRrVqGA8cnA==; z_c0=Mi4wQUhBQXhCNUFSQW9BWU1DTFV2TkZDaGNBQUFCaEFsVk4yMzNLVndDUGlhdk9yRG1jejNzbjhfSFlCMWVTdkwyMUJ3|1470296283|0fd18b8560e36d23aedf8cab27785a74b1b753b2"); uc.setUseCaches(false); uc.connect(); OutputStreamWriter out=new OutputStreamWriter(uc.getOutputStream(),"UTF-8"); out.write(str); out.write("\r\n"); out.flush(); return uc.getInputStream(); } public static void main(String args[]) throws IOException { URL url=new URL("https://www.zhihu.com/#signin"); FormPoster poster=new FormPoster(); InputStream urlStream = poster.post(url); BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(urlStream,"utf-8")); String ss = null; StringBuilder total = new StringBuilder(); while ((ss = bufferedReader.readLine()) != null) { total.append(ss); } System.out.print(total); bufferedReader.close(); } } 错误信息Exception in thread "main" java.io.IOException: Server returned HTTP response code: 403 for URL: https://www.zhihu.com/#signin at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(Unknown Source) at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source) at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(Unknown Source) at FormPoster.post(FormPoster.java:31) at FormPoster.main(FormPoster.java:39)
为什么有的网站链接只能看到部分目录
为什么有的网站链接只能看到部分目录看不到具体文件名 怎么判断这个网站是jap asp 还是php 比如知乎的这个http://www.zhihu.com/#signin
flask 定义的路由找不到了,请问该如何定义flask路由
![图片说明](https://img-ask.csdn.net/upload/201511/10/1447162707_359837.png) 上面的图是这个项目的目录结构,和run.py 的代码,其余代码如下: app文件夹中的__init__.py: ``` app --init from flask import Flask, render_template, json, request from flask.ext.sqlalchemy import SQLAlchemy app = Flask(__name__) app.config.from_object('config') @app.route('/') def index(): return render_template('home.html') # return "hello" @app.route('/signin', methods=['GET', 'POST']) def signin(): return 'ok' ``` 下面的是home.html的代码 ``` <input type="text" id="name" placeholder="Username"> <input type="text" id="password" class="inbox" placeholder="password"> <div style="text-align:center"> <input type="button" id="btn_up_submit" class="btn btn-primary" value="sign up" onclick="upSubmit()"> <input type="button" id="btn_up_cancel" class="btn btn-success" value="cancel" onclick="upCancel()"> </div> <script> function upSubmit() { var name = $("#name").val(); var password = $("#password").val(); mydata = { 'name':name, 'password':password }; $.getJSON('/signin') # 我不知道在js里如何可以寻找路由,在网上看到了有这个代码就写了试试, } <script> ``` 有两个问题: 问题一:运行该程序后可以正常显示home.htm页面,但是为什么 我点击button按钮触发upSubmit找不到/signin这个路由呢,是不是需要在哪个地方设置? 问题二:如果不用getJSON这个方法也可以,请老师推荐一个其他方法,在js里面写然后可以找到路由并且可以传值,因为后期肯定还要传值。 万分感谢
相见恨晚的超实用网站
搞学习 知乎:www.zhihu.com 简答题:http://www.jiandati.com/ 网易公开课:https://open.163.com/ted/ 网易云课堂:https://study.163.com/ 中国大学MOOC:www.icourse163.org 网易云课堂:study.163.com 哔哩哔哩弹幕网:www.bilibili.com 我要自学网:www.51zxw
花了20分钟,给女朋友们写了一个web版群聊程序
参考博客 [1]https://www.byteslounge.com/tutorials/java-ee-html5-websocket-example
爬虫福利二 之 妹子图网MM批量下载
爬虫福利一:27报网MM批量下载    点击 看了本文,相信大家对爬虫一定会产生强烈的兴趣,激励自己去学习爬虫,在这里提前祝:大家学有所成! 目标网站:妹子图网 环境:Python3.x 相关第三方模块:requests、beautifulsoup4 Re:各位在测试时只需要将代码里的变量 path 指定为你当前系统要保存的路径,使用 python xxx.py 或IDE运行即可。
字节跳动视频编解码面经
引言 本文主要是记录一下面试字节跳动的经历。 三四月份投了字节跳动的实习(图形图像岗位),然后hr打电话过来问了一下会不会opengl,c++,shador,当时只会一点c++,其他两个都不会,也就直接被拒了。 七月初内推了字节跳动的提前批,因为内推没有具体的岗位,hr又打电话问要不要考虑一下图形图像岗,我说实习投过这个岗位不合适,不会opengl和shador,然后hr就说秋招更看重基础。我当时
开源一个功能完整的SpringBoot项目框架
福利来了,给大家带来一个福利。 最近想了解一下有关Spring Boot的开源项目,看了很多开源的框架,大多是一些demo或者是一个未成形的项目,基本功能都不完整,尤其是用户权限和菜单方面几乎没有完整的。 想到我之前做的框架,里面通用模块有:用户模块,权限模块,菜单模块,功能模块也齐全了,每一个功能都是完整的。 打算把这个框架分享出来,供大家使用和学习。 为什么用框架? 框架可以学习整体
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过
Python——画一棵漂亮的樱花树(不同种樱花+玫瑰+圣诞树喔)
最近翻到一篇知乎,上面有不少用Python(大多是turtle库)绘制的树图,感觉很漂亮,我整理了一下,挑了一些我觉得不错的代码分享给大家(这些我都测试过,确实可以生成喔~) one 樱花树 动态生成樱花 效果图(这个是动态的): 实现代码 import turtle as T import random import time # 画樱花的躯干(60,t) def Tree(branch
深深的码丨Java HashMap 透析
HashMap 相关概念 HashTab、HashMap、TreeMap 均以键值对像是存储或操作数据元素。HashTab继承自Dictionary,HashMap、TreeMap继承自AbstractMap,三者均实现Map接口 **HashTab:**同步哈希表,不支持null键或值,因为同步导致性能影响,很少被使用 **HashMap:**应用较多的非同步哈希表,支持null键或值,是键值对...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 顺便拉下票,我在参加csdn博客之星竞选,欢迎投票支持,每个QQ或者微信每天都可以投5票,扫二维码即可,http://m234140.nofollow.ax.
Python 基础(一):入门必备知识
目录1 标识符2 关键字3 引号4 编码5 输入输出6 缩进7 多行8 注释9 数据类型10 运算符10.1 常用运算符10.2 运算符优先级 1 标识符 标识符是编程时使用的名字,用于给变量、函数、语句块等命名,Python 中标识符由字母、数字、下划线组成,不能以数字开头,区分大小写。 以下划线开头的标识符有特殊含义,单下划线开头的标识符,如:_xxx ,表示不能直接访问的类属性,需通过类提供
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 欢迎 改进 留言。 演示地点跳到演示地点 html代码如下`&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;music&lt;/title&gt; &lt;meta charset="utf-8"&gt
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。 1. for - else 什么?不是 if 和 else 才
数据库优化 - SQL优化
前面一篇文章从实例的角度进行数据库优化,通过配置一些参数让数据库性能达到最优。但是一些“不好”的SQL也会导致数据库查询变慢,影响业务流程。本文从SQL角度进行数据库优化,提升SQL运行效率。 判断问题SQL 判断SQL是否有问题时可以通过两个表象进行判断: 系统级别表象 CPU消耗严重 IO等待严重 页面响应时间过长
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 c/c++ 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7
通俗易懂地给女朋友讲:线程池的内部原理
餐厅的约会 餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”我楞了一下,心里想女朋友今天是怎么了,怎么突然问出这么专业的问题,但做为一个专业人士在女朋友面前也不能露怯啊,想了一下便说:“我先给你讲讲我前同事老王的故事吧!” 大龄程序员老王 老王是一个已经北漂十多年的程序员,岁数大了,加班加不动了,升迁也无望,于是拿着手里
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹
面试官:你连RESTful都不知道我怎么敢要你?
面试官:了解RESTful吗? 我:听说过。 面试官:那什么是RESTful? 我:就是用起来很规范,挺好的 面试官:是RESTful挺好的,还是自我感觉挺好的 我:都挺好的。 面试官:… 把门关上。 我:… 要干嘛?先关上再说。 面试官:我说出去把门关上。 我:what ?,夺门而去 文章目录01 前言02 RESTful的来源03 RESTful6大原则1. C-S架构2. 无状态3.统一的接
JDK12 Collectors.teeing 你真的需要了解一下
前言 在 Java 12 里面有个非常好用但在官方 JEP 没有公布的功能,因为它只是 Collector 中的一个小改动,它的作用是 merge 两个 collector 的结果,这句话显得很抽象,老规矩,我们先来看个图(这真是一个不和谐的图????): 管道改造经常会用这个小东西,通常我们叫它「三通」,它的主要作用就是将 downstream1 和 downstre...
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
致 Python 初学者
欢迎来到“Python进阶”专栏!来到这里的每一位同学,应该大致上学习了很多 Python 的基础知识,正在努力成长的过程中。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所面临的处境。我从2007年开始接触 python 这门编程语言,从2009年开始单一使用 python 应对所有的开发工作,直至今天。回顾自己的学习过程,也曾经遇到过无数的困难,也曾经迷茫过、困惑过。开办这个专栏,正是为了帮助像我当年一样困惑的 Python 初学者走出困境、快速成长。希望我的经验能真正帮到你
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员...
相关热词 c# 输入ip c# 乱码 报表 c#选择结构应用基本算法 c# 收到udp包后回包 c#oracle 头文件 c# 序列化对象 自定义 c# tcp 心跳 c# ice连接服务端 c# md5 解密 c# 文字导航控件
立即提问