HttpServletResponse 一直为null,是SpringMVC 2C

图片说明
做excel导出时,想要自定义路径导出,查找到的方法是res.getOutPutStream()
但是一直获取不到res,**或者可以自定义路径下载,不用response也可以**,
谢谢
前台是这样的
图片说明图片说明

7个回答

据我所知只有HttpServletRequest才能在参数里注入吧

wjy407199
半城风月半城雪 那如果要用getOututStream(),response怎么注入呢
大约 3 年之前 回复

这不是servlet吧,用的什么框架

wjy407199
半城风月半城雪 但是他是个接口,这样不行啊
大约 3 年之前 回复
wjy407199
半城风月半城雪 你的意思是HttpServletResponse res = new HttpServletResponse(); 这样?
大约 3 年之前 回复
zytdoit
zytdoit 回复wjy407199: null,就是response对象没new呗,Spring-Mvc 方法参数里通常都是写用来接受前台传递的参数,和往后台携带数据用的,request,modelandview,model等。真心没在参数里写过response,你的方法参数里需要response,你在你的方法里创建响应对象手动new吧
大约 3 年之前 回复
wjy407199
半城风月半城雪 springMVC
大约 3 年之前 回复

把request 和response 放在参数中 就会自动注入了

wjy407199
半城风月半城雪 就是放在参数中啊,还是null
大约 3 年之前 回复

你先看看你后台能不能获得数据?给你程序打断点看看有木有数据

wjy407199
半城风月半城雪 。。。。。。。。。。。。。。。。。。。
大约 3 年之前 回复
wjy407199
半城风月半城雪 导出excel已经实现了,但是路径是写死的
大约 3 年之前 回复
wjy407199
半城风月半城雪 主要就是想在导出的时候,弹框自动选择路径,前台找到一个,但是只能在IE上用
大约 3 年之前 回复
wjy407199
半城风月半城雪 可以的,我导的不是数据库里的数据,而是前台空间查询的数据,传到后台导出excel
大约 3 年之前 回复
u012934325
Danishlyy1995 回复wjy407199: 导出不是从数据库里面查出来 然后放到excel中吗 怎么前台传的数据可以获取?
大约 3 年之前 回复
wjy407199
半城风月半城雪 前台传的数据可以获取,就是获取不到response
大约 3 年之前 回复

HttpServletRequest request, HttpServletResponse response

把这两个都写在参数里面,然后试试。

dcxy0
Q544471255 回复半城风月半城雪: 加群:544471255来吧。
大约 3 年之前 回复
wjy407199
半城风月半城雪 是spring mvc
大约 3 年之前 回复
dcxy0
Q544471255 回复wjy407199: 你是用的spring mvc?还是??
大约 3 年之前 回复
wjy407199
半城风月半城雪 还是不行,两个都是null
大约 3 年之前 回复

你有对后台发起请求没,请求和响应是成对出现的啊。如果发起了请求就会有响应的

wjy407199
半城风月半城雪
大约 3 年之前 回复
Urgot
spongeBob_spongeBob 回复半城风月半城雪: 你这个是springMvc是吧,我不是很了解
大约 3 年之前 回复
wjy407199
半城风月半城雪 用request
大约 3 年之前 回复
wjy407199
半城风月半城雪 上面的图里最后一个
大约 3 年之前 回复

哦,没太注意。你这是 jax-rs的restful服务。你最好说清楚是用的什么restful框架?

wjy407199
半城风月半城雪 我查了一下,我们这个好像也比较乱,只用过get和post都是把数据传到后台
大约 3 年之前 回复
wjy407199
半城风月半城雪 就是用了dojo的request调后台
大约 3 年之前 回复
wjy407199
半城风月半城雪 restful这个我不是很清楚啊
大约 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
springmvc接收参数老是为null
后台代码: @RequestMapping(value="/login",method=RequestMethod.POST) @ResponseBody public Map<String,Object> login(String username,String password,HttpServletRequest request,HttpServletResponse response){ return null; } username 和 password一直为null 前台参数:(是用jemeter提交的) Content-Type:application/json;charset=UTF-8 { 'username':'admin2', 'password':'123' }
SpringMVC 下使用 swf+uploadify上传图片问题
在SpringMVC下使用swf+uploadify上传图片,没有使用outputstream任何东西, 但是图片保存到 tomcat/bin目录下了,为什么? 下面是后台代码,后台是一个servlet: protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getWriter(); ServletFileUpload upload = new ServletFileUpload( new DiskFileItemFactory()); String imageId = ""; String imageSrc = ""; InputStream fileInputStream = null; try { List<?> items = upload.parseRequest(request); if (null != items) { Iterator<?> itr = items.iterator(); while (itr.hasNext()) { FileItem item = (FileItem) itr.next(); if (item.isFormField()) { continue; } else { int maxIndexNumber = getMaxIndexNumber( DscConsts.DSC_SPECIAL_AREA, DscConsts.UPLOAD_FILE_CLASS); fileInputStream = item.getInputStream(); String imgUrl = qiniuService.add(fileInputStream); //将图片保存到七牛 imageSrc = imgUrl; DisplayImage displayImage = new DisplayImage(); imageId = displayImage.getId(); displayImage.setClassId(DscConsts.DSC_SPECIAL_AREA); displayImage.setClassName(DscConsts.UPLOAD_FILE_CLASS); displayImage.setOriginal(imgUrl); if (maxIndexNumber >= 0) { displayImage.setIndexNumber(maxIndexNumber + 1); } else { displayImage.setIndexNumber(0); } displayImageService.add(displayImage); //将图片相关的信息保存到数据库 } } } } catch (Exception e) { e.printStackTrace(); } finally{ fileInputStream.close(); } out.print("{\"imageId\":\"" + imageId + "\",\"imageSrc\":\"" + imageSrc + "\"}"); } // 获取最大的MaxIndexNumber private int getMaxIndexNumber(String id, String className) { List<Object> result = displayImageDao .findByHql("select Max(indexNumber) from DisplayImage where classId = '" + id + "' and className = '" + className + "'"); if (result == null || result.size() == 0) return -1; return result.get(0) == null ? -1 : (Integer) result.get(0); }
springmvc restTemplate 415错误
小弟这2天在一个项目中需要调用别的项目接口。我使用的是spring中的restTemplate方法。 其中相关代码如下: ``` MultiValueMap<String, String> uriVariables = new LinkedMultiValueMap<String, String>(); uriVariables.add("message", JSONObject.fromObject(msg).toString()); uriVariables.add("userId", police.getUserId()); System.out.println("uriVariables=" + uriVariables); String mqttClient = restTemplate.postForObject( "http://192.168.1.102:8080/base/mqtt/insertMqttMessage.do", null, String.class, uriVariables); ``` 被调用的方法如下: ``` @RequestMapping(value = "/mqtt/insertMqttMessage.do", method = RequestMethod.POST, consumes="application/json;charset=utf-8") @ResponseBody public String insertMQTTMessage(HttpServletRequest request, HttpServletResponse response, @RequestBody MultiValueMap<String, String> uriVariables) throws Exception { Map<String, Object> result = new HashMap<String, Object>(); System.out.println("进入MQTT接口 uriVariables=" + uriVariables); return "success"; } ``` 在测试过程中,因为是在不同的项目中,所以我使用的是map传递参数。接受也是。 在当前情况下调用会报**415 Unsupported Media Type**错误。当我把参数之前的**@RequestBody**删掉时,不报错,但是打印出来的参数为空。当把接受参数改成一个具有相应字段的javabean时,也是报415错误。 纠结了一天没找到解决办法,求高手帮忙下,谢谢。
用springMVC框架做文件上传时遇到问题
我是基于red5服务器。来用springMVC框架做文件上传。在上传文件时遇到错误。 @RequestMapping(value = "/upload.do",method = RequestMethod.POST) public String upload(HttpServletRequest request, HttpServletResponse response, String string) { System.out.println("==================run in import"); System.out.println("--------------" + request.getParameter("upload")); // 创建一个通用的多部分解析器. CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver( request.getSession().getServletContext()); // 设置编码 commonsMultipartResolver.setDefaultEncoding("utf-8"); System.out.println("++++++commonsMultipartResolver.isMultipart(request) : " + commonsMultipartResolver.isMultipart(request)); // 判断是否有文件上传 if (commonsMultipartResolver.isMultipart(request)) { MultipartHttpServletRequest multipartRequest = commonsMultipartResolver .resolveMultipart(request); Iterator<String> iter = multipartRequest.getFileNames(); System.out.println("+++++++++++iter = "+iter.toString()); // iter里面没有值 while (iter.hasNext()) { MultipartFile file = multipartRequest.getFile((String) iter.next()); if (file != null) { File localFile = new File("/WEB-INF/upload" + file.getOriginalFilename()); try { // file.transferTo(localFile); System.out.println("=======1111111111111===="); file.transferTo(localFile); System.out.println("====222222222222222======="); } catch (IllegalStateException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } // 批量上传 // Map<String, MultipartFile> fileMap = request.getFileMap(); // for(Entry<String, MultipartFile> entry : fileMap.entrySet()){ // MultipartFile file = entry.getValue(); // try { // file.transferTo(new File("/WEB-INF/upload" + // file.getOriginalFilename())); // } catch(IllegalStateException e){ // e.printStackTrace(); // }catch (Exception e) { // // TODO: handle exception // e.printStackTrace(); // } // } return "up"; } } 上传文件后,在我指定的地方没有找到文件。测试发现 if (commonsMultipartResolver.isMultipart(request)) 这个地方获得的是false,我这个action没有接收到上传的文件,但是通过System.out.println("--------------" + request.getParameter("upload"));获取到了我上传文件的文件名。 通过上网查找,我在配置文件中配置了MultipartResolver处理器 <!-- SpringMVC上传文件时,需要配置MultipartResolver处理器 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 指定所上传文件的总大小不能超过200KB。注意maxUploadSize属性的限制不是针对单个文件,而是所有文件的容量之和 --> <property name="maxUploadSize" value="200000"/> </bean> <!-- SpringMVC在超出上传文件限制时,会抛出org.springframework.web.multipart.MaxUploadSizeExceededException --> <!-- 该异常是SpringMVC在检查上传的文件信息时抛出来的,而且此时还没有进入到Controller方法中 --> <bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <property name="exceptionMappings"> <props> <!-- 遇到MaxUploadSizeExceededException异常时,自动跳转到/WEB-INF/jsp/error_fileupload.jsp页面 --> <prop key="org.springframework.web.multipart.MaxUploadSizeExceededException">error_fileupload</prop> </props> </property> </bean> 如果我在代码最上面写 MultipartHttpServletRequest rrr = (MultipartHttpServletRequest) request; 他就会报转化错误 java.lang.ClassCastException: org.apache.catalina.connector.RequestFacade cannot be cast to org.springframework.web.multipart.MultipartHttpServletRequest 不知道现在是什么问题,求解啊!
springmvc 上传MultipartFile
# 直接看代码,如果前台页面不带有上传文件,就进不了controller, ``` @RequestMapping(value="/addApplicationFile") public void addApplicationFile( ApplicationFile applicationFile,HttpServletRequest request,HttpServletResponse response,@RequestParam(value="file", required=false) MultipartFile file){ Map<String, Object> resultMap = new HashMap<String,Object>(); boolean localUploadStatus = false; boolean ftpUploadStatus = false; OptionsItems optionsItems = null; Long userId = null; FtpFileList ftpFileList = null; try { userId = SystemUtil.getUserId(request); //设置请求编码 if( null == userId ){ SystemUtil.userInvalid(request, response); return; } if( null == applicationFile || null == applicationFile.getFileName() || applicationFile.getFileName().equals("") || null == applicationFile.getApplicationVersion() || applicationFile.getApplicationVersion().equals("") || null == applicationFile.getApplicationName() || applicationFile.getApplicationName().equals("") || null == applicationFile.getFileType() || applicationFile.getFileType().equals("") ){ resultMap.put(Constant.SHRG_STATUS, Constant.RESULT_STATUS_ERROR); resultMap.put(Constant.SHRG_MESSAGE, Constant.REQUEST_PARAM_ERROR); SystemUtil.outputJsonObject(resultMap, response); return; } int length = applicationFileService.validateApplicationName(applicationFile); if(length>0){ resultMap.put(Constant.SHRG_FLAG, Constant.RESULT_STATUS_FLAG); resultMap.put(Constant.SHRG_MESSAGE, Constant.APPLICATION_FILE_IS_EXIST); SystemUtil.outputJsonObject(resultMap, response); return; } //先上传再入库 if (null != file && !file.isEmpty()) { //文件上传路径 StringBuffer realPath = new StringBuffer();//tomcat相对路径 realPath.append(Constant.PATH_SEPARATOR_SLASH).append(Constant.PATH_APPLICATION_UPLOAD);//PATH_APPLICATION_UPLOADnew String(Constant.PATH_APPLICATION_UPLOAD.getBytes("GBK"),"iso-8859-1") //在数据得到上传的类型 optionsItems = new OptionsItems(); optionsItems.setModule(Constant.INFO_DIFF); optionsItems.setOptionCode(Constant.APP_UPLOAD_FILE_TYPE); List<OptionsItems> listO = optionsItemsService.initOptionsItem(optionsItems); optionsItems = new OptionsItems(); optionsItems.setModule(Constant.TER); optionsItems.setOptionCode(Constant.SOFTWARE_UPDATE_FILE_TYPE); List<OptionsItems> listT = optionsItemsService.initOptionsItem(optionsItems); //执行上传 if(applicationFile.getUploadType() != null && Constant.UPLOAD_TYPE_A.equals(applicationFile.getUploadType())){ String fileType = listO.get(0).getAttribute1(); fileType = fileType.replaceAll("\\.", ""); ftpFileList = FileUpload.upload(file,realPath.toString(), fileType,request); }else{ String fileType = listT.get(0).getAttribute1(); fileType = fileType.replaceAll("\\.", ""); ftpFileList = FileUpload.upload(file,realPath.toString(),fileType,request); } if(null !=ftpFileList) localUploadStatus = true; ftpUploadStatus = FtpManager.getInstance().uploadFile(ftpFileList.getPath(), ftpFileList.getFtpFilename(), ftpFileList.getFtpPath()); FileUtil.delFile(ftpFileList.getPath(),ftpFileList.getFtpFilename());//删除本地文件 applicationFile.setFileSize(ftpFileList.getFileSize()+""); applicationFile.setFileType(ftpFileList.getFileSuffix()); applicationFile.setFtpFileName(ftpFileList.getFtpFilename()); applicationFile.setFtpFilePath(ftpFileList.getFtpPath()+Constant.PATH_SEPARATOR_SLASH); applicationFile.setCreatedBy(userId); applicationFile.setLastUpdateBy(userId); //文件上传之后,再将文件 入库 applicationFileService.addApplicationFile(applicationFile); resultMap.put(Constant.SHRG_STATUS, Constant.RESULT_STATUS_SUCCESS); resultMap.put(Constant.SHRG_MESSAGE, Constant.ADD_SUCCESS); }else{ resultMap.put(Constant.SHRG_STATUS, Constant.RESULT_STATUS_ERROR); resultMap.put(Constant.SHRG_MESSAGE, Constant.UPLOAD_FILE_IS_NULL); } SystemUtil.outputJsonObject(resultMap, response); }catch(Exception ex){ ex.printStackTrace(); if(ftpUploadStatus){ String deletePath = ftpFileList.getFtpPath()+Constant.PATH_SEPARATOR_SLASH +ftpFileList.getFtpFilename(); try { FtpManager.getInstance().removeFile(deletePath); } catch (Exception e) { int resultCodeA = ShrgLog.exceptionLogMap(this, Constant.ERROR_LEVEL, Constant.INFO_DIFFUSION_PUBLISH, Constant.ADD_UPLOAD_APPLICATION_FILT, e,userId); SystemUtil.exceptionHandle(response, resultCodeA); } }else if(localUploadStatus){ FileUtil.delFile(ftpFileList.getPath(),ftpFileList.getFtpFilename());//删除本地文件 } int resultCode = ShrgLog.exceptionLogMap(this, Constant.ERROR_LEVEL, Constant.INFO_DIFFUSION_PUBLISH, Constant.ADD_UPLOAD_APPLICATION_FILT, ex,userId); SystemUtil.exceptionHandle(response, resultCode); } ```
springmvc框架,HandlerInterceptor拦截器跳转不了
**需求**:用户session十分钟内无请求就会自动删除。无论用户发送什么请求都要被拦截器拦截,并跳转到登录页面。 **问题**:拦截器能拦截到用户的访问行为,可是,跳转语句五法执行。 **我的代码**: HandlerInteceptor: ``` @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception { HttpSession session = request.getSession(true); // session中获取用户名信息 Object obj = session.getAttribute(Constant.LOGIN_SESSION); System.out.println("session中的数据:---> " + obj); if (obj == null || "".equals(obj.toString())) { String location = "/login.jsp" ; response.sendRedirect(location); return false; } return true; } ``` springmvc.xml拦截器配置: ``` <!-- Session失效拦截 --> <mvc:interceptors> <!-- 定义拦截器 --> <mvc:interceptor> <!-- 匹配的是url路径, 如果不配置或/**,将拦截所有的Controller --> <mvc:mapping path="/**" /> <!-- 不需要拦截的地址 --> <!-- 直接用ip:端口号可以打开登录页 --> <mvc:exclude-mapping path="/" /> <!-- 可以浏览器地址栏输入login.jsp后缀访问登录页 --> <mvc:exclude-mapping path="/login.jsp" /> <!-- 以下为静态资源,不需要过滤 --> <mvc:exclude-mapping path="/App/**" /> <mvc:exclude-mapping path="/common/**" /> <mvc:exclude-mapping path="/css/**" /> <mvc:exclude-mapping path="/image/**" /> <mvc:exclude-mapping path="/js/**" /> <mvc:exclude-mapping path="/jsp/**" /> <mvc:exclude-mapping path="/kindeditor/**" /> <mvc:exclude-mapping path="/lib/**" /> <bean class="com.ryzh0310.interceptor.SystemSessionInterceptor"></bean> </mvc:interceptor> </mvc:interceptors> ``` web.xml中session删除配置(为了测试我写了最小时间1): ``` <!-- 登录退出session控制 --> <session-config> <session-timeout>1</session-timeout> </session-config> ``` 我的项目结构: ![图片说明](https://img-ask.csdn.net/upload/201712/15/1513299471_920782.png) 先谢谢你们啊 你们说我的重定向路径应该写成request.getContextPath() 而不应该直接写成/login.jsp 我打印了日志了,日志内容是: request.getContextPath() = /login.js 请帮我看下是不是其他问题吧。 我用的是springmvc+mybatis 抱歉,我是这么测试的,结果就是上面那行日志内容 ``` System.out.println("request.getContextPath() = " + request.getContextPath() + "/login.jsp"); ``` 先感谢大家了。 我改了改springmvc.xml配置文件, ``` <!-- Session失效拦截 --> <mvc:interceptors> <!-- 定义拦截器 --> <mvc:interceptor> <!-- 匹配的是url路径, 如果不配置或/**,将拦截所有的Controller --> <mvc:mapping path="/**" /> <!-- 不需要拦截的地址 --> <mvc:exclude-mapping path="/login.jsp" /> <mvc:exclude-mapping path="/user/login" /> <mvc:exclude-mapping path="/App" /> <mvc:exclude-mapping path="/common" /> <mvc:exclude-mapping path="/css" /> <mvc:exclude-mapping path="/image" /> <mvc:exclude-mapping path="/js" /> <mvc:exclude-mapping path="/jsp" /> <mvc:exclude-mapping path="/kindeditor" /> <mvc:exclude-mapping path="/lib" /> <bean class="com.ryzh0310.interceptor.SystemSessionInterceptor"></bean> </mvc:interceptor> </mvc:interceptors> ``` mvn:mapping Path由 "/" 改为 "/**" mvc:exclude-mapping path也由 "/file/**"改成了"/file" **现在的情况是:** 1.可以跳转到登录界面了,然而地址栏上显示的是被拦截的请求所请求的目标界面的url。 2.这样跳转来的登陆界面,根本不能登录,可以输入帐号密码,却不能发送登录请求
SpringMVC拦截器跳转会自动在跳转的路径加请求!
首先感谢各位朋友帮忙!! 问题如下: 我使用了拦截器控制登录状态,现在我能够进入拦截器,问题在于我转发到页面的时候,转发路径会在我写的 地址前面+ 请求,变成新的地址 比如,我发的请求是 back/getAll,会自动返回一个新jsp页面的地址 SessionFilter: public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws Exception { Employee employee = (Employee) request.getSession().getAttribute("employee"); if (null == employee) { // 跳转方式一:(二选一)我两种都试了 response.sendRedirect("WEB-INF/pages/back/login/login.jsp"); //跳转方式二: request.getRequestDispatcher("WEB-INF/pages/back/login/login.jsp").forward(request, response); return false; } else { return true; } } SpringMVC配置文件: <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/back/**"/><!--我这里有多级请求--> <bean class="sessionFilter.SessionFilter"/> </mvc:interceptor> </mvc:interceptors> 结果页面: ![图片说明](https://img-ask.csdn.net/upload/201704/22/1492849497_82520.png)
springmvc拦截器跳转问题
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception { HttpSession session = httpServletRequest.getSession(); Object UserId = session.getAttribute("userId"); String InterUri = httpServletRequest.getServletPath(); String requesturl = httpServletRequest.getRequestURI(); String contextpath = httpServletRequest.getContextPath(); String url = requesturl.substring(contextpath.length()); if ( null ==UserId){ if (httpServletRequest.getCookies()!=null) { Cookie[] cookies = httpServletRequest.getCookies(); if (cookies != null && cookies.length > 0) { String usercook = null; for (Cookie cookie : cookies) { if ("UserCookie".equals(cookie.getName())) { usercook = cookie.getValue(); String[] Susercook = usercook.split(","); if (Susercook.length == 3) { int userId = Integer.parseInt(Susercook[0]); User user = userService.findbuId(userId); String username = Susercook[1]; String password; if (username.indexOf("@") > 0) { password = Susercook[2]; if (username.equals(user.getEmail()) && password.equals(user.getPassword())) { session.setAttribute("UserId", userId); break; } } else {//手机登录 password = Susercook[2]; if (username.equals(user.getPhone()) && password.equals(user.getPassword())) { session.setAttribute("userId", userId); break; } } } } } if (usercook!=null){ return true; } } } } else{//id // httpServletResponse.sendRedirect(httpServletRequest.getContextPath() +"/Main.jsp"); if(null != allowUrls && allowUrls.length>=1){ for(String path : allowUrls) { if(url.contains(path)) { return true; } } } } return true; } 有没有大神帮下忙,为什么 responsesendredirect(页面)根本没反应 还不能return false,不然静态资源又会被拦截,跳页面时候 httpServletRequest.getServletPath();全是静态资源路径没有跳转的页面路径,我的跳转不经过controller跳转,直接页面跳页面,session也得刷新一下页面才能拿得到,感觉好影响项目效率。在线等,好急啊,做了好几天没解决。
springMVC controller中方法接收参数问题,怎么接收json对象
后台配置及代码 <!-- controller多请求配置即多个方法 请求解析器配置--> <bean id="paramMethodResolver" class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver"> <property name="paramName" value="method"></property> </bean> <!-- 下边配置请求 --> <bean name="/busi/userInfo.action" class="com.mxci.busi.control.impl.UserInfoControllerImpl"> <property name="methodNameResolver"> <ref bean="paramMethodResolver"/><!-- 引用上边那个方法名称解析器 --> </property> </bean> public String regist(HttpServletRequest request, HttpServletResponse response, UserInfo userInfo) { // TODO Auto-generated method stub LOGGER.info("[CR]商户注册开始.请求商户信息:"+userInfo); MxciInsideResult mxciInsideResult = userInfoService.busiCustRegist(userInfo);//调用 //组装响应数据,并初始化进MxciResponseBody里面 MxciResponseServiceImpl mxciResponseService = new MxciResponseServiceImpl(mxciInsideResult.getRecode(),mxciInsideResult.getReData(),response); mxciResponseService.response();//响应结果到客户端 mxciResponseService=null;//置空 return null; } 目前请求地址这样写是可以封装层userId对象的 http://127.0.0.1:8090/mxciBusiness/busi/userInfo.action?method=regist&userId=wangyan&password=900613&certificateId=50022419901231739X&phoneNo=18696668026 请问怎么样修改才能用下边的地址访问能让后台接收到对象呢??? http://127.0.0.1:8090/mxciBusiness/busi/userInfo.action?method=regist&userInfo={"userId": "wangyan888","customerId": "BUSI20160125000001","lastErrorTime": null,"loginDate": null,"loginErrNum": 0,"password": "","phoneNo": "18696668026","reginDate": null,"status": 0,"valiDate":null}
SpringMVC接入为微信,GET可接收数据,配置成功,但是POST无法接收请求。
我使用SpringMVC做微信公众号开发, GET可接收微信请求,同时显示配置成功, 但是POST却怎么也接收不到微信的消息,看配置好像没有什么问题, 不知道该如何解决,请问各位有遇到此类问题吗? 希望能有高人帮忙处理一下,谢谢。 ``` @Controller @RequestMapping("/weicon") public class WeiChartConnectAPI { /** * 微信链接API * * @return */ @RequestMapping(value = "/weiapi", method = RequestMethod.GET) @ResponseBody public void weiChartConnectionAPI(String signature, String timestamp, String nonce, String echostr, HttpServletRequest req, HttpServletResponse res) { try { res.setCharacterEncoding("UTF-8"); System.out.println(" === Enter api, method = get"); String returnMsg = checkWeiChartConnection(signature,timestamp,nonce,echostr); PrintWriter out = res.getWriter(); out.print(returnMsg); out.flush(); out.close(); } catch (Exception e) { e.printStackTrace(); } } /** * 接收微信交互 * * @return */ @RequestMapping(value = "/weiapi", method = RequestMethod.POST,produces = "application/xml;charset=UTF-8") public String weiChartMsgApi(HttpServletRequest req,HttpServletResponse res) { try { res.setCharacterEncoding("UTF-8"); System.out.println(" === Enter api, method = post"); String returnMsg = ""; String weiStrMsg = convertInputParamToString(req); System.out.println("MSG = " + weiStrMsg); WeiChartMsgHandleServices mhs = new WeiChartMsgHandleServices(); returnMsg = mhs.weiChartMessageDispitch(weiStrMsg); PrintWriter out = res.getWriter(); out.print(returnMsg); out.flush(); out.close(); } catch (Exception e) { e.printStackTrace(); } return null; } } ```
springmvc防止表单重复提交的一个问题不是很理解
看了一下网上的案例,大部分都是自定义注解加拦截器实现防止表单重复提交 自定义注解: ``` @Inherited @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface FormToken { boolean save() default false; boolean remove() default false; } ``` 拦截器: ``` public class TokenInterceptor extends HandlerInterceptorAdapter { 14 private static final Logger LOG = Logger.getLogger(Token.class); 15 @Override 16 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { 17 if (handler instanceof HandlerMethod) { 18 HandlerMethod handlerMethod = (HandlerMethod) handler; 19 Method method = handlerMethod.getMethod(); 20 Token annotation = method.getAnnotation(Token.class); 21 if (annotation != null) { 22 boolean needSaveSession = annotation.save(); 23 if (needSaveSession) { 24 request.getSession(true).setAttribute("token", UUID.randomUUID().toString()); 25 } 26 boolean needRemoveSession = annotation.remove(); 27 if (needRemoveSession) { 28 if (isRepeatSubmit(request)) { 29 LOG.warn("please don't repeat submit,url:"+ request.getServletPath()); 30 return false; 31 } 32 request.getSession(true).removeAttribute("token"); 33 } 34 } 35 return true; 36 } else { 37 return super.preHandle(request, response, handler); 38 } 39 } 40 41 private boolean isRepeatSubmit(HttpServletRequest request) { 42 String serverToken = (String) request.getSession(true).getAttribute("token"); 43 if (serverToken == null) { 44 return true; 45 } 46 String clinetToken = request.getParameter("token"); 47 if (clinetToken == null) { 48 return true; 49 } 50 if (!serverToken.equals(clinetToken)) { 51 return true; 52 } 53 return false; 54 } 55 } ``` 24行 request.getSession(true).setAttribute("token", UUID.randomUUID().toString()); 将token保存到session这里不是很理解,这里session的key已经写死了,如果多个人同时进行表单提交,那么session会不会被覆盖(因为key是一样的,后面新的session会覆盖前面的session)?
springmvc 415Unsupported Media Type
我的ajax ``` $('.submit').click(function(){ var userName = $('.userName').val(); var password = $('.password').val(); var json={ "userName":userName, "password":password }; $.ajax({ url:"/jsonTest.do", contentType:"application/json", dataType:"json", type:"POST", data:JSON.stringify(json), success:function (data) { console.log(data); }, error:function (data) { alert("失败"); } } ) }) ``` 后台的controller ``` @RequestMapping(value = "/jsonTest.do") public void jsonTest(@RequestBody User user,HttpServletRequest request,HttpServletResponse response) { System.out.println("jsonTest:userName" + user.getUserName()); if (blogService.selectByPrimaryKey(1) == null) { addOneBlog(1); } BlogWithBLOBs blogWithBLOBs = blogService.selectByPrimaryKey(1); JsonUtil.toJSON(blogWithBLOBs,response); } ``` 问题来了,我添加了@RequestBody标签就会报415Unsupported Media Type.当我把这个注解去掉后,就能正常取值了。为什么呢,我记得我学的时候都说的是用这个标签来接收json数据啊
Springmvc拦截器导致controllor不执行
拦截器代码: ``` @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { logger.warn("==============执行顺序: 1、preHandle================"); String requestUri = request.getRequestURI(); String contextPath = request.getContextPath(); String url = requestUri.substring(contextPath.length()); logger.warn("requestUri:"+requestUri); logger.warn("contextPath:"+contextPath); logger.warn("url:"+url); String username = (String)request.getSession().getAttribute("un"); System.out.println(username); if(username == null){ logger.warn("Interceptor:跳转到login页面!"); // response.sendRedirect("loginStuUI.jsp"); request.getRequestDispatcher("loginStuUI.jsp").forward(request, response); return false; }else logger.warn("登录成功"); return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { logger.warn("==============执行顺序: 2、postHandle================"); response.sendRedirect("/loginStuUI.jsp"); if(modelAndView != null){ //加入当前时间 modelAndView.addObject("var", "测试postHandle"); } } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { logger.warn("==============执行顺序: 3、afterCompletion================"); } ``` Springmvc.xml代码: ``` <context:annotation-config /> <context:component-scan base-package="com.iss.controllor"></context:component-scan> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/admin/" /> <property name="suffix" value=".jsp" /> </bean> <mvc:annotation-driven> <mvc:message-converters register-defaults="true"> <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter"> </bean> </mvc:message-converters> </mvc:annotation-driven> <mvc:default-servlet-handler /> <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/**" /> <bean class="com.iss.controllor.CommonInterceptor"></bean> </mvc:interceptor> </mvc:interceptors> ``` controllor代码: ``` @RequestMapping("/login") public String login(User user, Map map, HttpSession session) { System.out.println("login"); if (userServiceImpl.userLogin(user)) { session.setAttribute("user", user); session.setAttribute("un", user.getUname()); map.put("unameMsg",user.getUname()); logger.warn(user.getUname() + "成功登陆一次"); return "iiindex"; } else { map.put("loginMsg", "登录失败,请重试"); return "../loginStuUI"; } } ``` 登录界面代码: ``` <form action="login" id="signupForm" method="post"> ${loginMsg} <input type="text" name="uname" placeholder="请输入登录名" required> <input type="password" name="upwd" placeholder="请输入密码" required> <input type="submit" name="submit" id="submit" value="登录" class="btn-style-01"> <a href="register2.jsp" >注册</a> </form> ``` 控制台输出语句: ``` 2017-04-10 22:46:10 WARN [com.iss.controllor.CommonInterceptor] ==============执行顺序: 1、preHandle================ 2017-04-10 22:46:10 WARN [com.iss.controllor.CommonInterceptor] requestUri:/Test1/login 2017-04-10 22:46:10 WARN [com.iss.controllor.CommonInterceptor] contextPath:/Test1 2017-04-10 22:46:10 WARN [com.iss.controllor.CommonInterceptor] url:/login null 2017-04-10 22:46:10 WARN [com.iss.controllor.CommonInterceptor] Interceptor:跳转到login页面! ``` 假如把拦截器设置成如下: ``` if(username == null){ logger.warn("登录成功"); return true; }else ``` 则可执行controllor 控制台输出如下所示: ``` 2017-04-10 23:10:17 WARN [com.iss.controllor.CommonInterceptor] ==============执行顺序: 1、preHandle================ 2017-04-10 23:10:17 WARN [com.iss.controllor.CommonInterceptor] requestUri:/Test1/login 2017-04-10 23:10:17 WARN [com.iss.controllor.CommonInterceptor] contextPath:/Test1 2017-04-10 23:10:17 WARN [com.iss.controllor.CommonInterceptor] url:/login null 2017-04-10 23:10:17 WARN [com.iss.controllor.CommonInterceptor] 登录成功 login 2017-04-10 23:10:17 WARN [com.iss.controllor.ACTION] admin成功登陆一次 2017-04-10 23:10:17 WARN [com.iss.controllor.CommonInterceptor] ==============执行顺序: 2、postHandle================ 2017-04-10 23:10:17 WARN [com.iss.controllor.CommonInterceptor] ==============执行顺序: 3、afterCompletion================ 2017-04-10 23:10:17 WARN [com.iss.controllor.CommonInterceptor] ==============执行顺序: 1、preHandle================ 2017-04-10 23:10:17 WARN [com.iss.controllor.CommonInterceptor] ==============执行顺序: 1、preHandle================ 2017-04-10 23:10:17 WARN [com.iss.controllor.CommonInterceptor] requestUri:/Test1/admin/img/icon_san.jpg 2017-04-10 23:10:17 WARN [com.iss.controllor.CommonInterceptor] contextPath:/Test1 2017-04-10 23:10:17 WARN [com.iss.controllor.CommonInterceptor] url:/admin/img/icon_san.jpg admin 2017-04-10 23:10:17 WARN [com.iss.controllor.CommonInterceptor] ==============执行顺序: 1、preHandle================ 2017-04-10 23:10:17 WARN [com.iss.controllor.CommonInterceptor] requestUri:/Test1/admin/img/dyz.JPG 2017-04-10 23:10:17 WARN [com.iss.controllor.CommonInterceptor] contextPath:/Test1 2017-04-10 23:10:17 WARN [com.iss.controllor.CommonInterceptor] url:/admin/img/dyz.JPG admin ``` 请问一下这是什么原因导致的 谢谢
SpringMVC+Spring+Mybatis+DWZ(模糊查询)
Mybatis里面: <select id="allUser" resultMap="BaseResultMap" parameterType="java.math.BigDecimal" > select <include refid="Base_Column_List" /> from AUS_USERS where 1 = 1 <if test="ausCardcode != null"> and AUS_CARDCODE LIKE CONCAT(CONCAT('%','#{ausCardcode}','%')) </if> <if test="ausUsername != null"> and AUS_CARDCODE LIKE CONCAT(CONCAT('%','#{ausUsername}','%') ) </if> </select> 接口: /** String ausCardcode, String ausUsername * 根据账号,姓名查询 * @param ausCardcode * @param ausUsername * @return */ List<AusUsers> allUser(Map map); Controller里面: @RequestMapping("userInfo") public String userInfo(HttpServletRequest request, HttpServletResponse response,Map map) throws IOException { map.get("ausCardcode"); map.get("ausUsername"); List<AusUsers> ausUser=ausUsersMapper.allUser(map); request.setAttribute("AusUser", ausUser); return "system/userInfo"; } Jsp: <li>账号:<input type="text" name="ausCardcode" size="10" maxlength="30" /></li> <li>姓名:<input type="text" name="ausUsername" size="10" maxlength="30" /></li> </ul> <input type="submit" name="button" value="查询" class="btn btn-success"> 为什么获取不到name="ausCardcode"和 name="ausUsername"这两个参数的值?
springMVC 拦截器如何做登录检查及页面跳转
<div class="iteye-blog-content-contain" style="font-size: 14px;"> <p>一个非常简单的登录权限拦截器</p> <p>问题一:登录页面的提交请求肯定是要过滤掉的,目前采用在xml里配置&lt;mvc:mapping path="/supplier/*"/&gt;来过滤,可不可以配置不拦截某种请求。如果是按目前这种配置需要拦截请求,当请求太多的时候那就太麻烦了。</p> <p>问题二:我简单地在拦截器里判断session是否有值,如果有表示登录,如果没有则跳转登录页面。按我下面的做法是不行的,有没有正确而有效的方法。</p> <p>问题三:如果大家能够给出在拦截器内跳转页面的方案,可我的login.jsp是放在WEB-INF下面的,通过ModelAndView跳转时,视图解析器会跳转到/WEB-INF/login.jsp下,那肯定是找不到页面的。但如果我放到此文件夹下,那浏览器又不能访问login.jsp页面了。</p> <p> </p> <pre name="code" class="java">public class UserInterceptor implements HandlerInterceptor{ @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object obj, Exception err) throws Exception { } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object obj, ModelAndView mav) throws Exception { response.sendRedirect("/login.jsp"); } @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object obj) throws Exception { String str = (String) request.getSession().getAttribute("isLogin"); System.out.println("str=========&gt;"+str); if(str!=null){ return true; } return false; } }</pre> <p> </p> <pre name="code" class="xml">&lt;!-- 自定义拦截链配置 --&gt; &lt;mvc:interceptors&gt; &lt;mvc:interceptor&gt; &lt;mvc:mapping path="/supplier/*"/&gt; &lt;mvc:mapping path="/goods/*"/&gt; &lt;mvc:mapping path="/contact/*"/&gt; &lt;bean class="com.xiaoxing.shangjia.user.controller.UserInterceptor"&gt;&lt;/bean&gt; &lt;/mvc:interceptor&gt; &lt;/mvc:interceptors&gt;</pre> <p> </p> </div>
多数据源springmvc+hibernate 切换问题 在一次请求中多次切换不成功
最近写了一个多数据源的代码,结果在使用的过程中出现了在一个请求中(方法中)两个数据库交替使用的情况,最后情况是数据库切换不过来 并且在项目配置中有懒加载和OpenSessionInViewFilter 数据库一个为本地数据库一个为基金数据库 要做的事情就是在本地查询到基金代码接着再循环去基金库查询基金数据 中间报错为在本地数据库中查询不到某个表(其实是在基金库中) controller层 ``` @RequestMapping(value = "/fundsmatch") public String fundsMatch(HttpServletRequest request, HttpServletResponse response){ BtnHitsCount hits = olService.findByBtnNameAndPage("匹配理财方案", "我的页面"); hits.setHits(hits.getHits()+1); olService.saveHits(hits); if (getAttributeFromSession(Constant.SESSION_KEY_CURRENTUSERID) == null) { return "login"; } String openuid = "c8572f0f-dca3-4b63-aecd-2f32d5510ba3"; Integer userId = (Integer)getAttributeFromSession(Constant.SESSION_KEY_CURRENTUSERID); -------------------在本地库取数据-------------------- JoUser joUser = joUserService.find(userId); PortfolioMatch match = portfolioMatchService.findEntity(userId+""); List<FundsGroupBean> list = new ArrayList<FundsGroupBean>(); if(joUser.getRisklevel()!=null&&match!=null&&match.getPlanId()!=null){ ScoreStandard standard = scoreStandard.findEntity(match.getScoreId()+""); FundPortfolio fundPortfolio = match.getFundPortfolioId(); String[] fundcodes = fundPortfolio.getFundcodes().split(","); for (int i = 0; i < fundcodes.length; i++) { FundsGroupBean fgb = new FundsGroupBean(); try { --------------切换基金库取数据-------------- JSONObject json = JSONObject.fromObject(fundsNavService.findFundsInfo(fundcodes[i])); --------------切换基金库取数据-------------- } catch (Exception e) { e.printStackTrace();--------------在此报错-------------------- } fgb.setFundCode(fundcodes[i]); list.add(fgb); } request.setAttribute("list", list); request.setAttribute("rates", fundPortfolio.getMinIncomeRate()+"~"+fundPortfolio.getMaxIncomeRate()); request.setAttribute("risktest", 1); request.setAttribute("level", joUser.getRisklevel()+" "+standard.getName()); }else{ return "redirect:/questionnaire/plan_questionnaire"; } return "fundsmatch"; } ``` 基金server层内部代码 ``` @Service public class FundsNavServiceImpl implements FundsNavService { @Autowired FundsNavDao dao; public Map<String, Object> findNav(String fundcode, String day) { ContextHolder.setDbType(DBType.dataSource2); Map<String,Object> map = dao.findNav(fundcode, day); ContextHolder.clearDBType(); return map; } public Map<String, Object> findFundsInfo(String fundcode) { ContextHolder.setDbType(DBType.dataSource2); Map<String,Object> retMap = new HashMap<String,Object>(); retMap.put("fundinfo", dao.findFundsInfo(fundcode)); ContextHolder.clearDBType(); return retMap; } public Map<String, Object> searchFunds(String fundcode, String page, String rows) { ContextHolder.setDbType(DBType.dataSource2); Map<String,Object> retMap = new HashMap<String,Object>(); retMap.put("fundList", dao.searchFunds(fundcode, page, rows)); ContextHolder.clearDBType(); return retMap; } } ``` 数据源枚举类 ``` package com.chy.dangaowm.util.fund; public enum DBType { dataSource1, dataSource2 } ``` 继承的AbstractRoutingDataSource类并且在spring中配置 ``` package com.chy.dangaowm.util.fund; import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource; public class DynamicDataSource extends AbstractRoutingDataSource { @Override protected Object determineCurrentLookupKey() { DBType dbType = ContextHolder.getDBType(); return dbType; } } ``` 基金库切换类 ``` package com.chy.dangaowm.util.fund; public class ContextHolder { private static final ThreadLocal<Object> holder = new ThreadLocal<Object>(); public static void setDbType(DBType dbType){ holder.set(dbType); } public static DBType getDBType(){ return (DBType)holder.get(); } public static void clearDBType(){ holder.remove(); } } ``` spring配置文件 ``` <!-- 配置dataSource1 进行save,update操作时连接这个数据库--> <bean id="dataSource1" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${jdbc.driverClassName}" /> <property name="url" value="${jdbc.slave.url}" /> <property name="username" value="${jdbc.slave.username}" /> <property name="password" value="${jdbc.slave.password}" /> <property name="initialSize" value="${jdbc.initialSize}" /> <property name="maxActive" value="${jdbc.maxActive}" /> <property name="maxIdle" value="${jdbc.maxIdle}" /> <property name="minIdle" value="${jdbc.minIdle}" /> <property name="testOnBorrow" value="${jdbc.testOnBorrow}" /> <property name="testWhileIdle" value="${jdbc.testWhileIdle}" /> <property name="validationQuery" value="${jdbc.validationQuery}" /> <!-- <property name="validationQuery" value="select 1;" /> --> </bean> <!--配置dataSource1 进行select操作时连接这个数据库 --> <bean id="dataSource2" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${jdbc.driverClassName}" /> <property name="url" value="${jdbc.master.url}" /> <property name="username" value="${jdbc.master.username}" /> <property name="password" value="${jdbc.master.password}" /> <property name="initialSize" value="${jdbc.initialSize}" /> <property name="maxActive" value="${jdbc.maxActive}" /> <property name="maxIdle" value="${jdbc.maxIdle}" /> <property name="minIdle" value="${jdbc.minIdle}" /> <property name="testOnBorrow" value="${jdbc.testOnBorrow}" /> <property name="testWhileIdle" value="${jdbc.testWhileIdle}" /> <property name="validationQuery" value="${jdbc.validationQuery}" /> <!-- <property name="validationQuery" value="select 1;" /> --> </bean> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate" p:dataSource-ref="dataSource1" /> <!-- mysql 动态数据源设置--> <bean id="mysqlDynamicDataSource" class="com.chy.dangaowm.util.fund.DynamicDataSource"> <property name="targetDataSources"> <!-- 标识符类型 --> <map key-type="com.chy.dangaowm.util.fund.DBType"> <entry key="dataSource1" value-ref="dataSource1"/> <entry key="dataSource2" value-ref="dataSource2"/> </map> </property> <property name="defaultTargetDataSource" ref="dataSource1"/> </bean> <!-- 配置sessionFactory --> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <property name="dataSource" ref="mysqlDynamicDataSource" /> <property name="namingStrategy"> <bean class="org.hibernate.cfg.ImprovedNamingStrategy" /> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">${hibernate.dialect}</prop> <prop key="hibernate.show_sql">${hibernate.show_sql}</prop> <prop key="hibernate.format_sql">true</prop> <prop key="hibernate.generate_statistics">${hibernate.generate_statistics}</prop> <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop> </props> </property> <property name="packagesToScan"> <array> <value>com.chy.dangaowm.domain</value> </array> </property> </bean> <!-- 配置事务管理 --> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"></property> </bean> <tx:annotation-driven transaction-manager="transactionManager" /> ```
response重定向后,为何页面需要刷新后才会跳转?
现在在做一个web应用系统,前端框架是Extjs5.1,后端框架是spring+springMVC+hibernate。 加了一个登录过滤器,当session失效后,再点击页面中的任意功能菜单就要跳转到登录页面, 我在验证session为空后,用response.sendRedirect()重定向到登录页面, 但是现在的问题是: ## session失效后,我点击任意功能菜单不会显示数据,页面不跳转,地址栏网址也不会变,必须要按F5刷新后才会跳转到登录页面,在fireBug里面重定向会显示。 登录过滤器: ``` public class LoginFilter implements Filter { @Override public void destroy() { // TODO Auto-generated method stub } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) servletRequest; HttpServletResponse response = (HttpServletResponse) servletResponse; String contextPath = request.getContextPath(); String url = request.getRequestURI(); url = url.replace(contextPath, ""); if ((url.startsWith("/sys") || url.startsWith("/bus")) && !url.contains("/sys/sysuser/login") )) { SysUser sysUser = (SysUser) request.getSession().getAttribute(Constant.SESSION_SYS_USER); if (null == sysUser) { response.sendRedirect(contextPath + "/login.jsp"); return; } } if (request.getMethod().equalsIgnoreCase("get")) { request = new GetHttpServletRequestWrapper(request, "UTF-8"); } filterChain.doFilter(request, response); } @Override public void init(FilterConfig arg0) throws ServletException { // TODO Auto-generated method stub } } ``` fireBug截图: ![fireBug截图](https://img-ask.csdn.net/upload/201512/07/1449458428_790047.png)
哪一位大神能讲讲: js如何阻止在地址栏中敲击回车,java代码,SpringMVC 框架?
局部代码 ``` <form id="accountForm" style="display: none;" method="post"> <input id="appName" name="name" type="hidden"/> <input type="hidden" name="isView" value="false"/> </form> ``` ``` 这个from表单里面设置了两个属性 ``` ``` <td width="20%" class="right" style="text-align: center;"> <c:choose> <c:when test="${personModel.cfapp21!=null && personModel.cfapp21!=''}"> <a href="javascript:managerAccount('${entry.name }')"> <img title="<spring:message code='ui.label.update.account'/>" src="${contextPath}/images/icon/edit.png"/> </a> </c:when> ``` ``` ``` ``` 这个是获得appName的值 ``` ``` ``` ``` function managerAccount(appName) { $("#appName").val(appName); $("#accountForm").attr("action", "${contextPath}/account/editPersonalAccount"); $("#accountForm").submit(); Para.showLoading(); } ``` ```这个是function ``` ``` ``` ``` @RequestMapping("/editPersonalAccount") public ModelAndView editPersonalAccount(@RequestParam("name") String appName, boolean isView,HttpServletResponse response) throws RemoteException, ApplicationException { ```这个是后台接收路径的方法。 使用的是java代码,SpringMVC框架。 从前面<a>标签点击到跳转到下一个页面都没问题,但是在跳转到下一个页面之后重新在浏览器的地址栏中敲击回车,就会报错。 错误信息如下 org.springframework.web.bind.MissingServletRequestParameterException: Required String parameter 'name' is not present ps:小弟实在是不知道怎么办,不管是禁止地址栏中敲击回车 ,还是避免报错 只要其中一种解决方法就行了。小弟在此拜上。求各位大神帮帮忙,万分火急 ``` ``` ``` ``` ``` ```
关于controller接收json串的问题
js: function aaa(){ var rows = $('#dg').datagrid('getSelections'); location.href="exportbus.do?swBus="+JSON.stringify(rows); } java后台: @RequestMapping("/exportbus.do") @ResponseBody public void exportbus(@RequestBody SwBus[] swBus,HttpServletRequest request,HttpServletResponse response)throws Exception{ try { System.out.println("==========="); HSSFWorkbook workbook=new HSSFWorkbook(); String titles[] = {"企业名称","组织机构代码"}; 控制台报错: DEBUG - Looking up handler method for path /exportbus.do DEBUG - Returning handler method [public void com.ufgov.controller.SwBusController.exportbus(com.ufgov.model.SwBus[],javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) throws java.lang.Exception] DEBUG - Returning cached instance of singleton bean 'swBusController' DEBUG - Last-Modified value for [/fs/exportbus.do] is: -1 DEBUG - Resolving exception from handler [public void com.ufgov.controller.SwBusController.exportbus(com.ufgov.model.SwBus[],javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) throws java.lang.Exception]: org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/octet-stream' not supported DEBUG - Resolving exception from handler [public void com.ufgov.controller.SwBusController.exportbus(com.ufgov.model.SwBus[],javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) throws java.lang.Exception]: org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/octet-stream' not supported DEBUG - Resolving exception from handler [public void com.ufgov.controller.SwBusController.exportbus(com.ufgov.model.SwBus[],javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) throws java.lang.Exception]: org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/octet-stream' not supported DEBUG - Null ModelAndView returned to DispatcherServlet with name 'SpringMVC': assuming HandlerAdapter completed request handling jsp页面直接415
动态规划入门到熟悉,看不懂来打我啊
持续更新。。。。。。 2.1斐波那契系列问题 2.2矩阵系列问题 2.3跳跃系列问题 3.1 01背包 3.2 完全背包 3.3多重背包 3.4 一些变形选讲 2.1斐波那契系列问题 在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1, F(n)=F(n-1)+F(n-2)(n&gt;=2,n∈N*)根据定义,前十项为1, 1, 2, 3...
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私...
对计算机专业来说学历真的重要吗?
我本科学校是渣渣二本,研究生学校是985,现在毕业五年,校招笔试、面试,社招面试参加了两年了,就我个人的经历来说下这个问题。 这篇文章很长,但绝对是精华,相信我,读完以后,你会知道学历不好的解决方案,记得帮我点赞哦。 先说结论,无论赞不赞同,它本质就是这样:对于技术类工作而言,学历五年以内非常重要,但有办法弥补。五年以后,不重要。 目录: 张雪峰讲述的事实 我看到的事实 为什么会这样 ...
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
Python 植物大战僵尸代码实现(2):植物卡片选择和种植
这篇文章要介绍的是: - 上方植物卡片栏的实现。 - 点击植物卡片,鼠标切换为植物图片。 - 鼠标移动时,判断当前在哪个方格中,并显示半透明的植物作为提示。
防劝退!数据结构和算法难理解?可视化动画带你轻松透彻理解!
大家好,我是 Rocky0429,一个连数据结构和算法都不会的蒟蒻… 学过数据结构和算法的都知道这玩意儿不好学,没学过的经常听到这样的说法还没学就觉得难,其实难吗?真难! 难在哪呢?当年我还是个小蒟蒻,初学数据结构和算法的时候,在忍着枯燥看完定义原理,之后想实现的时候,觉得它们的过程真的是七拐八绕,及其难受。 在简单的链表、栈和队列这些我还能靠着在草稿上写写画画理解过程,但是到了数论、图...
【搞定 Java 并发面试】面试最常问的 Java 并发基础常见面试题总结!
本文为 SnailClimb 的原创,目前已经收录自我开源的 JavaGuide 中(61.5 k Star!【Java学习 面试指南】 一份涵盖大部分Java程序员所需要掌握的核心知识。欢迎 Star!)。 另外推荐一篇原创:终极推荐!可能是最适合你的Java学习路线 方法 网站 书籍推荐! Java 并发基础常见面试题总结 1. 什么是线程和进程? 1.1. 何为进程? 进程是程...
西游记团队中如果需要裁掉一个人,会先裁掉谁?
2019年互联网寒冬,大批企业开始裁员,下图是网上流传的一张截图: 裁员不可避免,那如何才能做到不管大环境如何变化,自身不受影响呢? 我们先来看一个有意思的故事,如果西游记取经团队需要裁员一名,会裁掉谁呢,为什么? 西游记团队组成: 1.唐僧 作为团队teamleader,有很坚韧的品性和极高的原则性,不达目的不罢休,遇到任何问题,都没有退缩过,又很得上司支持和赏识(直接得到唐太宗的任命,既给
shell脚本:备份数据库、代码上线
备份MySQL数据库 场景: 一台MySQL服务器,跑着5个数据库,在没有做主从的情况下,需要对这5个库进行备份 需求: 1)每天备份一次,需要备份所有的库 2)把备份数据存放到/data/backup/下 3)备份文件名称格式示例:dbname-2019-11-23.sql 4)需要对1天以前的所有sql文件压缩,格式为gzip 5)本地数据保留1周 6)需要把备份的数据同步到远程备份中心,假如...
iOS Bug 太多,苹果终于坐不住了!
开源的 Android 和闭源的 iOS,作为用户的你,更偏向哪一个呢? 整理 | 屠敏 出品 | CSDN(ID:CSDNnews) 毋庸置疑,当前移动设备操作系统市场中,Android 和 iOS 作为两大阵营,在相互竞争的同时不断演进。不过一直以来,开源的 Android 吸引了无数的手机厂商涌入其中,为其生态带来了百花齐放的盛景,但和神秘且闭源的 iOS 系统相比,不少网友...
神经⽹络可以计算任何函数的可视化证明
《Neural Networks and Deep Learning》读书笔记第四篇本章其实和前面章节的关联性不大,所以大可将本章作为小短文来阅读,当然基本的深度学习基础还是要有的。主要介绍了神经⽹络拥有的⼀种普遍性,比如说不管目标函数是怎样的,神经网络总是能够对任何可能的输入,其值(或者说近似值)是网络的输出,哪怕是多输入和多输出也是如此,我们大可直接得出一个结论:不论我们想要计算什么样的函数,...
聊聊C语言和指针的本质
坐着绿皮车上海到杭州,24块钱,很宽敞,在火车上非正式地聊几句。 很多编程语言都以 “没有指针” 作为自己的优势来宣传,然而,对于C语言,指针却是与生俱来的。 那么,什么是指针,为什么大家都想避开指针。 很简单, 指针就是地址,当一个地址作为一个变量存在时,它就被叫做指针,该变量的类型,自然就是指针类型。 指针的作用就是,给出一个指针,取出该指针指向地址处的值。为了理解本质,我们从计算机模型说起...
为什么你学不过动态规划?告别动态规划,谈谈我的经验
动态规划难吗?说实话,我觉得很难,特别是对于初学者来说,我当时入门动态规划的时候,是看 0-1 背包问题,当时真的是一脸懵逼。后来,我遇到动态规划的题,看的懂答案,但就是自己不会做,不知道怎么下手。就像做递归的题,看的懂答案,但下不了手,关于递归的,我之前也写过一篇套路的文章,如果对递归不大懂的,强烈建议看一看:为什么你学不会递归,告别递归,谈谈我的经验 对于动态规划,春招秋招时好多题都会用到动态...
程序员一般通过什么途径接私活?
二哥,你好,我想知道一般程序猿都如何接私活,我也想接,能告诉我一些方法吗? 上面是一个读者“烦不烦”问我的一个问题。其实不止是“烦不烦”,还有很多读者问过我类似这样的问题。 我接的私活不算多,挣到的钱也没有多少,加起来不到 20W。说实话,这个数目说出来我是有点心虚的,毕竟太少了,大家轻喷。但我想,恰好配得上“一般程序员”这个称号啊。毕竟苍蝇再小也是肉,我也算是有经验的人了。 唾弃接私活、做外...
字节跳动面试官这样问消息队列:分布式事务、重复消费、顺序消费,我整理了一下
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图、个人联系方式和人才交流群,欢迎Star和完善 前言 消息队列在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在消息队列的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸...
如何安装 IntelliJ IDEA 最新版本——详细教程
IntelliJ IDEA 简称 IDEA,被业界公认为最好的 Java 集成开发工具,尤其在智能代码助手、代码自动提示、代码重构、代码版本管理(Git、SVN、Maven)、单元测试、代码分析等方面有着亮眼的发挥。IDEA 产于捷克,开发人员以严谨著称的东欧程序员为主。IDEA 分为社区版和付费版两个版本。 我呢,一直是 Eclipse 的忠实粉丝,差不多十年的老用户了。很早就接触到了 IDEA...
面试还搞不懂redis,快看看这40道面试题(含答案和思维导图)
Redis 面试题 1、什么是 Redis?. 2、Redis 的数据类型? 3、使用 Redis 有哪些好处? 4、Redis 相比 Memcached 有哪些优势? 5、Memcache 与 Redis 的区别都有哪些? 6、Redis 是单进程单线程的? 7、一个字符串类型的值能存储最大容量是多少? 8、Redis 的持久化机制是什么?各自的优缺点? 9、Redis 常见性...
大学四年自学走来,这些珍藏的「实用工具/学习网站」我全贡献出来了
知乎高赞:文中列举了互联网一线大厂程序员都在用的工具集合,涉及面非常广,小白和老手都可以进来看看,或许有新收获。
为什么要推荐大家学习字节码?
配套视频: 为什么推荐大家学习Java字节码 https://www.bilibili.com/video/av77600176/ 一、背景 本文主要探讨:为什么要学习 JVM 字节码? 可能很多人会觉得没必要,因为平时开发用不到,而且不学这个也没耽误学习。 但是这里分享一点感悟,即人总是根据自己已经掌握的知识和技能来解决问题的。 这里有个悖论,有时候你觉得有些技术没用恰恰是...
互联网公司的裁员,能玩出多少种花样?
裁员,也是一门学问,可谓博大精深!以下,是互联网公司的裁员的多种方法:-正文开始-135岁+不予续签的理由:千禧一代网感更强。95后不予通过试用期的理由:已婚已育员工更有责任心。2通知接下来要过苦日子,让一部分不肯同甘共苦的员工自己走人,以“兄弟”和“非兄弟”来区别员工。3强制996。员工如果平衡不了工作和家庭,可在离婚或离职里二选一。4不布置任何工作,但下班前必须提交千字工作日报。5不给活干+...
【超详细分析】关于三次握手与四次挥手面试官想考我们什么?
在面试中,三次握手和四次挥手可以说是问的最频繁的一个知识点了,我相信大家也都看过很多关于三次握手与四次挥手的文章,今天的这篇文章,重点是围绕着面试,我们应该掌握哪些比较重要的点,哪些是比较被面试官给问到的,我觉得如果你能把我下面列举的一些点都记住、理解,我想就差不多了。 三次握手 当面试官问你为什么需要有三次握手、三次握手的作用、讲讲三次三次握手的时候,我想很多人会这样回答: 首先很多人会先讲下握...
新程序员七宗罪
当我发表这篇文章《为什么每个工程师都应该开始考虑开发中的分析和编程技能呢?》时,我从未想到它会对读者产生如此积极的影响。那些想要开始探索编程和数据科学领域的人向我寻求建议;还有一些人问我下一篇文章的发布日期;还有许多人询问如何顺利过渡到这个职业。我非常鼓励大家继续分享我在这个旅程的经验,学习,成功和失败,以帮助尽可能多的人过渡到一个充满无数好处和机会的职业生涯。亲爱的读者,谢谢你。 -罗伯特。 ...
活到老,学到老,程序员也该如此
全文共2763字,预计学习时长8分钟 图片来源:Pixabay 此前,“网传阿里巴巴要求尽快实现P8全员35周岁以内”的消息闹得沸沸扬扬。虽然很快被阿里辟谣,但苍蝇不叮无缝的蛋,无蜜不招彩蝶蜂。消息从何而来?真相究竟怎样?我们无从而知。我们只知道一个事实:不知从何时开始,程序猿也被划在了“吃青春饭”行业之列。 饱受“996ICU”摧残后,好不容易“头秃了变强了”,即将步入为“高...
Vue快速实现通用表单验证
本文开篇第一句话,想引用鲁迅先生《祝福》里的一句话,那便是:“我真傻,真的,我单单知道后端整天都是CRUD,我没想到前端整天都是Form表单”。这句话要从哪里说起呢?大概要从最近半个月的“全栈工程师”说起。项目上需要做一个城市配载的功能,顾名思义,就是通过框选和拖拽的方式在地图上完成配载。博主选择了前后端分离的方式,在这个过程中发现:首先,只要有依赖jQuery的组件,譬如Kendoui,即使使用...
2019年Spring Boot面试都问了什么?快看看这22道面试题!
Spring Boot 面试题 1、什么是 Spring Boot? 2、Spring Boot 有哪些优点? 3、什么是 JavaConfig? 4、如何重新加载 Spring Boot 上的更改,而无需重新启动服务器? 5、Spring Boot 中的监视器是什么? 6、如何在 Spring Boot 中禁用 Actuator 端点安全性? 7、如何在自定义端口上运行 Sprin...
【图解】记一次手撕算法面试:字节跳动的面试官把我四连击了
字节跳动这家公司,应该是所有秋招的公司中,对算法最重视的一个了,每次面试基本都会让你手撕算法,今天这篇文章就记录下当时被问到的几个算法题,并且每个算法题我都详细着给出了最优解,下面再现当时的面试场景。看完一定让你有所收获 一、小牛试刀:有效括号 大部分情况下,面试官都会问一个不怎么难的问题,不过你千万别太开心,因为这道题往往可以拓展出更多有难度的问题,或者一道题看起来很简单,但是给出最优解,确实很...
关于裁员几点看法及建议
最近网易裁员事件引起广泛关注,昨天网易针对此事,也发了声明,到底谁对谁错,孰是孰非?我们作为吃瓜观众实在是知之甚少,所以不敢妄下定论。身处软件开发这个行业,近一两年来,对...
面试官:关于Java性能优化,你有什么技巧
通过使用一些辅助性工具来找到程序中的瓶颈,然后就可以对瓶颈部分的代码进行优化。 一般有两种方案:即优化代码或更改设计方法。我们一般会选择后者,因为不去调用以下代码要比调用一些优化的代码更能提高程序的性能。而一个设计良好的程序能够精简代码,从而提高性能。 下面将提供一些在JAVA程序的设计和编码中,为了能够提高JAVA程序的性能,而经常采用的一些方法和技巧。 1.对象的生成和大小的调整。 J...
相关热词 c#判断数字不得为负数 c#帧和帧协议 c#算偏移值 c# 在枚举中 c#6 字符串 插值 c#程序中的占位符标签 c#监听数组变化 c# vlc c#索引实现 c# 局域网广播通信
立即提问