关于web验证码与action的问题

一般来说,验证码校验前端后台都要检验一次。这才比较安全。
可是现在问题是这样的:
我有一个action是提供给自己业务系统调用,同时也提供给别的系统通过httpclient的方式调用。
在这个action里面,是需要做验证码校验的。
在我自己的业务系统,只要客户端浏览器用户输入后台生成的四位数验证码,连同其他要提交的
内容一并提交表单,到达action就能校验验证码。
可是,别的系统是通过httpclient调用我的action,他们怎么传验证码过来呢?他们输入正确的验证码呢?

2个回答

一般来说,验证码校验前端后台都要检验一次。这才比较安全。
错,验证码只能在后端校验。如果前端可以校验,相当于正确答案已经在前端了,用机器就可以识别,那么它就形同虚设了。

Java_boy12
Java_boy12 恩,实际上的确是后台校验。是我表述有问题。但我的问题重点不是这个。。。
接近 5 年之前 回复

你可以发一个token,在你的服务器上建立token和生成的image的对应关系,用户传token和识别后的验证码,你去比对对不对。对于token,要加上有效期判断。

Java_boy12
Java_boy12 现在的情况时这样的,给别人调用的action接口,用户无需再输入验证码,调用方只需要提交其它表单内容就行。换句话说,调用方系统用户看不到我系统提供的验证码图片
接近 5 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Java WEB 连接数据库的登录界面失败?
连接数据库是成功的,但是输入用户名和密码后跳转到错误页面 有几段代码不太确定对不对,请帮忙看一看 //login.jsp ``` <form name="form1" method="post" action="manager.do?action=login"> ``` //struts-config.xml ``` <action name="managerForm" path="/manager" scope="request" type="com.action.Manager" validate="true"> <forward name="managerLoginok" path="/main.jsp" /> <forward name="error" path="/error.jsp" /> </action> ``` //Manager.java ``` package com.action; import org.apache.struts.action.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.actionForm.ManagerForm; import com.dao.ManagerDAO; import javax.servlet.http.HttpSession; public class Manager extends Action { private ManagerDAO managerDAO = null; public Manager() { this.managerDAO = new ManagerDAO(); } public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { String action = request.getParameter("action"); if (action == null || "".equals(action)) { return mapping.findForward("error"); } else if ("login".equals(action)) { return managerLogin(mapping, form, request, response); } request.setAttribute("error", "操作失败!"); return mapping.findForward("error"); } // 管理员身份验证 public ActionForward managerLogin(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { ManagerForm managerForm = (ManagerForm) form; //将接收到的表单信息强制转换成ActionForm类型 managerForm.setAd_name(managerForm.getAd_name()); managerForm.setAd_pwd(managerForm.getAd_pwd()); int ret = managerDAO.checkManager(managerForm); System.out.print("验证结果ret的值:" + ret); if (ret == 1) { //将登录到系统的管理员名称保存到session HttpSession session = request.getSession(); session.setAttribute("manager", managerForm.getAd_name()); return mapping.findForward("managerLoginok"); } else { request.setAttribute("error", "您输入的管理员名称或密码错误!"); return mapping.findForward("error"); } } } ``` //ConnDB.java ``` //执行查询语句 public ResultSet executeQuery(String sql) { try { conn=getConnection(); stmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); rs=stmt.executeQuery(sql); } catch(SQLException ex){ System.err.println(ex.getMessage()); } return rs; } ``` //ManagerDAO.java ``` //管理员身份验证 public int checkManager(ManagerForm managerForm) { int flag = 0; ChStr chStr=new ChStr(); String sql = "SELECT * FROM Ad_info where ad_name='" + chStr.filterStr(managerForm.getAd_name()) + "'"; ResultSet rs = conn.executeQuery(sql); try { if (rs.next()) { String pwd = chStr.filterStr(managerForm.getAd_pwd()); //获取输入的密码并过滤输入字符串中的危险字符 if (pwd.equals(rs.getString(3))) { flag = 1; } else { flag = 0; } }else{ flag = 0; } } catch (SQLException ex) { flag = 0; }finally{ conn.close(); } return flag; } ``` 大概应该是这几段代码的原因,但是不清楚应该怎么修改,请帮忙看一下
验证码乱码000000急求解决
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@include file="/WEB-INF/jsp/jspplugin.jsp"%> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="Keywords" content=""> <meta name="description" content=" "> <meta name="renderer" content="webkit"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta http-equiv="Cache-Control" content="no-cache"> <meta http-equiv="Pragma" content="no-cache"> <meta name="viewport" content="width=375,minimum-scale=0.4,maximum-scale=2,user-scalable=no"> <title>注册</title> <link rel="stylesheet" href="<%=path%>/static/css/base.css"> <link rel="stylesheet" href="<%=path%>/static/css/login/register.css"> <link rel="stylesheet" href="<%=path%>/static/css/tooltips.css"> <style> input::-webkit-outer-spin-button, input::-webkit-inner-spin-button { -webkit-appearance: none; } input[type="number"]{ -moz-appearance: textfield; } </style> </head> <body> <div class="main"> <form id="register" action="<%=path%>/hfive/registerMsg" method="post"> <input type="number" placeholder="请输入手机号码" maxlength="11" name="mobile_num" id="mobile_num"><i onclick="javascript:$('#mobile_num').val('');"></i> <div class="line" id="line"></div> <input type="text" placeholder="请输入验证码" maxlength="6" id="validateCode"> <img src="<%=path%>/hfive/getValidateCode" alt="" onclick="this.src='<%=path%>/hfive/getValidateCode?'+Math.random();" id="getValidateCode"> <input type="hidden" name="recommend_user_id" value="${recommend_user_id}" readonly="readonly"> </form> </div> <div class="tip_error hide" id="tip_error"> <i></i>请输入正确的手机号 </div> <div class="ac"> <button id="next" >下一步</button> </div> </body> <script src="<%=path%>/static/js/jquery-3.0.0.min.js"></script> <script src="<%=path%>/static/js/public_login.js"></script> <script> $("#next").click(function(){ var mobile=$("#mobile_num").val(); var vCode=$("#validateCode").val(); if(!isCorrectPhone(mobile)) { $("#tip_error").removeClass("hide"); $("#tip_error").html('<i></i>请输入正确的手机号!'); $("#mobile_num").focus(); return false; } if(mobile_num(mobile)){ if(validateCode(vCode)){ $("#register").submit(); }else{ $("#tip_error").removeClass("hide"); $("#tip_error").html('<i></i>请输入正确验证码!'); $("#validateCode").focus(); return false; } }else{ $("#tip_error").removeClass("hide"); $("#tip_error").html('<i></i>手机号已注册!'); $("#mobile_num").focus(); return false; } }); function validateCode(validateCode) { var result=""; $.ajax({ type: 'POST', url: "<%=path%>/hfive/checkStrCode", data: {code:validateCode}, dataType: "json", async: false, success: function (data) { result=data; }, error:function (data) { result=data; } }); if(result=="success"){ return true; } if(result=="error"){ $("#validateCode").val(""); return false; } } function mobile_num(mobile_num) { var result=""; $.ajax({ type: 'POST', url: "<%=path%>/hfive/checkUserPhone", data: {phone: mobile_num}, dataType: "json", async: false, success: function (data) { result=data; }, error:function (data) { result=data; } }); if(result=="success"){ $("#mobile_num").val(""); return false; } if(result=="error"){ return true; } } </script> </html> 代码如上,如果去掉直接跳转可以?,有偿回答。谢了,急求
web中在调用两个接口(有优先级)时,怎样将action中优先级高的参数返回?
具体问题:是进行交易查询时,共5个入参,先调用验证接口(使用两个入参),在响应码为“1”的情况下调用查询接口,在获取查询结果的值是通过在html中使用ajax(ajax是写在js的function中的),现在我不知道的是当验证接口的响应码为“0”时怎样返回这个值,并在html中获取?不知道在action中代码怎么敲以及html中这是第一次写这方面的代码,对ajax等都不了解,希望可以得到解决,在下多谢了。 action中: public void abcAct(String ,String ,String ,String ,String ,httpresquset,httpresponse) { //调用验证接口 //获取返回值rescode字符串类型 if("1".equal(rescode)) { //调用查询接口 } else { ?????????????//这里不会 } html中: $.ajax({ ... ... ... success:function(data){ }//这里是获取查询返回的数据 }) 不知道怎么将验证接口的响应码加到这里? 代码记得不全,大体是这样了。
Ext与Struts整合,Ext的验证码生成Web.xml配置,一处,出错
<span style="color: yellow">&nbsp;&nbsp;&nbsp; &lt;filter&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;filter-name&gt;struts2&lt;/filter-name&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;filter-class&gt;org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter&lt;/filter-class&gt; <br />&nbsp;&nbsp;&nbsp; &lt;/filter&gt; <br />&nbsp;&nbsp;&nbsp; &lt;filter-mapping&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;filter-name&gt;struts2&lt;/filter-name&gt; <br /> &lt;url-pattern&gt;/*&lt;/url-pattern&gt; <br /> &lt;/filter-mapping&gt; </span> <br /> <br /> &lt;servlet&gt; <br /> &lt;servlet-name&gt;validationcodeServlet&lt;/servlet-name&gt; <br /> &lt;servlet-class&gt; <br /> com.morik.util.ValidationCodeServlet&lt;/servlet-class&gt; <br /> &lt;/servlet&gt; <br /> &lt;servlet-mapping&gt; <br /> &lt;servlet-name&gt;validationcodeServlet&lt;/servlet-name&gt; <br /> &lt;url-pattern&gt;/IMG.action&lt;/url-pattern&gt; <br /> &lt;/servlet-mapping&gt; <br /> <br /> <br />两种不同颜色的出错了,是不是冲突了,&lt;filter-name&gt;与&lt;servlet-name&gt;不会是一个意思,要写到一起吧,前辈们指点一下
Struts web程序登录问题
login.jsp <form name="form1" method="post" action="user.do?action=login"> User.java public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { String action = request.getParameter("action"); System.out.println("获取的查询字符串:" + action); if (action == null || "".equals(action)) { return mapping.findForward("error"); } else if ("login".equals(action)) { return userLogin(mapping, form, request, response); } request.setAttribute("error", "操作失败!"); return mapping.findForward("error"); } //用户登录验证 public ActionForward userLogin(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { UserForm userForm = (UserForm) form; userForm.setName(userForm.getName()); userForm.setPwd(userForm.getPwd()); int ret = userDAO.checkUser(userForm); System.out.print("验证结果ret的值:" + ret); if (ret == 1) { HttpSession session = request.getSession(); session.setAttribute("user", userForm.getName()); return mapping.findForward("userLoginok"); } else { request.setAttribute("error", "您输入的账号或密码错误!"); return mapping.findForward("error"); } } } UserDAO.java public int checkUser(UserForm userForm) { int flag = 0; ChStr chStr=new ChStr(); String sql = "SELECT * FROM tb_user where name='" + chStr.filterStr(userForm.getName()) + "'"; ResultSet rs = conn.executeQuery(sql); try { if (rs.next()) { String pwd = chStr.filterStr(userForm.getPwd()); //获取输入的密码并过滤输入字符串中的危险字符 if (pwd.equals(rs.getString(3))) { //3代表第三列(pwd) flag = 1; } else { flag = 0; } }else{ flag = 0; } } catch (SQLException ex) { flag = 0; }finally{ conn.close(); } return flag; } UserForm.java package com.actionForm; import org.apache.struts.action.ActionForm; public class UserForm extends ActionForm { private Integer id=new Integer(-1); private String name=""; private String pwd=""; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public void setPwd(String pwd) { this.pwd = pwd; } public void setName(String name) { this.name = name; } public String getName() { return name; } public String getPwd() { return pwd; } } struts-config.xml <action name="userForm" path="/user" scope="request" type="com.action.User" validate="true"> <forward name="userLoginok" path="/main.jsp" /> 为什么显示: HTTP Status 404 - Invalid path was requested type Status report message Invalid path was requested description The requested resource is not available. Apache Tomcat/7.0.57
window上的web迁移到linux下登录不了
centos 7.2,jdk1.7,tomcat7,将windows的服务迁移到该linux下,登录时后台报用户名密码为null,log输出可以判定进入后台的action了,但是前台的登录名、密码没传过来【前台页面用ajax的post请求,页面有用户名、密码不为空的js验证--且登录时没报该js验证的提示错误】 注意:服务器防火墙暂时关闭了、chown、chmod为了777,目录符也调整过来了 -------------大神们帮忙看看这可能是什么问题
开发web管理系统如何利用阿里企业邮箱登录
一个内部系统,登录时用公司的阿里企业邮箱帐号密码登录,类似于第三方登录,但是阿里企业邮箱好像没有提供接口。如何去进行帐号密码验证。尝试过利用阿里企业邮箱登录的action,但是都是同步的。有人指导下该怎么实现吗?
在web.xml版本为3.0且isELIgnored="false"的情况下,EL表达式仍未正常显示于jsp上。(跪求大佬帮忙)
**1.事情经过 ** 起初我在写一个注册的jsp,然后想通过el回显数据。写好之后,在浏览器里发现可以回显,然后写了个验证码,想看下验证码的情况,结果就发现没有回显数据。 我上网查了之后说,是web.xml版本过低,要设置isELIgnored="false",我在jsp里面设置了,不行,在web.xml里面设置了初始值,不行。我的web.xml是3.0的。 **2.代码** jsp部分代码 <form action="<c:url value="/StudentServlet"/>" method="post"> <input type="hidden" name="method" value="login"> ${requestScope.loginmsg }<br/> 学号:<input type="text" name="studentid" value="${requestScope.student.studentid }"/><br/> 密码:<input type="password" name="password" value="${requestScope.student.password }"/><br/> 验证码:<input type="text" name="verifycode" /><br/> <input type="submit" value="登录"> </form> servlet部分代码 try { student = studentservice.login(s); request.setAttribute("student", student); return "f:/studentjsps/jiemian/main.jsp"; } catch (loginException e) { request.setAttribute("student", s); request.setAttribute("loginmsg", e.getMessage()); return "r:/studentjsps/login.jsp"; } web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
求大神帮我看看web中的这个问题
在表单提交了,就会弹出这样一些东西,说是空指针异常,但具体是哪里我并不知道,烦请大神们帮我看看。 HTTP Status 500 - java.lang.NullPointerException type Exception report message java.lang.NullPointerException description The server encountered an internal error that prevented it from fulfilling this request. exception org.apache.jasper.JasperException: java.lang.NullPointerException org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:555) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:476) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340) javax.servlet.http.HttpServlet.service(HttpServlet.java:729) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) root cause java.lang.NullPointerException org.apache.jsp.checked_jsp._jspService(checked_jsp.java:127) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) javax.servlet.http.HttpServlet.service(HttpServlet.java:729) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:438) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340) javax.servlet.http.HttpServlet.service(HttpServlet.java:729) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) note The full stack trace of the root cause is available in the Apache Tomcat/8.0.28 logs. 表单处理页面代码及表单代码: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>验证页面</title> </head> <body> <% String name = (String) request.getParameter("usernaem"); String password = (String) request.getParameter("password"); String repassword = (String) request.getParameter("repassword"); String sex = (String) request.getParameter("sex"); String work = (String) request.getParameter("work"); String[] love = (String[]) request.getParameterValues("love"); String show = (String) request.getParameter("show"); String strLove = ""; for (int i = 0; i < love.length; i++) { if(strLove.trim().equals("")){ strLove = strLove + "'" + love[i].toString() + "'"; }else{ strLove=strLove+","+love[i].toString()+"'"; } } if(strLove.trim().substring(0,strLove.trim().length()).equals(",")){ strLove=strLove.trim().substring(0,strLove.trim().length()-1); } %> <font size="4" color="blue">您的注册信息是</font><br> 用户名:<%=name%><br> 密码:<%=password %><br> 确认密码:<%=repassword %><br> 性别:<%=sex %><br> 职业:<%=work %><br> 爱好:<%=strLove %><br> 个人说明:<%=show %><br> </body> </html> _____________________________________________________ <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>用户注册</title> </head> <body bgcolor=#ffaa56> <!--center标签的作用是使在它之内写的信息全部居中显示 --> <center> <form action="checked.jsp" method="post"> <table> <!--注册用户名信息 --> <tr> <td align="right">用户名:</td> <td align="left"> <!-- 输入文本框 --> <input type="text" name="username" /> </td> </tr> <!--注册密码信息 --> <tr> <td align="right">密码:</td> <td align="left"><input type="password" name="password"> </td> </tr> <tr> <td align="right">确认密码:</td> <td align="left"><input type="password" name="repassword"> </td> </tr> <!-- 注册性别信息 --> <tr> <td align="right">性别:</td> <td align="left"><input type="radio" name="sex" value="male" checked />男 <input type="radio" name="sex" value="female" />女</td> </tr> <!--注册职业信息 --> <tr> <td align="right">职业:</td> <td align="left"> <select size="1" name="work"> <option selected="selected">学生</option> <option>职员</option> <option>经理</option> <option>军人</option> <option>自由人</option> </select> </td> </tr> <tr> <td align="right">个人爱好: </td> <td align="left"> <input type="checkbox" name="love1" value="" />电脑网络 <input type="checkbox" name="love2" value="" />影视娱乐 <input type="checkbox" name="love3" value="" />棋牌娱乐 <br/> <input type="checkbox" name="love4" value="" />读书读报 <input type="checkbox" name="love5" value="" />美酒佳肴 <input type="checkbox" name="love6" value="" />绘画书法 </td> </tr> <tr> <td align="right"> 个人说明: </td> <td align="left"> <textarea name="show" rows="15" cols="40"></textarea> </td> </tr> <tr> <td align="right"> <input type="submit"value="提交"/> </td align="left"> <td> <input type="reset"value="重置"/> </td> </tr> </table> </form> </center> </body> </html> --------------------------------------------------------------------------------
如何通过DWR框架调用struts2中action中的方法
RT ,谢谢各位了! 我用 <create creator="new" javascript="userManager"> <param name="class" value="com.squall.oa.action.UserAction" /> <include method="checkLogin"/> </create> 这样的话不行,报服务器端的错误, 调用service层和dao层的我会使用了,只想看一下一般在项目中如果调用action中的方法的话,应该如何写? [b]问题补充:[/b] 这个是我刚写的一个Class (已经脱离action) public class UserLogin { private String randomCode; private String tag; @Autowired @Qualifier("userService") private IUserService userService; public String checkLogin(User myUser){ if (randomCode.equals(getSession().getAttribute("randomCode").toString())){ if(userService.checkLogin(myUser)){ tag = "success"; } else{ tag = "failed"; } } else{ tag = "noRandNo"; } return tag; } private HttpSession getSession() { return ServletActionContext.getRequest().getSession(); } } 然后我去配置dwr.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://getahead.org/dwr/dwr20.dtd"> <dwr> <allow> <convert converter="bean" match="com.squall.oa.model.User" javascript="myUser"/> <create creator="new" javascript="userManager"> <param name="class" value="com.squall.oa.dwr.UserLogin"/> <include method="checkLogin"/> </create> </allow> </dwr> 下面是JSP页面的代码: function validateUser(){ var username,password,result; var myUser = {}; username = $("uname").value; password = $("upass").value; myUser.u_name = username; myUser.u_pass = password; userManager.checkLogin(myUser,callBackLogin) if ("success" == result){ alert('用户名密码正确!'); return true; }else if ("failed" == result){ alert('用户名密码错误!'); return false; }else { alert('验证码错误!'); return false; } } function callBackLogin(data){ alert(data); result = data; } 我其实就是为了多传到dwr中 验证码 字符串, 但是这样写 就报告了如下的错误: [b]a server error has Occured . More information may be available in the console[/b] 但是Console里 什么服务端的异常都没有~ [b]问题补充:[/b] 哦您说的对!~~ 那您看这个问题该如何解决为最佳呢? 我应该如何去设计这个验证码的字段? 把它传进service方法里么? [b]问题补充:[/b] 好的, 我刚才测试了一下 /** * @日期: Aug 21, 2009 * * @作者: 翟立虎 */ package com.squall.oa.dwr; import javax.servlet.http.HttpSession; import org.apache.struts2.ServletActionContext; import com.squall.oa.model.User; import com.squall.oa.service.IUserService; public class UserLogin { private String randomCode; private String tag; // @Autowired // @Qualifier("userService") // private IUserService userService; public String checkLogin(User myUser){ if (randomCode.equals(getSession().getAttribute("randomCode").toString())){ if(1==1){ tag = "success"; } else{ tag = "failed"; } } else{ tag = "noRandNo"; } return tag; } private HttpSession getSession() { return ServletActionContext.getRequest().getSession(); } } 我写了个测试类,如果不使用Session 那么就不会报告那个错误, 如果使用了, 还会出现那个错误 哎,我真是头疼,那我通过什么方法,得到Session,拿到验证码, 而且还不会报错呢? 非常感谢您!! 就差这点儿问题了!~~ [b]问题补充:[/b] 这样做的话,那么前台的JS怎么写传值呢? 我对回调也不是理解很深,谢谢了~~ userManager.checkLogin(myUser,<%=session%>,callBackLogin); 我这样写好像不行~ [b]问题补充:[/b] 我测试过了,还是不行,报刚才的错误~~ 哎,谢谢您了,不行的话 我就绕过这个验证码吧,传到service层里判断算了!~ [b]问题补充:[/b] 谢谢楼上两位详解了!
web登录,怎么在sever层写个方法验证一下呢?
1、我写了一个登录页 <body> <form action="input" method="post"> 登录名称:<input type="text" name="loginname"><br> 登录密码:<input type="text" name="password"><br> <input type="submit" value="确认登录"> </form> </body> 2、从数据库中查出admin的全部数据放到List集合中 public List<Admin_1> get() { Configuration cfg=new Configuration().configure(); ServiceRegistry sr=new StandardServiceRegistryBuilder().applySettings(cfg.getProperties()).build(); SessionFactory sf=cfg.buildSessionFactory(sr); Session se=sf.openSession(); Transaction tra=se.beginTransaction(); //查询数据 String Hql="from Admin_1"; List<Admin_1> rtn=se.createQuery(Hql).list(); //提交事务 tra.commit(); //释放资源 se.close(); sf.close(); return rtn; } 3、怎么在sever层写个方法验证一下呢?
Spring框架入门,tomcat启动成功,但是出现关于上下文加载异常?
这是一个制作登陆页面的小练习,大概长这样 ![图片说明](https://img-ask.csdn.net/upload/201907/20/1563604903_663111.png) **错误信息是在Server startup后立马就出现的**,还没来得及访问index.jsp呢!求指点,谢谢。 web.xml存放在WEB-INF文件夹下 ![图片说明](https://img-ask.csdn.net/upload/201907/20/1563607667_370819.png) ## 错误信息: ``` 七月 20, 2019 3:20:35 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: Server version: Apache Tomcat/8.5.42 七月 20, 2019 3:20:35 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: Server built: Jun 4 2019 20:29:04 UTC 七月 20, 2019 3:20:35 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: Server number: 8.5.42.0 七月 20, 2019 3:20:35 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: OS Name: Windows 10 七月 20, 2019 3:20:35 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: OS Version: 10.0 七月 20, 2019 3:20:35 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: Architecture: amd64 七月 20, 2019 3:20:35 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: Java Home: C:\Program Files\Java\jdk1.8.0_201\jre 七月 20, 2019 3:20:35 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: JVM Version: 1.8.0_201-b09 七月 20, 2019 3:20:35 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: JVM Vendor: Oracle Corporation 七月 20, 2019 3:20:35 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: CATALINA_BASE: D:\eclipse-workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0 七月 20, 2019 3:20:35 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: CATALINA_HOME: D:\apache-tomcat-8.5.42 七月 20, 2019 3:20:35 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: Command line argument: -Dcatalina.base=D:\eclipse-workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0 七月 20, 2019 3:20:35 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: Command line argument: -Dcatalina.home=D:\apache-tomcat-8.5.42 七月 20, 2019 3:20:35 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: Command line argument: -Dwtp.deploy=D:\eclipse-workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps 七月 20, 2019 3:20:35 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: Command line argument: -Djava.endorsed.dirs=D:\apache-tomcat-8.5.42\endorsed 七月 20, 2019 3:20:35 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: Command line argument: -Dfile.encoding=UTF-8 七月 20, 2019 3:20:35 下午 org.apache.catalina.core.AprLifecycleListener lifecycleEvent 信息: Loaded APR based Apache Tomcat Native library [1.2.21] using APR version [1.6.5]. 七月 20, 2019 3:20:35 下午 org.apache.catalina.core.AprLifecycleListener lifecycleEvent 信息: APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true]. 七月 20, 2019 3:20:35 下午 org.apache.catalina.core.AprLifecycleListener lifecycleEvent 信息: APR/OpenSSL configuration: useAprConnector [false], useOpenSSL [true] 七月 20, 2019 3:20:35 下午 org.apache.catalina.core.AprLifecycleListener initializeSSL 信息: OpenSSL successfully initialized [OpenSSL 1.1.1a 20 Nov 2018] 七月 20, 2019 3:20:35 下午 org.apache.coyote.AbstractProtocol init 信息: Initializing ProtocolHandler ["http-nio-8080"] 七月 20, 2019 3:20:36 下午 org.apache.tomcat.util.net.NioSelectorPool getSharedSelector 信息: Using a shared selector for servlet write/read 七月 20, 2019 3:20:36 下午 org.apache.coyote.AbstractProtocol init 信息: Initializing ProtocolHandler ["ajp-nio-8009"] 七月 20, 2019 3:20:36 下午 org.apache.tomcat.util.net.NioSelectorPool getSharedSelector 信息: Using a shared selector for servlet write/read 七月 20, 2019 3:20:36 下午 org.apache.catalina.startup.Catalina load 信息: Initialization processed in 1265 ms 七月 20, 2019 3:20:36 下午 org.apache.catalina.core.StandardService startInternal 信息: Starting service [Catalina] 七月 20, 2019 3:20:36 下午 org.apache.catalina.core.StandardEngine startInternal 信息: Starting Servlet Engine: Apache Tomcat/8.5.42 七月 20, 2019 3:20:39 下午 org.apache.catalina.core.ApplicationContext log 信息: No Spring WebApplicationInitializer types detected on classpath 七月 20, 2019 3:20:39 下午 org.apache.jasper.servlet.TldScanner scanJars 信息: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time. 七月 20, 2019 3:20:39 下午 org.apache.catalina.core.ApplicationContext log 信息: Initializing Spring root WebApplicationContext log4j:WARN No appenders could be found for logger (org.springframework.web.context.ContextLoader). log4j:WARN Please initialize the log4j system properly. log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. 七月 20, 2019 3:20:42 下午 org.apache.catalina.core.StandardContext listenerStart 严重: Exception sending context initialized event to listener instance of class [org.springframework.web.context.ContextLoaderListener] org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'usersService' defined in class path resource [applicationContext.xml]: Error setting property values; nested exception is org.springframework.beans.NotWritablePropertyException: Invalid property 'usersMapper' of bean class [yan.ibbie.service.impl.UsersServiceImpl]: Bean property 'usersMapper' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter? at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1718) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1433) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:592) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:515) at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:845) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:877) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:549) at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:400) at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:291) at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:103) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4770) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5236) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1423) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1413) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748) Caused by: org.springframework.beans.NotWritablePropertyException: Invalid property 'usersMapper' of bean class [yan.ibbie.service.impl.UsersServiceImpl]: Bean property 'usersMapper' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter? at org.springframework.beans.BeanWrapperImpl.createNotWritablePropertyException(BeanWrapperImpl.java:243) at org.springframework.beans.AbstractNestablePropertyAccessor.processLocalProperty(AbstractNestablePropertyAccessor.java:426) at org.springframework.beans.AbstractNestablePropertyAccessor.setPropertyValue(AbstractNestablePropertyAccessor.java:278) at org.springframework.beans.AbstractNestablePropertyAccessor.setPropertyValue(AbstractNestablePropertyAccessor.java:266) at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:97) at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:77) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1714) ... 22 more 七月 20, 2019 3:20:42 下午 org.apache.catalina.core.StandardContext startInternal 严重: One or more listeners failed to start. Full details will be found in the appropriate container log file 七月 20, 2019 3:20:42 下午 org.apache.catalina.core.StandardContext startInternal 严重: Context [/SpringLogin] startup failed due to previous errors 七月 20, 2019 3:20:42 下午 org.apache.catalina.core.ApplicationContext log 信息: Closing Spring root WebApplicationContext 七月 20, 2019 3:20:42 下午 org.apache.catalina.loader.WebappClassLoaderBase clearReferencesJdbc 警告: The web application [SpringLogin] registered the JDBC driver [com.mysql.cj.jdbc.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered. 七月 20, 2019 3:20:42 下午 org.apache.catalina.loader.WebappClassLoaderBase clearReferencesThreads 警告: The web application [SpringLogin] appears to have started a thread named [mysql-cj-abandoned-connection-cleanup] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread: java.lang.Object.wait(Native Method) java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:144) com.mysql.cj.jdbc.AbandonedConnectionCleanupThread.run(AbandonedConnectionCleanupThread.java:85) java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) java.lang.Thread.run(Thread.java:748) 七月 20, 2019 3:20:42 下午 org.apache.coyote.AbstractProtocol start 信息: Starting ProtocolHandler ["http-nio-8080"] 七月 20, 2019 3:20:42 下午 org.apache.coyote.AbstractProtocol start 信息: Starting ProtocolHandler ["ajp-nio-8009"] 七月 20, 2019 3:20:42 下午 org.apache.catalina.startup.Catalina start 信息: Server startup in 5949 ms 七月 20, 2019 3:20:45 下午 org.apache.catalina.loader.WebappClassLoaderBase checkStateForResourceLoading 信息: Illegal access: this web application instance has been stopped already. Could not load []. The following stack trace is thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access. java.lang.IllegalStateException: Illegal access: this web application instance has been stopped already. Could not load []. The following stack trace is thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access. at org.apache.catalina.loader.WebappClassLoaderBase.checkStateForResourceLoading(WebappClassLoaderBase.java:1384) at org.apache.catalina.loader.WebappClassLoaderBase.getResource(WebappClassLoaderBase.java:1034) at com.mysql.cj.jdbc.AbandonedConnectionCleanupThread.checkThreadContextClassLoader(AbandonedConnectionCleanupThread.java:117) at com.mysql.cj.jdbc.AbandonedConnectionCleanupThread.run(AbandonedConnectionCleanupThread.java:84) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748) ``` ## web.xml配置如下: ``` <?xml version="1.0" encoding="UTF-8"?> <web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"> <!-- 设置Spring配置文件路径 --> <!-- 当tomcat加载web.xml时,会把Spring配置文件信息存放到application对象 --> <!-- WebApplicationContext是ApplicationContext的子接口 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <!-- 加载Spring配置文件 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> </web-app> ``` ## applicationContext.xml的Spring配置如下: ``` <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- 数据源封装类 --> <bean id="datasource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/ssm?serverTimezone=GMT%2B8"/> <property name="username" value="root"/> <property name="password" value="147852369"/> </bean> <!-- SqlSessionFactory --> <bean id="factory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="datasource"/> </bean> <!-- 扫描器 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="sqlSessionFactory" ref="factory"/> <property name="basePackage" value="yan.ibbie.mapper"/> </bean> <!-- 创建UsersService的实现类,其中usersMapper是Spring自动创建的bean --> <bean id="usersService" class="yan.ibbie.service.impl.UsersServiceImpl"> <property name="usersMapper" ref="usersMapper"/> </bean> </beans> ``` ## index.jsp页面如下: ``` <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <script type="text/javascript" src="/js/jquery-3.4.1.js"></script> <script type="text/javascript"> $(function(){ $("a").click(function(){ $("img").attr("src","validcode?date="+new Date()); return false; }) }) </script> </head> <body> ${error } <form action="Login" method="post"> 用户名:<input type="text" name="username" /><br> 密码:<input type="password" name="password" /><br> 验证码:<input type="text" size="1" name="code"/><img src="validcode" width="80" height="40"/><a href="">看不清</a><br> <input type="submit" value="登陆" /><input type="reset" value="重置" /> </form> </body> </html> ``` ## 出错的是LoginServlet中一堆aaaaa那行,LoginServlet如下: ``` package yan.ibbie.servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.springframework.context.ApplicationContext; import org.springframework.web.context.support.WebApplicationContextUtils; import yan.ibbie.pojo.Users; import yan.ibbie.service.UsersService; import yan.ibbie.service.impl.UsersServiceImpl; /** * Servlet implementation class LoginServlet */ @WebServlet("/Login") public class LoginServlet extends HttpServlet { private static final long serialVersionUID = 1L; private UsersService usersService; @Override public void init() throws ServletException { System.out.println("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"+getServletContext()); ApplicationContext ac = WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext()); usersService = ac.getBean("usersService",UsersServiceImpl.class); } @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String code = req.getParameter("code"); HttpSession session = req.getSession(); String codeSession = session.getAttribute("validcode").toString(); if (codeSession.equals(code)) { Users users = new Users(); String username = req.getParameter("username"); String password = req.getParameter("password"); users.setUsername(username); users.setPasserword(password); Users user = usersService.login(users); if (user!=null) { resp.sendRedirect("main.jsp"); }else { req.setAttribute("error", "用户名和密码不正确"); req.getRequestDispatcher("index.jsp").forward(req, resp); } }else { req.setAttribute("error", "验证码不正确"); req.getRequestDispatcher("index.jsp").forward(req, resp); } } } ```
tomcat 发布应用程序后的问题 解决后另给100分
我发布了一个项目 在 C:\Program Files\Tomcat 5.5\conf\server.xml 中的配置是这样的 <Service name="Catalina"> <Connector port="80" redirectPort="8443" minSpareThreads="25" connectionTimeout="20000" maxSpareThreads="75" maxThreads="150" maxHttpHeaderSize="8192"> </Connector> <Connector port="8009" redirectPort="8443" protocol="AJP/1.3"> </Connector> <Engine name="Catalina" defaultHost="w1.yingxin186.com"> <Host name="w1.yingxin186.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" mlNamespaceAware="false"/> <Host name="www4.yingxin186.com" appBase="c://web" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> <Context path="" docBase="yingxinTD" workDir="yingxinTD" reloadable="true"/> </Host> <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"/> </Engine> </Service> 这里对配置文件说明一下: port="80" 采用80端口 工程放在 c://web 包中 工程名是 yingxinTD 我配置好后在地址栏中输入 www4.yingxin186.com 就可以访问我的工程了,可以进入工程的登录页面 (yingxinTD 是工程名) 当我输入用户名和密码之后,也可以进入Action中,我们登录不是要使用Session记录用户的状态吗?而我的Action中记录了Session后 它跳转到另一个页面,确取不到Session中的值,我我对比了两个页面它们的Session的Session ID ,结果 ID 是不一样的, 而且我又用 w1.yingxin186.com 登录tomcat服务器主页,输入了用户名和密码也进不了tomcat的管理页面 我不知道这是怎么回事 请各位帮帮忙,多少分我都给了~~ 不胜感激! 在内部网配置了两个NDS 即:w1.yingxin186.com 和 www4.yingxin186.com [b]问题补充:[/b] 我现在把一系列的代码贴出来吧: 好的我现在把一系列的代码贴出来。首先是登录页面,其中有验证码的,验证码是以网页形式生成了一张图片,而验证码页面中就定义了存储验证码数字 下面是验证码生成的JSP页面 <%! Color getRandColor(int fc,int bc){//给定范围获得随机颜色 Random random = new Random(); if(fc>255) fc=255; if(bc>255) bc=255; int r=fc+random.nextInt(bc-fc); int g=fc+random.nextInt(bc-fc); int b=fc+random.nextInt(bc-fc); return new Color(r,g,b); } %> <% //设置页面不缓存 response.setHeader("Pragma","No-cache"); response.setHeader("Cache-Control","no-cache"); response.setDateHeader("Expires", 0); // 在内存中创建图象 int width=60, height=20; BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); // 获取图形上下文 Graphics g = image.getGraphics(); //生成随机类 Random random = new Random(); // 设定背景色 g.setColor(getRandColor(200,250)); g.fillRect(0, 0, width, height); //设定字体 g.setFont(new Font("Times New Roman",Font.PLAIN,18)); //画边框 //g.setColor(new Color()); //g.drawRect(0,0,width-1,height-1); // 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到 g.setColor(getRandColor(160,200)); for (int i=0;i <155;i++) { int x = random.nextInt(width); int y = random.nextInt(height); int xl = random.nextInt(12); int yl = random.nextInt(12); g.drawLine(x,y,x+xl,y+yl); } // 取随机产生的认证码(4位数字) String sRand=""; for (int i=0;i <4;i++){ String rand=String.valueOf(random.nextInt(10)); sRand+=rand; // 将认证码显示到图象中 g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110))); //调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成 g.drawString(rand,13*i+6,16); } // 将认证码存入SESSION session.setAttribute("rand",sRand); //session.setAttribute("myname","xiaoqiang"); // System.out.print("生成的验证码是:"+session.getAttribute("rand")); System.out.println("session id 号是==》"+session.getId()); //我在这里打印出 当前页面里的SessionID // 图象生效 g.dispose(); // 输出图象到页面 ImageIO.write(image, "JPEG", response.getOutputStream()); out.clear(); out = pageContext.pushBody(); %> 下面是登录页面的代码,一些啰嗦的代码我就省了 用户帐号: <html:text property="user_id"> </html:text> 用户密码: <html:password property="user_pwd"> </html:password> 验证码:&nbsp;&nbsp; <input type="text" id="rand" name="rand" value="" size="10"> <img alt="" src="/yingxinTD/pages/show/image.jsp"/> 这里是验证码输出 之后提交到Action String rand = (String)session.getAttribute("rand");//系统生成的验证码 String input = request.getParameter("rand"); //用户输入的验证码 System.out.println(session.getId()); ()); //我在这里打印出 当前的SessionID 现在发现 在Action 中的SessionID 和 验证码生成的JSP页面中的 SessionID 是不一样的 这样那么 (String)session.getAttribute("rand") 获取的验证码字段当然也就为 null 了。 以上这些问题只有在我发布的时候才会这样。 现在回到我关于使用 http://www4.yingxin186.com 来访问工程,如果用这种格式就会ID不同,但如果在这个格式的后面再加上工程名去访问就不会了即: http://www4.yingxin186.com/yingxinTD 这样访问就一切正常 而我要的确不是这样的效果,我想要用户输入 http://www4.yingxin186.com 这个就 能够正常访问,进行操作
spring security3拦截器问题
未登录系统的情况下,第一次访问页面会跳转到登录页面,第二次访问就能够访问 配置如下: ``` <http entry-point-ref="loginAuthenticationEntryPoint" > <!-- UsernamePasswordAuthenticationFilter default-target-url 指定了从登录页面登录后进行跳转的页面 always-use-default-target true表示登录成功后强制跳转 authentication-failure-url 表示验证失败后进入的页面 login-processing-url 设置验证登录验证地址,如果不设置,默认是j_spring_security_check username-parameter,password-parameter 设置登录用户名和密码的请求name,默认:j_username,j_password <form-login login-page="/login" default-target-url="/index" authentication-failure-url="/login?error=1" login-processing-url="/logined" username-parameter="loginUser" password-parameter="password" /> --> <logout logout-success-url="/login" invalidate-session="true" delete-cookies="JSESSIONID"/> <!-- 尝试访问没有权限的页面时跳转的页面 --> <access-denied-handler error-page="/permission" /> <!-- session-fixation-protection session固化保护 none使得 session 固化攻击失效,不会配置 SessionManagementFilter (除非其它的 <session-management> 属性不是默认值) migrateSession当用户经过认证后分配一个新的 session ,它保证原 session 的所有属性移到新 session 中。我们将在后面的章节中讲解,通过基于 bean 的方式如何进行这样的配置。 newSession当用户认证后,建立一个新的 session ,原(未认证时) session 的属性不会进行移到新 session 中来。--> <session-management invalid-session-url="/login" session-authentication-strategy-ref="compositeSessionAuthenticationStrategy" /> <custom-filter position="FORM_LOGIN_FILTER" ref="formloginFilter" /> <custom-filter position="CONCURRENT_SESSION_FILTER" ref="concurrencyFilter" /> <!-- 增加一个filter,这点与 Acegi是不一样的,不能修改默认的filter了, 这个filter位于FILTER_SECURITY_INTERCEPTOR之前 --> <custom-filter before="FILTER_SECURITY_INTERCEPTOR" ref="myFilter" /> </http> <!-- ConcurrentSessionFilter过滤器配置(主要设置账户session过期路径) 并发会话处理包所需要的过滤器。该过滤器具有双重作用。 首先,它会调用sessionregistry.refreshlastrequest为每个请求注册session总是有一个正确的最后更新时间。 第二,它会为每个请求从sessionregistry中获取sessioninformation并且检查session是否已被标记为已过期。 如果它被标记为已过期,配置注销处理程序将被调用(如同logoutfilter),重定向到指定的expiredurl,session失效将导致httpsessiondestroyedevent被触发 通过在web.xml注册httpsessioneventpublisher。 --> <beans:bean id="concurrencyFilter" class="org.springframework.security.web.session.ConcurrentSessionFilter"> <beans:property name="sessionRegistry" ref="sessionRegistry" /> <beans:property name="expiredUrl" value="/login" /> </beans:bean> <!-- 登录过滤器(相当于<form-login/>) --> <beans:bean id="formloginFilter" class="org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter"> <beans:property name="usernameParameter" value="loginUser"></beans:property> <beans:property name="passwordParameter" value="password"></beans:property> <beans:property name="sessionAuthenticationStrategy" ref="compositeSessionAuthenticationStrategy" /> <!--处理登录的action --> <beans:property name="filterProcessesUrl" value="/logined"></beans:property> <!--验证成功后的处理 --> <beans:property name="authenticationSuccessHandler" ref="loginLogAuthenticationSuccessHandler"></beans:property> <!--验证失败后的处理 --> <beans:property name="authenticationFailureHandler" ref="simpleUrlAuthenticationFailureHandler"></beans:property> <beans:property name="authenticationManager" ref="authenticationManager"></beans:property> </beans:bean> <!-- 混合session授权策略 --> <beans:bean id="compositeSessionAuthenticationStrategy" class="org.springframework.security.web.authentication.session.CompositeSessionAuthenticationStrategy"> <beans:constructor-arg> <beans:list> <beans:bean class="org.springframework.security.web.authentication.session.ConcurrentSessionControlAuthenticationStrategy"> <beans:constructor-arg ref="sessionRegistry" /> <beans:property name="maximumSessions" value="1" /> <beans:property name="exceptionIfMaximumExceeded" value="true" /> </beans:bean> <beans:bean class="org.springframework.security.web.authentication.session.SessionFixationProtectionStrategy"> </beans:bean> <beans:bean class="org.springframework.security.web.authentication.session.RegisterSessionAuthenticationStrategy"> <beans:constructor-arg ref="sessionRegistry" /> </beans:bean> </beans:list> </beans:constructor-arg> </beans:bean> <!--SessionRegistry的默认实现,它会在spring应用上下文中监听SessionDestroyedEvents事件 --> <beans:bean id="sessionRegistry" class="org.springframework.security.core.session.SessionRegistryImpl" /> <!-- 登录点 --> <beans:bean id="loginAuthenticationEntryPoint" class="org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint"> <beans:property name="loginFormUrl" value="/login"></beans:property> </beans:bean> <!-- 验证成功后的处理 --> <beans:bean id="loginLogAuthenticationSuccessHandler" class="org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler"> <beans:property name="defaultTargetUrl" value="/index"></beans:property> </beans:bean> <!-- 验证失败后的处理 --> <beans:bean id="simpleUrlAuthenticationFailureHandler" class="org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler"> <!--可以配置相应的跳转方式。属性forwardToDestination为true采用forward false为sendRedirect --> <beans:property name="defaultFailureUrl" value="/login?error=1"></beans:property> </beans:bean> <!-- 一个自定义的filter,必须包含 authenticationManager,accessDecisionManager,securityMetadataSource三个属性, 我们的所有控制将在这三个类中实现,解释详见具体配置 --> <beans:bean id="myFilter" class="com.sanchuan.erp.security.MyFilterSecurityInterceptor"> <beans:property name="authenticationManager" ref="authenticationManager" /> <beans:property name="accessDecisionManager" ref="myAccessDecisionManagerBean" /> <beans:property name="securityMetadataSource" ref="mySecurityMetadataSource" /> </beans:bean> <!-- 验证配置 , 认证管理器,实现用户认证的入口,主要实现UserDetailsService接口即可 --> <authentication-manager alias="authenticationManager"> <authentication-provider user-service-ref="myUserDetailsService"> <!-- <s:password-encoder hash="sha" /> --> </authentication-provider> </authentication-manager> <!-- 项目实现的用户查询服务,将用户信息查询出来 --> <beans:bean id="myUserDetailsService" class="com.sanchuan.erp.security.MyUserDetailService"> <beans:property name="userService" ref="userServiceImpl"></beans:property> <beans:property name="roleService" ref="roleServiceImpl"></beans:property> </beans:bean> <!-- 访问决策器,决定某个用户具有的角色,是否有足够的权限去访问某个资源 --> <beans:bean id="myAccessDecisionManagerBean" class="com.sanchuan.erp.security.MyAccessDecisionManager"> </beans:bean> <!-- 资源源数据定义,将所有的资源和权限对应关系建立起来,即定义某一资源可以被哪些角色访问 --> <beans:bean id="mySecurityMetadataSource" class="com.sanchuan.erp.security.MyInvocationSecurityMetadataSourceService"> </beans:bean> ```
做用户名验证离焦事件blur触发不了
我是java新手,最近在做一个web项目,鼠标离焦后,事件没有触发,请问这是怎么回事?求助大神 ``` <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>注册</title> <link rel="stylesheet" type="text/css" href="css/common.css"> <link rel="stylesheet" href="css/register.css"> <!--导入jquery--> <script src="js/jquery-3.3.1.js"></script> <script> function checkUsername(){ var username=$("#username").val(); var reg_username=/^\w{8,20}$/; var flag=reg_username.test(username); if(flag){ $("#username").css("border"); }else{ $("#username").css("border","1px solid red"); } return flag; } $(function(){ $("#registerForm").submit(function () { return checkUsername(); }); $("#username").blur(checkUsername()); }); </script> </head> <body> <!--引入头部--> <div id="header"></div> <!-- 头部 end --> <div class="rg_layout"> <div class="rg_form clearfix"> <div class="rg_form_left"> <p>新用户注册</p> <p>USER REGISTER</p> </div> <div class="rg_form_center"> <!--注册表单--> <form id="registerForm" action="user"> <!--提交处理请求的标识符--> <input type="hidden" name="action" value="register"> <table style="margin-top: 25px;"> <tr> <td class="td_left"> <label for="username">用户名</label> </td> <td class="td_right"> <input type="text" id="username" name="username" placeholder="请输入账号"> </td> </tr> <tr> <td class="td_left"> <label for="password">密码</label> </td> <td class="td_right"> <input type="text" id="password" name="password" placeholder="请输入密码"> </td> </tr> <tr> <td class="td_left"> <label for="email">Email</label> </td> <td class="td_right"> <input type="text" id="email" name="email" placeholder="请输入Email"> </td> </tr> <tr> <td class="td_left"> <label for="name">姓名</label> </td> <td class="td_right"> <input type="text" id="name" name="name" placeholder="请输入真实姓名"> </td> </tr> <tr> <td class="td_left"> <label for="telephone">手机号</label> </td> <td class="td_right"> <input type="text" id="telephone" name="telephone" placeholder="请输入您的手机号"> </td> </tr> <tr> <td class="td_left"> <label for="sex">性别</label> </td> <td class="td_right gender"> <input type="radio" id="sex" name="sex" value="男" checked> 男 <input type="radio" name="sex" value="女"> 女 </td> </tr> <tr> <td class="td_left"> <label for="birthday">出生日期</label> </td> <td class="td_right"> <input type="date" id="birthday" name="birthday" placeholder="年/月/日"> </td> </tr> <tr> <td class="td_left"> <label for="check">验证码</label> </td> <td class="td_right check"> <input type="text" id="check" name="check" class="check"> <img src="checkCode" height="32px" alt="" onclick="changeCheckCode(this)"> <script type="text/javascript"> //图片点击事件 function changeCheckCode(img) { img.src="checkCode?"+new Date().getTime(); } </script> </td> </tr> <tr> <td class="td_left"> </td> <td class="td_right check"> <input type="submit" class="submit" value="注册"> <span id="msg" style="color: red;"></span> </td> </tr> </table> </form> </div> <div class="rg_form_right"> <p> 已有账号? <a href="#">立即登录</a> </p> </div> </div> </div> <!--引入尾部--> <div id="footer"></div> <!--导入布局js,共享header和footer--> <script type="text/javascript" src="js/include.js"></script> </body> </html> ```
我最近写了个留言表 但是出现了找不到memberAction ?
1,这个是struts 配置 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <constant name="struts.objectFactory" value="spring" /> <constant name="struts.devMode" value="false"></constant> <package name="member" extends="struts-default" namespace="/member"> <action name="register" class="memberAction" method="registe"> <result name="success">/login.jsp</result> <result name="fail">/register.jsp</result> <result name="input">/register.jsp</result> </action> <action name="login" class="memberAction" method="login"> <result name="success" type="redirectAction"> <param name="namespace">/message</param> <param name="actionName">liuYanList</param> </result> <result name="fail">/login.jsp</result> </action> </package> <package name="message" extends="json-default" namespace="/message"> <action name="publish" class="messageAction" method="publish"> <!-- 这个action 成功后 是把数据库里面的留言抓去 放到这个成功页面 --> <result name="success" type="redirectAction"> <param name="actionName">liuYanList</param> </result> <!-- 失败还是返回这个页面 用异步提示 发送失败 所以选用json 所以这个包应该继承的是json-default --> <result name="fail" type="json"> <!-- 指定json字符串 根对象是谁 这个需要根据自己写的类来设计 --> <param name="root">errorMap</param> </result> </action> <action name="liuYanList" class="messageAction" method="liuYanList"> <result name="success">/WEB-INF/pages/message.jsp</result> </action> </package> <package name="verify" extends="json-default" namespace="/verify"> <!-- 因为我们只是生成一个校验码 所以 不用写方法 只需要excute就可以 --> <action name="code" class="verifyCodeAction"> <!-- 因为我们用的是流传输 验证码 所以 result 的类型应该是stream --> <result name="success" type="stream"> <param name="inputName">inputStream</param> </result> </action> <action name="check" class="verifyCodeAction" method="check"> <result name="success" type="json"> <param name="root">checkResult</param> </result> </action> </package> 2, 这个是登录 private static final long serialVersionUID = 7270980727777540053L; private Member member; private String rePassword; private String verifyCode;//通过属性驱动来收集页面的验证码 //保存收集到页面的数据 通过service来保存 所以就要注入一个service private MemberService memberService; public String login() { //根据一个指定的username 从数据库中 获取一个Member 对象 Member m = memberService.getMember(member.getUsername()); if (m != null) { //因为数据库里面保存的是我们加过密之后的密码 所以我们要对用户登录时输入的密码也进行加密 //这样才能比较 两个密码 String inputPassword = StringUtil.md532(member.getPassword()); if (m.getPassword().equals(inputPassword) ){ //信息完全正确 就需要把用户的信息存入session中 这样就不需要重复登录 //通过 Struts2 来访问 HttpSession 把member 的信息存放到session中 //m 是来自数据库的 有主键 id ActionContext.getContext().getSession().put("member", m); return "success"; }else { //密码错误 } }else { //输入的用户名不存在 } return "fail"; } 这个是登录页面 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="/struts-tags" prefix="s" %> <html> <head> <title>用户登录页面</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <!-- 引入 CSS 文件--> <link href="${pageContext.request.contextPath }/css/style.css" type="text/css" rel="stylesheet" /> <!-- 引入JavaScript 库 --> <script src="${pageContext.request.contextPath}/jslibs/jquery-1.11.3.min.js" type="text/javascript"></script> <script type="text/javascript"> jQuery(function () { jQuery("#refresh").click(function(){ jQuery("#verify_code").attr("src","${pageContext.request.contextPath }/verify/code?suibian" + new Date()) }); jQuery("#verify_code_input").blur(function(){ //获得输入框的值 和 服务器里面的验证码进行对比 var input = jQuery("#verify_code_input").val(); //发送到服务器端 和 服务器里面的验证码进行对比 var url = "${pageContext.request.contextPath }/verify/check"; var settings={ "url":url, "type":"POST", "data":{"inputCode" : input}, "dataType":"json", "success":function( responseData ){ jQuery("#verify_code_error").html( responseData ); } }; jQuery.ajax(settings); }); }); </script> </head> <body topMargin="10"> <center> <div id="append_parent"></div> <table cellSpacing="6" cellPadding="2" width="100%" border="0"> <tbody> <tr> <td> <table class="guide" cellSpacing="0" cellPadding="0" width="100%" border="0"> <tbody> <tr> <td> <a href='index.jsp'>主页</a>&nbsp;/&nbsp; <a href='#'>留言板(malastruts)</a>&nbsp;/&nbsp;用户登录 </td> </tr> </tbody> </table> <h4 align="center">${ msg }</h4> <!--<form id="settings" action="register_action.jsp" method="post"> --> <form id="settings" action="${pageContext.request.contextPath}/member/login" method="post"> <table class="tableborder" cellSpacing="0" cellPadding="0" width="100%" border="0"> <tbody> <tr class="header"> <td colSpan="3"> 登录系统 </td> </tr> </tbody> <tbody> <tr> <td class="altbg1" width="20%"> <b>用户名称 </b> </td> <td class="altbg2" valign="middle" width="20%"> <input type="text" name="username" value="${member.username}" /> </td> <td> <span style="color: red"> <s:fielderror fieldName="username"></s:fielderror> </span> </td> </tr> <tr> <td class="altbg1" width="20%"> <b>用户密码 </b> </td> <td class="altbg2"> <input type="password" name="password"/> </td> <td> <span style="color: red"> <s:fielderror fieldName="password"></s:fielderror> </span> </td> </tr> <tr> <td class="altbg1" width="20%"> <b>验证码 </b> </td> <td class="altbg2"> <input type="text" name="verifyCode" id="verify_code_input" /> </td> <td> <!-- 我们用jquery 给这个验证码绑定一个点击事件 实现异步的验证码刷新 --> <img src="${pageContext.request.contextPath}/verify/code" id="verify_code"> <a href="javascript: " id="refresh">输入正确</a> <span style="color: red" id="verify_code_error"> <s:fielderror fieldName="verifyCode"></s:fielderror> </span> </td> </tr> </tbody> </table> <br /> <center> <input class="button" type="reset" value="重置" name="settingsubmit" /> <input class="button" type="submit" value="提交" name="settingsubmit" /> </center> </form> </td> </tr> </tbody> </table> <hr> </center> </body> </html> 3,Spring 配置 <bean id="memberAction" class="message.action.MemberAction" p:memberService-ref="memberService" scope="singleton"/> <bean id="messageAction" class="message.action.MessageAction" p:messageService-ref="messageService" scope="singleton"/> <bean id="verifyCodeAction" class="message.action.VerifyCodeAction" scope="singleton"/> 4,这个是Member 类 public class Member implements Serializable { private static final long serialVersionUID = 1L; private String username; private String password; private Integer id; //维护 Member 到 Message 一对多的关系 private Set<Message> messages;//当前会员留言 private Set<Reply> replies;//当前会员回复 public Set<Reply> getReplies() { return replies; } public void setReplies(Set<Reply> replies) { this.replies = replies; } public Set<Message> getMessages() { return messages; } public void setMessages(Set<Message> messages) { this.messages = messages; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } } 启动时没有出现任何异常 就是登录的时候 会出现这个异常 type Exception report message Invalid action class configuration that references an unknown class named [memberAction] description The server encountered an internal error that prevented it from fulfilling this request. exception java.lang.RuntimeException: Invalid action class configuration that references an unknown class named [memberAction] root cause java.lang.ClassNotFoundException: memberAction
注入资源依赖关系失败
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'paiMaiSerDaoImpl': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.dlsp.service.PaiMaiSerDao] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@javax.annotation.Resource(shareable=true, lookup=, name=, description=, authenticationType=CONTAINER, type=class java.lang.Object, mappedName=)} at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessPropertyValues(CommonAnnotationBeanPostProcessor.java:306) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1122) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:389) at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:294) at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4842) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5303) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1407) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1397) at java.util.concurrent.FutureTask.run(Unknown Source) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source) Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.dlsp.service.PaiMaiSerDao] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@javax.annotation.Resource(shareable=true, lookup=, name=, description=, authenticationType=CONTAINER, type=class java.lang.Object, mappedName=)} at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:986) at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:856) at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:768) at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:438) at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:416) at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:550) at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:150) at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87) at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessPropertyValues(CommonAnnotationBeanPostProcessor.java:303) ... 22 more 二月 24, 2017 11:03:25 上午 org.apache.catalina.core.StandardContext startInternal 严重: One or more listeners failed to start. Full details will be found in the appropriate container log file 二月 24, 2017 11:03:25 上午 org.apache.catalina.core.StandardContext startInternal 严重: Context [/ZuoYeXiangMu_3] startup failed due to previous errors 二月 24, 2017 11:03:25 上午 org.apache.catalina.core.ApplicationContext log 信息: Closing Spring root WebApplicationContext 二月 24, 2017 11:03:25 上午 org.apache.catalina.loader.WebappClassLoaderBase clearReferencesJdbc 警告: The web application [ZuoYeXiangMu_3] registered the JDBC driver [oracle.jdbc.OracleDriver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered. 二月 24, 2017 11:03:25 上午 org.apache.catalina.loader.WebappClassLoaderBase checkThreadLocalMapForLeaks 严重: The web application [ZuoYeXiangMu_3] created a ThreadLocal with key of type [java.lang.ThreadLocal] (value [java.lang.ThreadLocal@41376b06]) and a value of type [java.lang.Class] (value [class oracle.sql.AnyDataFactory]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak. 二月 24, 2017 11:03:25 上午 org.apache.catalina.loader.WebappClassLoaderBase checkThreadLocalMapForLeaks 严重: The web application [ZuoYeXiangMu_3] created a ThreadLocal with key of type [java.lang.ThreadLocal] (value [java.lang.ThreadLocal@7b5d1ae6]) and a value of type [java.lang.Class] (value [class oracle.sql.TypeDescriptorFactory]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak. 二月 24, 2017 11:03:25 上午 org.apache.coyote.AbstractProtocol start 信息: Starting ProtocolHandler ["http-nio-8080"] 二月 24, 2017 11:03:25 上午 org.apache.coyote.AbstractProtocol start 信息: Starting ProtocolHandler ["ajp-nio-8009"] 二月 24, 2017 11:03:25 上午 org.apache.catalina.startup.Catalina start 信息: Server startup in 4212 ms package com.dlsp.controller; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.IOException; import java.io.PrintWriter; import java.util.List; import java.util.Random; import javax.annotation.Resource; import javax.imageio.ImageIO; import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import javax.servlet.jsp.PageContext; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import com.dlsp.dao.UserLoginDao; import com.dlsp.domain.Manage; import com.dlsp.domain.Saleinfo; import com.dlsp.service.PaiMaiSerDao; import com.dlsp.service.UserLoginSerDao; import com.dlsp.service.impl.PaiMaiSerDaoImpl; import com.sun.java.swing.plaf.motif.resources.motif; import com.sun.org.apache.regexp.internal.recompile; @Controller public class PaiMaicontroler { @Resource private PaiMaiSerDao paimai; //获得随机颜色 Color getRandColor(int fc, int bc){ Random random = new Random(); if (fc > 255) fc = 255; if (bc > 255) bc = 255; int r = fc + random.nextInt(bc - fc); int g = fc + random.nextInt(bc - fc); int b = fc + random.nextInt(bc - fc); return new Color(r, g, b); } //验证码 @RequestMapping("yanzheng.action") public void yanzhengn(HttpServletRequest request,HttpServletResponse response,HttpSession session){ //设置页面不缓存 session=request.getSession(); response.setHeader("Pragma", "No-cache"); response.setHeader("Cache-Control", "no-cache"); response.setDateHeader("Expires", 0); // 在内存中创建图象 int width = 60, height = 20; BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); // 获取图形上下文 Graphics g = image.getGraphics(); //生成随机类 Random random = new Random(); // 设定背景色 g.setColor(getRandColor(200, 250)); g.fillRect(0, 0, width, height); //设定字体 g.setFont(new Font("Times New Roman", Font.PLAIN, 18)); //画边框 //g.setColor(new Color()); //g.drawRect(0,0,width-1,height-1); // 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到 g.setColor(getRandColor(160, 200)); for (int i = 0; i < 155; i++) { int x = random.nextInt(width); int y = random.nextInt(height); int xl = random.nextInt(12); int yl = random.nextInt(12); g.drawLine(x, y, x + xl, y + yl); } // 取随机产生的认证码(4位数字) String sRand = ""; for (int i = 0; i < 4; i++) { String rand = String.valueOf(random.nextInt(10)); sRand += rand; // 将认证码显示到图象中 g.setColor(new Color(20 + random.nextInt(110), 20 + random .nextInt(110), 20 + random.nextInt(110)));//调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成 g.drawString(rand, 13 * i + 6, 16); } // 将认证码存入SESSION session.setAttribute("numrand", sRand); // 图象生效 g.dispose(); // 输出图象到页面 try { ImageIO.write(image, "JPEG", response.getOutputStream()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } //out.clear(); //out = PageContext.pushBody(); } @RequestMapping("saleinfo.action") public String getsuoyou(Model mo) { List<Saleinfo> jihe = paimai.getall(); mo.addAttribute("jihe", jihe); return "saleinfo"; } @RequestMapping("addinfo.action") public String addinfo(Saleinfo sale, Model mo) { if (paimai.insertsale(sale) > 0) { mo.addAttribute("cheng", 1); } else { mo.addAttribute("cheng", 2); } return "redirect:saleinfo.action"; } @RequestMapping("update.action") public String updateinfo(Saleinfo sale,Model mo){ if (paimai.updatedale(sale)>0) { mo.addAttribute("gai", 1); }else{ mo.addAttribute("gai", 2); } return "redirect:saleinfo.action"; } @RequestMapping("sahn.action") public String deleteinfo(int id,Model mo){ if (paimai.deletesale(id)>0) { mo.addAttribute("shan", 1); }else{ mo.addAttribute("shan", 2); } return "redirect:saleinfo.action"; } } package com.dlsp.controller; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.IOException; import java.io.PrintWriter; import java.util.List; import java.util.Random; import javax.annotation.Resource; import javax.imageio.ImageIO; import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import javax.servlet.jsp.PageContext; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import com.dlsp.dao.UserLoginDao; import com.dlsp.domain.Manage; import com.dlsp.domain.Saleinfo; import com.dlsp.service.PaiMaiSerDao; import com.dlsp.service.UserLoginSerDao; import com.dlsp.service.impl.PaiMaiSerDaoImpl; import com.sun.java.swing.plaf.motif.resources.motif; import com.sun.org.apache.regexp.internal.recompile; @Controller public class PaiMaicontroler { @Resource private PaiMaiSerDao paimai; //获得随机颜色 Color getRandColor(int fc, int bc){ Random random = new Random(); if (fc > 255) fc = 255; if (bc > 255) bc = 255; int r = fc + random.nextInt(bc - fc); int g = fc + random.nextInt(bc - fc); int b = fc + random.nextInt(bc - fc); return new Color(r, g, b); } //验证码 @RequestMapping("yanzheng.action") public void yanzhengn(HttpServletRequest request,HttpServletResponse response,HttpSession session){ //设置页面不缓存 session=request.getSession(); response.setHeader("Pragma", "No-cache"); response.setHeader("Cache-Control", "no-cache"); response.setDateHeader("Expires", 0); // 在内存中创建图象 int width = 60, height = 20; BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); // 获取图形上下文 Graphics g = image.getGraphics(); //生成随机类 Random random = new Random(); // 设定背景色 g.setColor(getRandColor(200, 250)); g.fillRect(0, 0, width, height); //设定字体 g.setFont(new Font("Times New Roman", Font.PLAIN, 18)); //画边框 //g.setColor(new Color()); //g.drawRect(0,0,width-1,height-1); // 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到 g.setColor(getRandColor(160, 200)); for (int i = 0; i < 155; i++) { int x = random.nextInt(width); int y = random.nextInt(height); int xl = random.nextInt(12); int yl = random.nextInt(12); g.drawLine(x, y, x + xl, y + yl); } // 取随机产生的认证码(4位数字) String sRand = ""; for (int i = 0; i < 4; i++) { String rand = String.valueOf(random.nextInt(10)); sRand += rand; // 将认证码显示到图象中 g.setColor(new Color(20 + random.nextInt(110), 20 + random .nextInt(110), 20 + random.nextInt(110)));//调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成 g.drawString(rand, 13 * i + 6, 16); } // 将认证码存入SESSION session.setAttribute("numrand", sRand); // 图象生效 g.dispose(); // 输出图象到页面 try { ImageIO.write(image, "JPEG", response.getOutputStream()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } //out.clear(); //out = PageContext.pushBody(); } @RequestMapping("saleinfo.action") public String getsuoyou(Model mo) { List<Saleinfo> jihe = paimai.getall(); mo.addAttribute("jihe", jihe); return "saleinfo"; } @RequestMapping("addinfo.action") public String addinfo(Saleinfo sale, Model mo) { if (paimai.insertsale(sale) > 0) { mo.addAttribute("cheng", 1); } else { mo.addAttribute("cheng", 2); } return "redirect:saleinfo.action"; } @RequestMapping("update.action") public String updateinfo(Saleinfo sale,Model mo){ if (paimai.updatedale(sale)>0) { mo.addAttribute("gai", 1); }else{ mo.addAttribute("gai", 2); } return "redirect:saleinfo.action"; } @RequestMapping("sahn.action") public String deleteinfo(int id,Model mo){ if (paimai.deletesale(id)>0) { mo.addAttribute("shan", 1); }else{ mo.addAttribute("shan", 2); } return "redirect:saleinfo.action"; } } package com.dlsp.controller; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.IOException; import java.io.PrintWriter; import java.util.List; import java.util.Random; import javax.annotation.Resource; import javax.imageio.ImageIO; import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import javax.servlet.jsp.PageContext; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import com.dlsp.dao.UserLoginDao; import com.dlsp.domain.Manage; import com.dlsp.domain.Saleinfo; import com.dlsp.service.PaiMaiSerDao; import com.dlsp.service.UserLoginSerDao; import com.dlsp.service.impl.PaiMaiSerDaoImpl; import com.dlsp.service.impl.UserLoginService; import com.sun.java.swing.plaf.motif.resources.motif; import com.sun.org.apache.regexp.internal.recompile; @Controller public class UserLogincontroler { @Resource private UserLoginSerDao login; @RequestMapping("admin.action") public String asdsa(){ return "admin"; } //普通登陆判断 @RequestMapping("dengdeng.action") public String denglu(Manage ma,Model mo,String checkbox){ ma=login.loginman(ma); if (!ma.equals("")) { if (ma.getAdmin()==1) { mo.addAttribute("user", ma); if (!checkbox.equals("")) { Cookie co=new Cookie("username", ma.getManame()); } return "saleinfo"; } return "admin"; } return "admin"; } //转换管理员登陆界面 @RequestMapping("denglu.action") public String denglupan(Model mo){ mo.addAttribute("admin", "123123"); return "admin"; } //转换普通用户登陆界面 @RequestMapping("dengluq.action") public String denglupantwo(Model mo){ mo.addAttribute("admin", null); return "admin"; } } package com.dlsp.controller; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.IOException; import java.io.PrintWriter; import java.util.List; import java.util.Random; import javax.annotation.Resource; import javax.imageio.ImageIO; import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import javax.servlet.jsp.PageContext; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import com.dlsp.dao.UserLoginDao; import com.dlsp.domain.Manage; import com.dlsp.domain.Saleinfo; import com.dlsp.service.PaiMaiSerDao; import com.dlsp.service.UserLoginSerDao; import com.dlsp.service.impl.PaiMaiSerDaoImpl; import com.dlsp.service.impl.UserLoginService; import com.sun.java.swing.plaf.motif.resources.motif; import com.sun.org.apache.regexp.internal.recompile; @Controller public class UserLogincontroler { @Resource private UserLoginSerDao login; @RequestMapping("admin.action") public String asdsa(){ return "admin"; } //普通登陆判断 @RequestMapping("dengdeng.action") public String denglu(Manage ma,Model mo,String checkbox){ ma=login.loginman(ma); if (!ma.equals("")) { if (ma.getAdmin()==1) { mo.addAttribute("user", ma); if (!checkbox.equals("")) { Cookie co=new Cookie("username", ma.getManame()); } return "saleinfo"; } return "admin"; } return "admin"; } //转换管理员登陆界面 @RequestMapping("denglu.action") public String denglupan(Model mo){ mo.addAttribute("admin", "123123"); return "admin"; } //转换普通用户登陆界面 @RequestMapping("dengluq.action") public String denglupantwo(Model mo){ mo.addAttribute("admin", null); return "admin"; } } <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.dlsp.dao.PaiMaiDao"> <sql id="sale"> said,saname,startmoney,endmondey,starttime,endtime,panduan,remark </sql> <sql id="man"> id,maname,password,cardnum,tell, dizhi,youzheng,admin </sql> <!-- 基本的用户信息 --> <resultMap id="paimaiMP" type="com.dlsp.domain.Saleinfo"> <id property="said" column="said" /> <result property="saname" column="saname" /> <result property="startmoney" column="startmoney" /> <result property="endmondey" column="endmondey" /> <result property="starttime" column="starttime" /> <result property="endtime" column="endtime" /> <result property="panduan" column="panduan" /> <result property="remark" column="remark" /> </resultMap> <resultMap type="com.dlsp.domain.Manage" id="manageMP"> <id property="id" column="id" /> <result property="maname" column="maname" /> <result property="password" column="password" /> <result property="cardnum" column="cardnum" /> <result property="tell" column="tell" /> <result property="dizhi" column="dizhi" /> <result property="youzheng" column="youzheng" /> <result property="admin" column="admin" /> </resultMap> <select id="getall" resultMap="paimaiMP" > select <include refid="sale"/> from saleinfo </select> <select id="loginman" resultMap="manageMP"> select <include refid="man"/> from manage </select> </mapper> <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.dlsp.dao.UserLoginDao"> <sql id="man"> id,maname,password,cardnum,tell, dizhi,youzheng,admin </sql> <resultMap type="com.dlsp.domain.Manage" id="manageMP"> <id property="id" column="id" /> <result property="maname" column="maname" /> <result property="password" column="password" /> <result property="cardnum" column="cardnum" /> <result property="tell" column="tell" /> <result property="dizhi" column="dizhi" /> <result property="youzheng" column="youzheng" /> <result property="admin" column="admin" /> </resultMap> <select id="loginman" parameterType="com.dlsp.domain.Manage" resultType="com.dlsp.domain.Manage"> select <include refid="man"/> from manage where maname=#{maname} and password=#{password} </select> </mapper> package com.dlsp.service; import java.util.List; import com.dlsp.domain.Manage; import com.dlsp.domain.Saleinfo; public interface PaiMaiSerDao { //查 List<Saleinfo> getall(); //增 int insertsale(Saleinfo sale); //删 int deletesale(int id); //改 int updatedale(Saleinfo sale); } package com.dlsp.service; import com.dlsp.domain.Manage; public interface UserLoginSerDao { //登陆 Manage loginman(Manage manage); } package com.dlsp.service.impl; import java.util.List; import javax.annotation.Resource; import org.springframework.stereotype.Service; import com.dlsp.dao.PaiMaiDao; import com.dlsp.domain.Manage; import com.dlsp.domain.Saleinfo; import com.dlsp.service.PaiMaiSerDao; @Service public class PaiMaiSerDaoImpl implements PaiMaiSerDao {// 设置依赖的类 @Resource private PaiMaiSerDao dao; @Override public List<Saleinfo> getall() { return dao.getall(); } @Override public int insertsale(Saleinfo sale) { return dao.insertsale(sale); } @Override public int deletesale(int id) { return dao.deletesale(id); } @Override public int updatedale(Saleinfo sale) { return dao.updatedale(sale); } } package com.dlsp.service.impl; import javax.annotation.Resource; import org.springframework.stereotype.Service; import com.dlsp.dao.PaiMaiDao; import com.dlsp.dao.UserLoginDao; import com.dlsp.domain.Manage; import com.dlsp.service.UserLoginSerDao; @Service public class UserLoginService implements UserLoginSerDao { @Resource private UserLoginSerDao dao; @Override public Manage loginman(Manage manage) { return dao.loginman(manage); } } <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd" > <!-- 1.包扫描 service dao (注解方式) --> <context:component-scan base-package="com.dlsp.dao,com.dlsp.service"/> <!-- 2. jdbc.properties 属性配置文件 --> <context:property-placeholder location="classpath:jdbc.properties"/> <!-- 3.数据源 --> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="${jdbc.driverclass}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </bean> <!-- 4.sqlsessionfactory --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <!-- 怎么和mybatis整合,关联Mybatis,关联映射文件 --> <property name="configLocation" value="classpath:sqlMapConfig.xml"/> <property name="mapperLocations" value="classpath:com/dlsp/dao/*.xml"/> </bean> <!-- 5.事务 --> <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <tx:advice id="txAdvice" transaction-manager="txManager"> <tx:attributes> <tx:method name="save*" propagation="REQUIRED"/> <tx:method name="add*" propagation="REQUIRED"/> <tx:method name="insert*" propagation="REQUIRED"/> <tx:method name="update*" propagation="REQUIRED"/> <tx:method name="delete*" propagation="REQUIRED"/> <tx:method name="find*" read-only="true"/> <tx:method name="get*" read-only="true"/> <tx:method name="list*" read-only="true"/> <tx:method name="*" read-only="true"/> </tx:attributes> </tx:advice> <aop:config> <aop:pointcut expression="execution(* com.dlsp.service.*.*(..))" id="txPointCut"/> <aop:advisor advice-ref="txAdvice" pointcut-ref="txPointCut"/> </aop:config> </beans>
新手求助!在MyEclipse导入Struts框架搭建的项目出现404错误!
HTTP Status 404 - /16/WebRoot/admin_index.jsp -------------------------------------------------------------------------------- type Status report message /16/WebRoot/admin_index.jsp description The requested resource is not available. -------------------------------------------------------------------------------- Apache Tomcat/7.0.63 struts.xml的配置文件如下: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="wyLogistics" extends="struts-default"> <action name="admin_*" class="com.webtier.AdminAction" method="{1}"> <result name="success">/admin_{1}.jsp</result> <result name="input">/admin_{1}.jsp</result> </action> <action name="car_*" class="com.webtier.CarAction" method="{1}"> <result name="success">/car_{1}.jsp</result> <result name="input">/car_{1}.jsp</result> <result name="operationSuccess" type="redirect">car_queryCarList.action</result> </action> <action name="customer_*" class="com.webtier.CustomerAction" method="{1}"> <result name="success">/customer_{1}.jsp</result> <result name="input">customer_queryCustomerList.action</result> <result name="operationSuccess1" type="redirect">customer_queryCustomerList.action</result> </action> <action name="goods_*" class="com.webtier.GoodsAction" method="{1}"> <result name="success">/goods_{1}.jsp</result> <result name="deleteSuccess" type="redirect">goods_queryGoodsList.action</result> </action> </package> </struts> web.xml的配置文件: <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app> 一部分AdminAction的代码: public class AdminAction extends AdminForm { private static AdminDao adminDao = null; static{ adminDao=new AdminDao(); } // 对登录用户的表单验证是否为空 public void validateIndex() { if (null == admin_user || admin_user.equals("")) { this.addFieldError("admin_user", "| 请您输入用户名"); } if (null == admin_password || admin_password.equals("")) { this.addFieldError("admin_password", "| 请您输入密码"); } } // 对登录用户的表单验证 public String index() { String query_password = adminDao.getAdminPassword(admin_user); if (query_password.equals("")) { this.addActionError("| 该用户名不存在"); return INPUT; } if (!query_password.equals(admin_password)) { this.addActionError("| 您输入的密码有误,请重新输入"); return INPUT; } session.put("admin_user", admin_user); return SUCCESS; } // 对修改管理员密码表单验证是否为空 public void validateUpdatePassword() { if (null == admin_password || admin_password.equals("")) { this.addFieldError("admin_password", "请输入原密码"); } if (null == admin_repassword1 || admin_repassword1.equals("")) { this.addFieldError("admin_repassword1", "请输入新密码"); } if (null == admin_repassword2 || admin_repassword2.equals("")) { this.addFieldError("admin_repassword2", "请输入密码确认"); } if (!admin_repassword1.equals(admin_repassword2)) { this.addActionError("您输入两次密码不相同,请重新输入!!!"); } } public String updatePassword() { String query_password = adminDao.getAdminPassword(admin_user); if (!admin_password.equals(query_password)) { this.addFieldError("admin_password", "您输入的原密码有误,请重新输入"); } String sql = "update tb_admin set admin_password='" + admin_repassword1 + "' where admin_user='" + admin_user + "'"; if (!adminDao.operationAdmin(sql)) { this.addActionError("修改密码失败!!!"); return INPUT; } else { request.setAttribute("editPassword", "您修改密码成功,请您重新登录!!!"); return SUCCESS; } } } 第一次提问,希望大神们多多指教!小弟也会虚心受教。
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私有的数
win10系统安装教程(U盘PE+UEFI安装)
一、准备工作 u盘,电脑一台,win10原版镜像(msdn官网) 二、下载wepe工具箱  极力推荐微pe(微pe官方下载) 下载64位的win10 pe,使用工具箱制作启动U盘打开软件,   选择安装到U盘(按照操作无需更改) 三、重启进入pe系统   1、关机后,将U盘插入电脑 2、按下电源后,按住F12进入启动项选择(技嘉主板是F12)     选择需要启
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。 也可以说是一个小人工智障。 思路可以运用在不同地方,主要介绍的是思路。
Nginx 软件层面加强Nginx性能优化的面试问答和解决方案
Nginx 软件层面加强Nginx性能优化的面试问答和解决方案 去年我去爱卡汽车面试PHP,一轮和二轮面的都不错,在三轮面到Nginx的时候很多问题当时不知道怎么回答,确实没有深入学习过,花了一段时间的学习,终于能解答Nginx高性能优化的问题了,10月24号为了获得程序员勋章,发布了半个优化笔记,浏览到了1000+,受到这个鼓舞,我抽时间在仔细整理下关于Nginx性能优化的问题,我们从软件说起。...
【管理系统课程设计】美少女手把手教你后台管理
【文章后台管理系统】URL设计与建模分析+项目源码+运行界面 栏目管理、文章列表、用户管理、角色管理、权限管理模块(文章最后附有源码) 1. 这是一个什么系统? 1.1 学习后台管理系统的原因 随着时代的变迁,现如今各大云服务平台横空出世,市面上有许多如学生信息系统、图书阅读系统、停车场管理系统等的管理系统,而本人家里就有人在用烟草销售系统,直接在网上完成挑选、购买与提交收货点,方便又快捷。 试想,若没有烟草销售系统,本人家人想要购买烟草,还要独自前往药...
11月19日科技资讯|华为明日发布鸿蒙整体战略;京东宣告全面向技术转型;Kotlin 1.3.60 发布
「极客头条」—— 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧。扫描上方二维码进入 CSDN App 可以收听御姐萌妹 Style 的人工版音频哟。 一分钟速览新闻点! 6G 专家组成员:速率是 5G 的 10 至 100 倍,预计 2030 年商用 雷军:很多人多次劝我放弃WPS,能坚持下来并不是纯粹的商业决定 ...
C语言魔塔游戏
很早就很想写这个,今天终于写完了。 游戏截图: 编译环境: VS2017 游戏需要一些图片,如果有想要的或者对游戏有什么看法的可以加我的QQ 2985486630 讨论,如果暂时没有回应,可以在博客下方留言,到时候我会看到。 下面我来介绍一下游戏的主要功能和实现方式 首先是玩家的定义,使用结构体,这个名字是可以自己改变的 struct gamerole { char n
化繁为简 - 腾讯计费高一致TDXA的实践之路
导语:腾讯计费是孵化于支撑腾讯内部业务千亿级营收的互联网计费平台,在如此庞大的业务体量下,腾讯计费要支撑业务的快速增长,同时还要保证每笔交易不错账。采用最终一致性或离线补...
Python爬虫爬取淘宝,京东商品信息
小编是一个理科生,不善长说一些废话。简单介绍下原理然后直接上代码。 使用的工具(Python+pycharm2019.3+selenium+xpath+chromedriver)其中要使用pycharm也可以私聊我selenium是一个框架可以通过pip下载 pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple/ 
Java学习笔记(七十二)—— Cookie
概述 会话技术: 会话:一次会话中包含多次请求和响应 一次会话:浏览器第一次给服务器发送资源请求,会话建立,直到有一方断开为止 功能:在一次会话的范围内的多次请求间,共享数据 方式: 客户端会话技术:Cookie,把数据存储到客户端 服务器端会话技术:Session,把数据存储到服务器端 Cookie 概念:客户端会话技术,将数据存储到客户端 快速入门: 使用步骤: 创建C
Java工作4年来应聘要16K最后没要,细节如下。。。
前奏: 今天2B哥和大家分享一位前几天面试的一位应聘者,工作4年26岁,统招本科。 以下就是他的简历和面试情况。 基本情况: 专业技能: 1、&nbsp;熟悉Sping了解SpringMVC、SpringBoot、Mybatis等框架、了解SpringCloud微服务 2、&nbsp;熟悉常用项目管理工具:SVN、GIT、MAVEN、Jenkins 3、&nbsp;熟悉Nginx、tomca
2020年,冯唐49岁:我给20、30岁IT职场年轻人的建议
点击“技术领导力”关注∆  每天早上8:30推送 作者| Mr.K   编辑| Emma 来源| 技术领导力(ID:jishulingdaoli) 前天的推文《冯唐:职场人35岁以后,方法论比经验重要》,收到了不少读者的反馈,觉得挺受启发。其实,冯唐写了不少关于职场方面的文章,都挺不错的。可惜大家只记住了“春风十里不如你”、“如何避免成为油腻腻的中年人”等不那么正经的文章。 本文整理了冯
程序员该看的几部电影
##1、骇客帝国(1999) 概念:在线/离线,递归,循环,矩阵等 剧情简介: 不久的将来,网络黑客尼奥对这个看似正常的现实世界产生了怀疑。 他结识了黑客崔妮蒂,并见到了黑客组织的首领墨菲斯。 墨菲斯告诉他,现实世界其实是由一个名叫“母体”的计算机人工智能系统控制,人们就像他们饲养的动物,没有自由和思想,而尼奥就是能够拯救人类的救世主。 可是,救赎之路从来都不会一帆风顺,到底哪里才是真实的世界?
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东
@程序员,如何花式构建线程?
作者 |曾建责编 | 郭芮出品 | CSDN(ID:CSDNnews)在项目和业务的开发中,我们难免要经常使用线程来进行业务处理,使用线程可以保证我们的业务在相互处理之间可以保证原子性...
破14亿,Python分析我国存在哪些人口危机!
2020年1月17日,国家统计局发布了2019年国民经济报告,报告中指出我国人口突破14亿。 猪哥的朋友圈被14亿人口刷屏,但是很多人并没有看到我国复杂的人口问题:老龄化、男女比例失衡、生育率下降、人口红利下降等。 今天我们就来分析一下我们国家的人口数据吧! 一、背景 1.人口突破14亿 2020年1月17日,国家统计局发布了 2019年国民经济报告 ,报告中指出:年末中国大陆总人口(包括31个
强烈推荐10本程序员在家读的书
很遗憾,这个鼠年春节注定是刻骨铭心的,新型冠状病毒让每个人的神经都是紧绷的。那些处在武汉的白衣天使们,尤其值得我们的尊敬。而我们这些窝在家里的程序员,能不外出就不外出,就是对社会做出的最大的贡献。 有些读者私下问我,窝了几天,有点颓丧,能否推荐几本书在家里看看。我花了一天的时间,挑选了 10 本我最喜欢的书,你可以挑选感兴趣的来读一读。读书不仅可以平复恐惧的压力,还可以对未来充满希望,毕竟苦难终
Linux自学篇——linux命令英文全称及解释
man: Manual 意思是手册,可以用这个命令查询其他命令的用法。 pwd:Print working directory 显示当前目录 su:Swith user 切换用户,切换到root用户 cd:Change directory 切换目录 ls:List files 列出目录下的文件 ps:Process Status 进程状态 mk
Python实战:抓肺炎疫情实时数据,画2019-nCoV疫情地图
文章目录1. 前言2. 数据下载3. 数据处理4. 数据可视化 1. 前言 今天,群里白垩老师问如何用python画武汉肺炎疫情地图。白垩老师是研究海洋生态与地球生物的学者,国家重点实验室成员,于不惑之年学习python,实为我等学习楷模。先前我并没有关注武汉肺炎的具体数据,也没有画过类似的数据分布图。于是就拿了两个小时,专门研究了一下,遂成此文。 2月6日追记:本文发布后,腾讯的数据源多次变更u
智力题(程序员面试经典)
NO.1  有20瓶药丸,其中19瓶装有1克/粒的药丸,余下一瓶装有1.1克/粒的药丸。给你一台称重精准的天平,怎么找出比较重的那瓶药丸?天平只能用一次。 解法 有时候,严格的限制条件有可能反倒是解题的线索。在这个问题中,限制条件是天平只能用一次。 因为天平只能用一次,我们也得以知道一个有趣的事实:一次必须同时称很多药丸,其实更准确地说,是必须从19瓶拿出药丸进行称重。否则,如果跳过两瓶或更多瓶药
在家远程办公效率低?那你一定要收好这个「在家办公」神器!
相信大家都已经收到国务院延长春节假期的消息,接下来,在家远程办公可能将会持续一段时间。 但是问题来了。远程办公不是人在电脑前就当坐班了,相反,对于沟通效率,文件协作,以及信息安全都有着极高的要求。有着非常多的挑战,比如: 1在异地互相不见面的会议上,如何提高沟通效率? 2文件之间的来往反馈如何做到及时性?如何保证信息安全? 3如何规划安排每天工作,以及如何进行成果验收? ......
作为一个程序员,内存和磁盘的这些事情,你不得不知道啊!!!
截止目前,我已经分享了如下几篇文章: 一个程序在计算机中是如何运行的?超级干货!!! 作为一个程序员,CPU的这些硬核知识你必须会! 作为一个程序员,内存的这些硬核知识你必须懂! 这些知识可以说是我们之前都不太重视的基础知识,可能大家在上大学的时候都学习过了,但是嘞,当时由于老师讲解的没那么有趣,又加上这些知识本身就比较枯燥,所以嘞,大家当初几乎等于没学。 再说啦,学习这些,也看不出来有什么用啊!
2020年的1月,我辞掉了我的第一份工作
其实,这篇文章,我应该早点写的,毕竟现在已经2月份了。不过一些其它原因,或者是我的惰性、还有一些迷茫的念头,让自己迟迟没有试着写一点东西,记录下,或者说是总结下自己前3年的工作上的经历、学习的过程。 我自己知道的,在写自己的博客方面,我的文笔很一般,非技术类的文章不想去写;另外我又是一个还比较热衷于技术的人,而平常复杂一点的东西,如果想写文章写的清楚点,是需要足够...
别低估自己的直觉,也别高估自己的智商
所有群全部吵翻天,朋友圈全部沦陷,公众号疯狂转发。这两周没怎么发原创,只发新闻,可能有人注意到了。我不是懒,是文章写了却没发,因为大家的关注力始终在这次的疫情上面,发了也没人看。当然,我...
Java坑人面试题系列: 包装类(中级难度)
Java Magazine上面有一个专门坑人的面试题系列: https://blogs.oracle.com/javamagazine/quiz-2。 这些问题的设计宗旨,主要是测试面试者对Java语言的了解程度,而不是为了用弯弯绕绕的手段把面试者搞蒙。 如果你看过往期的问题,就会发现每一个都不简单。 这些试题模拟了认证考试中的一些难题。 而 “中级(intermediate)” 和 “高级(ad
Spring Boot 2.x基础教程:使用JdbcTemplate访问MySQL数据库
在第2章节中,我们介绍了如何通过Spring Boot来实现HTTP接口,以及围绕HTTP接口相关的单元测试、文档生成等实用技能。但是,这些内容还不足以帮助我们构建一个动态应用的服务端程序。不论我们是要做App、小程序、还是传统的Web站点,对于用户的信息、相关业务的内容,通常都需要对其进行存储,而不是像第2章节中那样,把用户信息存储在内存中(重启就丢了!)。 对于信息的存储,现在已经有非常非常多...
基于Python的人脸自动戴口罩系统
目录 1、项目背景 2、页面设计 3、器官识别 4、退出系统 1、项目背景 2019年新型冠状病毒感染的肺炎疫情发生以来,牵动人心,举国哀痛,口罩、酒精、消毒液奇货可居。 抢不到口罩,怎么办?作为技术人今天分享如何使用Python实现自动戴口罩系统,来安慰自己,系统效果如下所示: 本系统的实现原理是借助 Dlib模块的Landmark人脸68个关键点检测库轻松识别出人脸五官
这个世界上人真的分三六九等,你信吗?
偶然间,在知乎上看到一个问题 一时间,勾起了我深深的回忆。 以前在厂里打过两次工,做过家教,干过辅导班,做过中介。零下几度的晚上,贴过广告,满脸、满手地长冻疮。   再回首那段岁月,虽然苦,但让我学会了坚持和忍耐。让我明白了,在这个世界上,无论环境多么的恶劣,只要心存希望,星星之火,亦可燎原。   下文是原回答,希望能对你能有所启发。   如果我说,这个世界上人真的分三六九等,
节后首个工作日,企业们集体开晨会让钉钉挂了
By 超神经场景描述:昨天 2 月 3 日,是大部分城市号召远程工作的第一天,全国有接近 2 亿人在家开始远程办公,钉钉上也有超过 1000 万家企业活跃起来。关键词:十一出行 人脸...
相关热词 c# 压缩图片好麻烦 c#计算数组中的平均值 c#获取路由参数 c#日期精确到分钟 c#自定义异常必须继承 c#查表并返回值 c# 动态 表达式树 c# 监控方法耗时 c# listbox c#chart显示滚动条
立即提问