Struts拦截器自定义方法不执行

写了个拦截器判断用户是否未登录访问,但是运行时,拦截器自定义方法没调用,请教各位大神我配置代码哪里有问题,为了方便您们看我代码我就直接截图贴上了(注:配置路径都是没问题的)
Struts.xml图片说明
拦截器自定义方法图片说明
页面提交图片说明

3个回答

下面action没有配置拦截器

weixin_40009624
weixin_40009624 public class loginInterceptor implements Interceptor
大约 2 年之前 回复
MsChench
MsChench 问题解决了,感谢解惑!犯了个低级的错误导致的错误,没有继承AbstractInterceptor
大约 2 年之前 回复
MsChench
MsChench 把自定义拦截器栈添加到下面这个Action还是不行的呀
大约 2 年之前 回复

下面action没有配置,同上

MsChench
MsChench 配置了还是不行,而且我时直接访问上面配置的auth,他直接进入成功的studenthome.jsp页面,但是并没有进入拦截器自定义的方法
大约 2 年之前 回复

下面action没有配置

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
怎样在struts2 自定义拦截器中获取正在执行的action的方法名
最近在做权限管理,需要细化到方法的操作上去,但是在拦截器中不知道怎么获取action的方法名,虽然用InvocationHandler,使用动态代理可以实现,但是太麻烦,需要将所有的action进行动态代理.有没有比较好的解决方法 ....
struts2自定义拦截器怎么进不去
一个破拦截器搞了半天没发现哪里出问题了就是进不去自定义的拦截器里,下面贴代码: 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.1.dtd"> <struts> <package name="root" namespace="/" extends="struts-default"> <!-- 拦截器 --> <interceptors> <!-- 自定义拦截器 --> <interceptor name="myoneInterceptor" class="com.niit.action.MyoneInterceptor"/> <!-- 自定义拦截器栈 --> <interceptor-stack name="appstack"> <interceptor-ref name="myoneInterceptor"/> <interceptor-ref name="defaultStack" /> </interceptor-stack> </interceptors> <!--系统所用的拦截器栈名 --> <default-interceptor-ref name="appstack"/> <action name="MyAct" class="com.niit.action.Act"> <result name="input">MyJsp.jsp</result> </action> </package> </struts> java代码(在com.niit.action包里) Act类 package com.niit.action; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import org.apache.struts2.ServletActionContext; import org.apache.struts2.interceptor.ApplicationAware; import org.apache.struts2.interceptor.RequestAware; import org.apache.struts2.interceptor.SessionAware; import org.apache.struts2.util.ServletContextAware; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; public class Act extends ActionSupport { public String login(){ return "input"; } } MyOneInterceptor类 package com.niit.action; import java.util.Map; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.AbstractInterceptor; public class MyOneInterceptor extends AbstractInterceptor{ public String intercept(ActionInvocation actionInvocation) throws Exception { // TODO Auto-generated method stub System.out.println("进入我的拦截器"); Object action = actionInvocation.getAction(); System.out.println("请求的对象名:" + action.getClass().getName()); return actionInvocation.invoke(); //让url继续执行 } } index.jsp <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@taglib uri="/struts-tags" prefix="s" %> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'login3.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <s:form action="MyAct!login.action" method="get"> <input type="submit" value="提交"/> </s:form> </body> </html> MyJsp.jsp <%@ page language="java" import="java.util.*" pageEncoding="gbk"%> <%@ taglib uri="/struts-tags" prefix="s"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'MyJsp1.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> myjsp </body> </html> 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"> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
struts2中执行action中的方法前必须执行一个自定义的方法如何实现?
本来是想用拦截器的,但是这个自定义的方法在每个action中要做的事情不一样,没有办法抽取出来,想问下有没有办法在执行action中的一个方法前必须执行此方法?调用方式为/user/useraction!list.action,比如我在执行list方法前必须要执行一个选定的的类似list的check方法,这个如何实现?谢谢!
struts2 拦截器问题
struts2使用拦截器(自定义拦截器)时出现以下问题:[color=red]当不使用拦截器时页面正常跳转[/color],当使用拦截器后页面总是跳转到<result name="error">/error.jsp</result>页面,不管输入的是正确还是错误!请各位解答是怎么回事,谢谢了! 附相关代码: struts.xml: [code="java"] <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> <struts> <package name="struts2Demo" extends="struts-default"> <interceptors> <interceptor name="myinterceptor" class="interceptor.MyInterceptor"></interceptor> </interceptors> <action name="myaction" method="execute" class="action.MyTestAction"> <result name="success">/success.jsp</result> <result name="error">/error.jsp</result> <interceptor-ref name="myinterceptor"></interceptor-ref> </action> </package> </struts> [/code] MyInterceptor.java: [code="java"] package interceptor; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.AbstractInterceptor; public class MyInterceptor extends AbstractInterceptor { @Override public String intercept(ActionInvocation invocation) throws Exception { long start = System.currentTimeMillis(); String res = invocation.invoke(); long end = System.currentTimeMillis(); System.out.println("执行"+ invocation.getClass().getName()+"耗时"+(end-start)+"ms"); return res; } } [/code]
不进Struts拦截器,麻烦帮解决,谢谢~~~~~
test.jsp <%@ page contentType="text/html;charset=GB2312"%> <%@ taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>AJAX提交请求测试页面</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <script type="text/javascript" src="js/jquery-1.8.0.js"></script> <script type="text/javascript" src="js/json.js"></script> </head> <script language="javascript"> $(document).ready(function(){ $("#btn").click(function(){ $.ajax({ url: "Essa", type: "POST", data: {"AppCode":"51601","DataSets":"1","Datas":"[{'name':'fsg','pwd':'1'}]"}, dataType: "json", success:function(data) { var jsonStr = eval("("+data+")"); alert(data); //document.getElementById("info").innerHTML = "retAppCode: [ "+jsonStr.retAppCode+" ] DataSets: [ "+jsonStr.retDataSets+" ] 信息:[ "+jsonStr.retDatas[0].info+" ] "; //alert("success:OperCode="+jsonStr.OperCode); //alert("success:DataSets="+jsonStr.DataSets); //alert("success:Datas[0].name="+jsonStr.Datas[0].name); //alert("success:Datas[0].age="+jsonStr.Datas[0].age); }, error:function(data) { alert("error:"); } }); }); }); </script> <body> <div id="info"></div> <s:submit value="%{getText('test')}" id="btn"/> </body> </html> struts.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> <struts> <include file="struts-default.xml"/> <package name="essa" extends="json-default"> <interceptors> <interceptor name="myInterceptor" class="com.essa.Interceptor.MyInterceptor"> <param name="filterURISwitch">/welcome.html;/login;/html/help;</param></interceptor> <interceptor-stack name="myDefaultStack"> <interceptor-ref name="myInterceptor" /> <interceptor-ref name="json" /> <interceptor-ref name="defaultStack" /> </interceptor-stack> </interceptors> <default-interceptor-ref name="myDefaultStack" /> <default-action-ref name="index"></default-action-ref> <global-results> <result name="failPage" type="redirect">/login.jsp</result> </global-results> <action name="index"> <result type="redirect">/welcome.html</result> </action> <action name="Essa" class="com.essa.action.EssaAction"> <result type="json"><param name="root">result</param></result> </action> <action name="LoginAction" class="com.essa.action.LoginAction"> <result name="LoginOK" type="dispatcher">/website/home.jsp</result> <result name="LoginFail" type="redirect">/loginFail.html</result> <result name="Normal" type="redirect">/welcome.html</result> <result name="Help" type="dispatcher">/html/help/help.html</result> </action> </package> <constant name="struts.locale" value="zh_CN"></constant> <constant name="struts.i18n.encoding" value="UTF-8" /> <constant name="struts.action.extension" value="action"/> </struts> 拦截器 package com.essa.Interceptor; import java.io.IOException; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.log4j.Logger; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.Interceptor; /** * @name MyInterceptor * @time 2015-06-20 * @version 1.0.0 * @author ZhangDongxu */ public class MyInterceptor implements Interceptor { private static Logger logger = Logger.getLogger(MyInterceptor.class .getName()); private HttpServletRequest request; private HttpSession session; private ServletContext application; private ActionContext context; private String filterURISwitch ; private String sessionUID; private String sessionPASS; /** * 自定义拦截器执行的代码 作用:拦截请求 * */ private static final long serialVersionUID = 1L; public String getFilterURISwitch() { return filterURISwitch; } public void setFilterURISwitch(String filterURISwitch) { this.filterURISwitch = filterURISwitch; } public void destroy() { } public void init() { } public String intercept(ActionInvocation invocation) throws Exception { logger.info(">>>>>> [请求信息:执行了自定义拦截器的代码!!!!=============================]"); System.out.println("===================================================="); System.out.println(this.filterURISwitch); System.out.println("===================================================="); String filterURISwitch = this.filterURISwitch;// 分号分隔的过滤器路径,即哪些不需要进行资源过滤拦截:例如/essa/welcome.html;/essa/html/help.html操作手册 String[] noFilterURIs;// 临时数组 System.out.println("过滤前提示"); System.out.println("===================================="); System.out.println("+++++++++++++++++++++++++++++++++++++++++++++"); System.out.println("获取不需要进行过滤URI的初始化参数值: " + filterURISwitch); noFilterURIs = filterURISwitch.split(";"); int pathFilterLength = filterURISwitch.split(";").length; int filesFilterLength = filterURISwitch.split("\\.").length - 1; int pathsSize = pathFilterLength - filesFilterLength; // 不需要过滤的具体请求的页面,带扩展名 String[] noDealURIPages = new String[filesFilterLength]; // 不需要过滤的路径 // 控制用户访问权限 context = invocation.getInvocationContext(); request = (HttpServletRequest) context.get(ServletActionContext.HTTP_REQUEST); session = request.getSession(); String[] noDealURIPaths = new String[pathFilterLength]; String currentURI = request.getRequestURI();// 当前请求的页面URI String ctx = request.getContextPath(); currentURI = currentURI.substring(ctx.length()); System.out.println("currentURI = " + currentURI); // 提取不需要过滤的页面及路径数组,便于进行过滤 int j = 0; int k = 0; for (int i = 0; i < pathFilterLength; i++) { if (noFilterURIs[i].split("\\.").length == 2) { noDealURIPages[j] = noFilterURIs[i]; j++; } else { noDealURIPaths[k] = noFilterURIs[i]; k++; } } System.out.println("1、不需要进行过滤安全保护的静态资源路径数量 = " + pathsSize); for (int i = 0; i < k; i++) { System.out.println("paths = " + noDealURIPaths[i]); } System.out.println("2、不需要进行过滤安全保护的访问页面资源数量 = " + filesFilterLength); for (int i = 0; i < j; i++) { System.out.println("pages = " + noDealURIPages[i]); } System.out.println("+++++++++++++++++++++++++++++++++++++++++++++"); // 基于实际请求的情况,判断session中UID和具体的PASS是否存在,进行业务操作。所有的判断安全均在ACTION中完成。过滤器不进行业务方面的操作 if (currentURI.equalsIgnoreCase("/LoginAction.action")) { // 获取JSON结构中的data:UID,PASS值 sessionUID = request.getParameter("name"); sessionPASS = request.getParameter("pwd"); session.setAttribute("sessionUID", sessionUID); session.setAttribute("sessionPASS", sessionPASS); // 放行。让其走到下个链或目标资源中 return "LoginOK"; } // 判断是否是配置不进行过滤的页面 for (int i = 0; i < noDealURIPages.length; i++) { if (currentURI.equalsIgnoreCase(noDealURIPages[i]) && (session.getAttribute("sessionUID") != null || session.getAttribute("sessionPASS") != null)) { System.out.println("noDealURIPages=" + noDealURIPages[i]); // 放行。让其走到下个链或目标资源中 return "Normal"; } } // 判断是否是配置不进行过滤的路径 for (int i = 0; i < noDealURIPaths.length; i++) { if (currentURI.substring(0, currentURI.lastIndexOf("/")) .equalsIgnoreCase(noDealURIPaths[i]) || currentURI.equalsIgnoreCase(noDealURIPaths[i]) && (session.getAttribute("sessionUID") != null || session.getAttribute("sessionPASS") != null)) { System.out.println("noDealURIPaths=" + noDealURIPaths[i]); // 放行。让其走到下个链或目标资源中 return "Help"; } } // 如果不是上述情况,则判断是否存在UID和PASS,并进行逻辑操作链 if (session.getAttribute("sessionUID") == null || session.getAttribute("sessionPASS") == null) { session.invalidate(); //res.sendRedirect("http://localhost/login/login.html"); return "failPage"; } return invocation.invoke();// "failPage" } } 不进拦截器,test.jsp直接返回error
为什么我的struts2拦截器不起作用
我在网上学了点拦截器,自己试验了一下,发现程序运行没有问题,但是拦截器貌似没有生效<br> 网上说这么应该会输出几行文字<br> Pre-Processing<br> Inside action....<br> Post-Processing<br> 但是我这只输出了一行文字<br> Inside action....<br> 网上web.xml中 ``` <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> ``` filter-class中的内容不同,我改为网上的内容后,就会报错,<br> One or more Filters failed to start. Full details will be found in the appropriate container log file ``` 现在,在给定的文本框中输入任何单词,然后单击“Say Hello按钮执行已定义的动作。现在,如果你将检查生成的日志,你会发现下面的文字在底部:<br> ``` ``` Pre-Processing<br> Inside action....<br> Post-Processing<br> ``` ``` struts.xml文件配置 <package name="helloworld" extends="struts-default"> <interceptors> <interceptor name="Login" class="struts2.src.com.struts2.Interceptor.LoginInterceptor" > </interceptor> </interceptors> <action name="Hello" class="com.struts2.demo.HelloAction"> <interceptor-ref name="params"/> <interceptor-ref name="Login" /> <result name="success">HelloWorld.jsp</result> </action> </package> ``` ``` 拦截器 package com.struts2.Interceptor; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.AbstractInterceptor; @SuppressWarnings("serial") public class LoginInterceptor extends AbstractInterceptor { @Override public String intercept(ActionInvocation invocation)throws Exception{ /* let us do some per-processing */ String output = "Pre-Processing"; System.out.println(output); /* let us call action or next intercepter */ String result = invocation.invoke(); /* let us do some post-processing */ output = "Post-Processing"; System.out.println(output); return result; } } ``` ``` web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app id="starter" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name>Struts 2 Rest Example</display-name> <!-- Filters --> <!-- START SNIPPET: filter --> <filter> <filter-name>action2</filter-name> <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <!-- END SNIPPET: filter --> <filter-mapping> <filter-name>action2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- Welcome file lists --> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app> ```
ssh的struts2拦截器拦截请求后页面为什么没有跳转
我在struts.xml里把拦截器添加到了新的拦截器栈,命名了一个package名,然后我在一个子的struts-action-index.xml里继承了这个package做登录验证,并且程序执行时已经进入了拦截器类,并且执行完了类里的代码,返回了Action.Login,为什么通过全局返回处理页面没有跳转到登录页面 ``` <package name="struts-default-json" extends="struts-default"> <!-- 返回json类型数据 --> <result-types> <result-type name="json" class="org.apache.struts2.json.JSONResult" /> </result-types> <!-- 自动把页面传来的json解析成action中的对象 --> <interceptors> <interceptor name="json" class="org.apache.struts2.json.JSONInterceptor" /> <interceptor name="checkLogin" class="com.gtjc.interceptor.CheckInterceptor"/> <interceptor-stack name="myDefaultStack"> <interceptor-ref name="checkLogin"/> <interceptor-ref name="json" /> <interceptor-ref name="defaultStack" /> </interceptor-stack> </interceptors> <default-interceptor-ref name="myDefaultStack" /> <!-- 定义全局返回处理 --> <global-results> <result name="login" >/gtjc/login/jump.jsp</result> </global-results> </package> ``` ``` public String intercept(ActionInvocation in) throws Exception { System.out.println("进入拦截器"); User user=(User)ServletActionContext.getRequest().getSession().getAttribute("user"); if(user==null ){ return Action.LOGIN; }else{ return in.invoke(); } } ```
OA项目拦截器代码报错,不知道是什么出了问题?
网页报错如下: type Exception report message description The server encountered an internal error that prevented it from fulfilling this request. exception java.lang.IllegalStateException org.apache.catalina.connector.ResponseFacade.sendError(ResponseFacade.java:407) org.apache.struts2.dispatcher.Dispatcher.sendError(Dispatcher.java:876) org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:567) org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77) org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91) org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:233) org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) note The full stack trace of the root cause is available in the Apache Tomcat/6.0.45 logs. myeclipse报错如下: ERROR Dispatcher:38 - Exception occurred during processing request: Action has already executed java.lang.IllegalStateException: Action has already executed at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:234) at cn.hy.oa.interceptor.CheckPrivilegeInterceptor.intercept(CheckPrivilegeInterceptor.java:52) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242) at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54) at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:544) at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77) at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:233) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:612) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:503) at java.lang.Thread.run(Thread.java:662) 拦截器具体代码: /** * 进行权限检查的拦截器 * @author Administrator * */ public class CheckPrivilegeInterceptor extends AbstractInterceptor{ /** * 拦截方法 */ public String intercept(ActionInvocation ai) throws Exception { //System.out.println("自定义的拦截器执行了"); //从Session中获取登录用户 User user= (User) ServletActionContext.getRequest().getSession().getAttribute("loginUser"); String actionName=ai.getProxy().getActionName(); String namespace=ai.getProxy().getNamespace(); String url=namespace +actionName; System.out.println("访问url" + url); // 一 ,用户没有登录 if(user == null){ // a 如果用户访问的是登录功能,则放行 if("/user_login".equals(url)){ ai.invoke(); }else{ // b 如果用户访问的不是登录功能,则跳转到登录页面 return "loginUI"; } }else{ // 二, 用户已经登录 } return ai.invoke(); } }
Struts2 中 JSON-Plugin 的插件配置原理,帮忙看看是什么意思?
我知道插件配置的机制方法,但看到了JSon-Plugin中的配置,不是很明白。 [code="java"] <struts> <package name="json-default" extends="struts-default"> <result-types> <result-type name="json" class="com.googlecode.jsonplugin.JSONResult"/> </result-types> <interceptors> <interceptor name="json" class="com.googlecode.jsonplugin.JSONInterceptor"/> </interceptors> </package> </struts> [/code] 他这里面声明了一个拦截器,但是没有像这样将原来的default加入到栈中来啊? [code="java"]<interceptors> <interceptor name="authorize" class="com.struts2.interceptor.AuthorizeInterceptor" /> <interceptor-stack name="appStack"> <!-- 你自定义的 --> <interceptor-ref name="authorize"/> <!-- 系统内置的拦截器栈 --> <interceptor-ref name="defaultStack"/> </interceptor-stack> </interceptors>[/code] 我现在有个需求,需要用到这个插件,并且自己写个拦截器要在这个json的拦截器之前来执行。请问怎么做呢?
struts2 传值问题,希望大家帮我看看
jsp代码 [code="java"] <form action="roleAction!addRole.action" method="post"> <input name="role.roleName" type="text" > <input type="submit" > </form> [/code] 实体类 [code="java"] package com.yunwang.entity; import java.util.HashSet; import java.util.Set; /** * TRole entity. @author MyEclipse Persistence Tools */ @SuppressWarnings("unchecked") public class TRole implements java.io.Serializable { /** * */ private static final long serialVersionUID = 1L; // Fields private Long sn; private String roleName; private Long orderNum; private String memo; private String createDate; private String flag; private Set TModules = new HashSet(0); private Set TGroups = new HashSet(0); private Set TActionAccesses = new HashSet(0); // Constructors /** default constructor */ public TRole() { } /** minimal constructor */ public TRole(String roleName, Long orderNum, String createDate, String flag) { this.roleName = roleName; this.orderNum = orderNum; this.createDate = createDate; this.flag = flag; } /** full constructor */ public TRole(String roleName, Long orderNum, String memo, String createDate, String flag, Set TModules, Set TGroups, Set TActionAccesses) { this.roleName = roleName; this.orderNum = orderNum; this.memo = memo; this.createDate = createDate; this.flag = flag; this.TModules = TModules; this.TGroups = TGroups; this.TActionAccesses = TActionAccesses; } // Property accessors public Long getSn() { return this.sn; } public void setSn(Long sn) { this.sn = sn; } public String getRoleName() { return this.roleName; } public void setRoleName(String roleName) { this.roleName = roleName; } public Long getOrderNum() { return this.orderNum; } public void setOrderNum(Long orderNum) { this.orderNum = orderNum; } public String getMemo() { return this.memo; } public void setMemo(String memo) { this.memo = memo; } public String getCreateDate() { return this.createDate; } public void setCreateDate(String createDate) { this.createDate = createDate; } public String getFlag() { return this.flag; } public void setFlag(String flag) { this.flag = flag; } public Set getTModules() { return this.TModules; } public void setTModules(Set TModules) { this.TModules = TModules; } public Set getTGroups() { return this.TGroups; } public void setTGroups(Set TGroups) { this.TGroups = TGroups; } public Set getTActionAccesses() { return this.TActionAccesses; } public void setTActionAccesses(Set TActionAccesses) { this.TActionAccesses = TActionAccesses; } } [/code] struts2配置信息 [code="java"] <struts> <package name="employee" extends="struts-default"> <!-- 验证用户是否登录 --> <interceptors> <interceptor name="permission" class="com.yunwang.web.interceptor.PermissionInterceptor"/> <!--定义一个包含权限检查的拦截器栈--> <interceptor-stack name="permissionStack"> <!--配置内建默认拦截器,限制性系统自带的拦截器--> <interceptor-ref name="defaultStack"/> <!--配置自定义的拦截器,在执行自定义的拦截器--> <interceptor-ref name="permission" /> </interceptor-stack> </interceptors> <!-- 全包拦截 --> <default-interceptor-ref name="permission" /> <global-results> <result name="forwork" type="redirectAction">PermissionAction.action</result> </global-results> <!-- 模块管理 --> <action name="moduleAction" class="moduleAction" > </action> <!-- 部门管理 --> <action name="deptPanelAction" class="deptPanelAction" > </action> <!-- 用户管理 --> <action name="usersAction" class="usersAction"></action> <!-- 权限管理 --> <action name="roleAction" class="roleAction" ></action> <!-- 所有页面的跳转 --> <action name="forwordAction" class="forwordIndexAction"> <result name="long-source" >/WEB-INF/jsp/home/index.jsp</result> <result name="todeptPanel" >/WEB-INF/jsp/dept/deptPanel.jsp</result> <result name="toUserPanel" >/WEB-INF/jsp/dept/userPanel.jsp</result> <result name="toRolePanel" >/WEB-INF/jsp/RoleManage/roleMain.jsp</result> </action> </package> </struts> [/code] action 代码 [code="java"] package com.yunwang.web.action; import com.opensymphony.xwork2.ActionSupport; import com.yunwang.biz.IRoleBiz; import com.yunwang.entity.TRole; public class RoleAction extends ActionSupport { /** * */ private static final long serialVersionUID = 1L; private IRoleBiz roleBiz; private TRole role; public TRole getRole() { return role; } public void setRole(TRole role) { this.role = role; } public String addRole(){ System.out.println("sssssssssssssssssssssssssssssssss"); System.out.println("ssssss==="+role.getRoleName()); return null; } public IRoleBiz getRoleBiz() { return roleBiz; } public void setRoleBiz(IRoleBiz roleBiz) { this.roleBiz = roleBiz; } } [/code] 在点击提交后获取不到值,System.out.println("ssssss==="+role.getRoleName());什么都没输出,估计空指针了,不知道那里配置信息写错了,导致得不到值。
SSH搭建好了之后开始测试Struts的Action 转到自己写的404页面
按照李刚的struts讲义写的action 功能是输入用户名密码之后跳转到另外的jsp页面.但是每次都出来404页面.请问是哪边配置有问题? 如果另外ssh框架也没建好还请指正.以下是代码[code="web.xml"]<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>Archetype Created Web Application</display-name> <!-- 以下3项参数与log4j的配置相关 --> <listener> <listener-class> org.springframework.web.util.Log4jConfigListener </listener-class> </listener> <context-param> <param-name>log4jConfigLocation</param-name> <param-value>/WEB-INF/log4j.properties</param-value> </context-param> <context-param> <param-name>log4jRefreshInterval</param-name> <param-value>60000</param-value> </context-param> <!-- 默认情况下,会加载WEB-INF/applicationContext.xml这个文件,我们可以通过配置 contextConfigLocation参数改变配置文件的路径 --> <!-- Spring ApplicationContext配置文件的路径,可使用通配符,多个路径用,号分隔 此参数用于后面的Spring-Context loader --> <!-- 使容器启动时,自动加载applicationContext配置,因为它实现了ServletContextListener这个接口,容器启动时会自动执行它实现的方法。 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:*/ApplicationContext.xml,*/action-Servlet.xml</param-value> </context-param> <!-- 加载spring容器 --> <!-- 整合struts 加入中心拦截器 --> <filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter </filter-class> <init-param> <param-name>struts.action.extendion</param-name> <param-value>action</param-value> </init-param> </filter> <!-- <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>--> <!-- Struts --> <servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts.xml</param-value></init-param> <load-on-startup>2</load-on-startup> </servlet> <!-- session超时定义,单位为分钟 --> <session-config> <session-timeout>120</session-timeout> </session-config> <!-- 默认首页定义 --> <welcome-file-list> <welcome-file>login2.jsp</welcome-file> </welcome-file-list> <!-- Error Page定义 --> <error-page> <exception-type>java.lang.Throwable</exception-type> <location>/commons/error.jsp</location> </error-page> <error-page> <error-code>500</error-code> <location>/commons/error.jsp</location> </error-page> <error-page> <error-code>404</error-code> <location>/commons/404.jsp</location> </error-page> <error-page> <error-code>403</error-code> <location>/commons/403.jsp</location> </error-page> </web-app> [/code] [code="strut.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> <constant name="struts.devMode" value="true"/> <constant name="struts.objectFactory" value="spring" ></constant> <package name="calvin" extends="struts-default"> <action name="login" class="/loginAction"> <result name="error">index.jsp</result> <result name="success">/pages/index.jsp</result> </action> </package> </struts>[/code] [code="ApplicationContext.xml"]<?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 http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <!-- Spring容器配置文件 --> <!-- 告诉spring hibernate文件的位置 然后加载 --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/policemanagement?autoReconnect=true&amp;useUnicode=true&amp;characterEncoding=utf-8"/> <property name="username" value="root"/> <property name="password" value="rooot"/> <property name="maxActive" value="100"/> <property name="maxIdle" value="30"/> <property name="maxWait" value="1000"/> <property name="defaultAutoCommit" value="true"/> <property name="removeAbandoned" value="true"/> <property name="removeAbandonedTimeout" value="60"/> <property name="logAbandoned" value="true"/> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="mappingResources" > <list> <value>calvin/po/pojo/hbm/arrestedPerson.hbm.xml</value> <value>calvin/po/pojo/hbm/caseRegisted.hbm.xml</value> <value>calvin/po/pojo/hbm/caseThread.hbm.xml</value> <value>calvin/po/pojo/hbm/caseVictim.hbm.xml</value> <value>calvin/po/pojo/hbm/policeOfficer.hbm.xml</value> <value>calvin/po/pojo/hbm/victimOffice.hbm.xml</value> </list> </property> <property name="hibernateProperties"> <props><prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> <prop key="hbm2ddl.auto">create</prop> </props> </property> </bean> <!-- 为hibernte配置事务管理器 --> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" /> </bean> <!-- daoContext 配置原因 所以放在这边 --> <bean id="dao" class="calvin.dao.imp.BaseDAOHibernate"> <property name="sessionFactory" ref="sessionFactory" /></bean> <bean id="policeOfficerDAO" class="calvin.dao.imp.PoliceOfficerImp"> <property name="sessionFactory" ref="sessionFactory" /></bean> <bean id="arrestedPersonDAO" class="calvin.dao.imp.ArrestedPersonImp"> <property name="sessionFactory" ref="sessionFactory" /></bean> <bean id="caseRegisteredDAO" class="calvin.dao.imp.CaseRegisteredImp"> <property name="sessionFactory" ref="sessionFactory" /></bean> <bean id="caseThreadDAO" class="calvin.dao.imp.CaseThreadImp"> <property name="sessionFactory" ref="sessionFactory" /></bean> <bean id="caseVictimDAO" class="calvin.dao.imp.CaseVictimImp"> <property name="sessionFactory" ref="sessionFactory" /></bean> <bean id="victimOfficeDAO" class="calvin.dao.imp.VictimOfficeImp"> <property name="sessionFactory" ref="sessionFactory" /></bean> <!-- ENd --> <!-- IOC 注入机制 --> <!-- 定义事务模板类 --> <bean id="txProxyTemplate" abstract="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <!-- 注入事务管理器 --> <property name="transactionManager" ref="transactionManager"/> <property name="transactionAttributes"> <props> <prop key="save*">PROPAGATION_REQUIRED</prop> <prop key="remove*">PROPAGATION_REQUIRED</prop> <prop key="*">PROPAGATION_REQUIRED,readOnly</prop> </props> </property></bean> <!-- 配置具体业务逻辑层组件的事物代理 --> <bean id="manager" parent="txProxyTemplate"> <property name="target"> <bean class="calvin.service.BaseManager"> <property name="dao" ref="dao"/> </bean> </property> </bean> <!-- 配置具体的业务逻辑组件额事务代理 --> <!-- 配置业务逻辑组件的事务代理,使用了bean 的继承 --> <!-- 配置所需要的dao组件!!!即这里用的是dao的名字 --> <bean id="facadeManager" parent="txProxyTemplate"> <!-- 配置事务代理时,指定代理的目标,此处的目标是嵌套bean--> <property name="target"> <!-- 嵌套bean无须使用 id属性--> <bean class="calvin.service.imp.FacadeManagerImp"> <!-- 为业务逻辑组件注入DAO组件 --> <property name="victimOfficeDAO" ref="victimOfficeDAO"/> <property name="policeOfficerDAO" ref="policeOfficerDAO"/> <property name="caseVictimDAO" ref="caseVictimDAO"/> <property name="caseThreadDAO" ref="caseThreadDAO"/> <property name="caseRegisteredDAO" ref="caseRegisteredDAO"/> <property name="arrestedPersonDAO" ref="arrestedPersonDAO"/> </bean></property> </bean> <!-- action --> <bean id="myService" class="calvin.action.test.MyServiceImp"/> <bean name="/loginAction" class="calvin.action.LoginAction" scope="prototype"> <property name="ms" ref="myService"/> </bean> </beans>[/code] [code="LoginAction"]package calvin.action; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.junit.Test; import calvin.action.baseAction.BaseAction; import calvin.action.test.MyService; import calvin.po.pojo.PoliceOfficer; public class LoginAction extends BaseAction{ private String username; private String password; private MyService ms; public MyService getMs() { return ms; } public void setMs(MyService ms) { this.ms = ms; } 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; } @Override public String execute() throws Exception{ System.out.println("AAA"); if(ms.valid(getUsername(),getPassword())){ return new String("success"); }else{ return "error";} } } [/code] [code="MyServiceImp"]package calvin.action.test; public class MyServiceImp implements MyService{ public boolean valid(String username,String pass){ return true; } } [/code] 首页配置就是一个很简单的登陆页面.
Ajax点击按钮,没有反应
test.jsp <%@ page contentType="text/html;charset=GB2312"%> <%@ taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>AJAX提交请求测试页面</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <script type="text/javascript" src="js/jquery-1.8.0.js"></script> <script type="text/javascript" src="js/json.js"></script> </head> <script language="javascript"> $(document).ready(function(){ $("#btn").click(function(){ $.ajax({ url: "AjaxEventHandleAction", type: "POST", data: {"AppCode":"50201A","DataSets":"2","Datas":"[{'name':'jim','age':'20'},{'name':'jim','age':'20'}]"}, dataType: "json", success:function(data) { var jsonStr = eval("("+data+")"); //alert(data); document.getElementById("info").innerHTML = "retAppCode: [ "+jsonStr.retAppCode+" ] DataSets: [ "+jsonStr.retDataSets+" ] 信息:[ "+jsonStr.retDatas[0].info+" ] "; //alert("success:OperCode="+jsonStr.OperCode); //alert("success:DataSets="+jsonStr.DataSets); //alert("success:Datas[0].name="+jsonStr.Datas[0].name); //alert("success:Datas[0].age="+jsonStr.Datas[0].age); }, error:function(data) { alert("error:"); } }); }); }); </script> <body> <div id="info"></div> <s:submit value="%{getText('test')}" id="btn"/> </body> </html> 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"> <welcome-file-list> <welcome-file>welcome.html</welcome-file> <welcome-file>login.html</welcome-file> <welcome-file>login.jsp</welcome-file> </welcome-file-list> <listener> <listener-class>com.essa.config.InitSys</listener-class> </listener> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <error-page> <error-code>404</error-code> <location>/error.jsp</location> </error-page> <error-page> <exception-type>java.lang.Exception</exception-type> <location>/error.jsp</location> </error-page> <error-page> <exception-type>401</exception-type> <location>/error.jsp</location> </error-page> <error-page> <exception-type>500</exception-type> <location>/error.jsp</location> </error-page> </web-app> Struts.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> <struts> <include file="struts-default.xml"/> <package name="essa" extends="json-default"> <interceptors> <interceptor name="essaBoundaryInterceptor" class="com.essa.Interceptor.essaBoundaryInterceptor"> <param name="filterURISwitch">/welcome.html;/login;/html/help;</param> </interceptor> <interceptor-stack name="essaDefaultStack"> <!-- interceptor-ref name="json" /--> <interceptor-ref name="essaBoundaryInterceptor" /> <interceptor-ref name="defaultStack" /> </interceptor-stack> </interceptors> <default-interceptor-ref name="essaDefaultStack" /> <default-action-ref name="DefaultAction" /> <global-results> <result name="failPage" type="redirect">/login.jsp</result> </global-results> <action name="DefaultAction" class="com.essa.action.DefaultAction"> <result name="LoginFail" type="redirect">/LoginFail.html</result> </action> <action name="AjaxEventHandleAction" class="com.essa.action.AjaxEventHandleAction"> <result type="json"><param name="root">result</param></result> </action> <action name="LoginAction" class="com.essa.action.LoginAction"> <result name="LoginOK" type="dispatcher">/website/home.jsp</result> <result name="LoginFail" type="redirect">/LoginFail.html</result> <result name="Normal" type="redirect">/welcome.html</result> <result name="Help" type="dispatcher">/html/help/help.html</result> </action> <!-- 当调用具体的分值结转申请、异议申请等后台执行转长的生成文件,静态化等时,先生成等待进度条,配置一个createStaticsESLFileAction,配置<interceptor-ref name="execAndWait"拦截器>注释 --> </package> <constant name="struts.i18n.encoding" value="UTF-8" /> <constant name="struts.action.extension" value="action"/> </struts> Action: package com.essa.action; import java.io.IOException; import net.sf.json.JSONObject; import org.apache.log4j.Logger; import com.essa.util.DealRequest; import com.essa.util.VertifyRequest; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; /** * @name EssaAction * @time 2015-06-20 * @version 1.0.0 * @author ZhangDongxu */ public class AjaxEventHandleAction extends ActionSupport { private static Logger logger = Logger.getLogger(AjaxEventHandleAction.class.getName()); private static final long serialVersionUID = 1L; private String result; private String AppCode ; private String DataSets ; private String Datas ; private int res = 999; public String getResult() { return result.trim(); } public void setResult(String result) { this.result = result.trim(); } public String getAppCode() { return AppCode.trim(); } public void setAppCode(String appCode) { AppCode = appCode.trim(); } public String getDataSets() { return DataSets.trim(); } public void setDataSets(String dataSets) { DataSets = dataSets.trim(); } public String getDatas() { return Datas.trim(); } public void setDatas(String datas) { Datas = datas.trim(); } public String execute(){ logger.info(">>>>>> [请求信息:AppCode = <"+AppCode+">,DataSets = <"+DataSets+">,Datas = <"+Datas+">]"); try { res = VertifyRequest.vertifyRequest(AppCode,DataSets,Datas); } catch (IOException e) {} if(res!=0){ logger.info(">>>>>> [请求校验失败:res = <"+res+">]"); result = VertifyRequest.getErrorResult(AppCode,res,Datas); } else{ logger.info(">>>>>> [请求校验成功:res = <"+res+">]"); result = DealRequest.getResult(AppCode,DataSets,Datas); } result = JSONObject.fromObject(result).toString(); return SUCCESS; } } /* * // ActionContext ac = ActionContext.getContext(); // String rand = ac.getSession().size()+""; System.out.println(name+pwd); Datas = "[{'name':'"+name+"','pwd':'"+pwd+"'}]"; System.out.println(Datas); logger.info(">>>>>> [锟斤拷锟斤拷锟斤拷息锟斤拷AppCode = <"+AppCode+">,DataSets = <"+DataSets+">,Datas = <"+Datas+">]"); try { res = VertifyRequest.vertifyRequest(AppCode,DataSets,Datas); } catch (IOException e) {} if(res!=0){ logger.info(">>>>>> [锟斤拷锟斤拷校锟斤拷失锟杰o拷res = <"+res+">]"); result = VertifyRequest.getErrorResult(AppCode,res,Datas); } else{ logger.info(">>>>>> [锟斤拷锟斤拷校锟斤拷晒锟斤拷锟絩es = <"+res+">]"); result = DealRequest.getResult(AppCode,DataSets,Datas); } result = JSONObject.fromObject(result).toString(); return "LoginOK"; */ 可以直接访问Action但是通过Ajax点击按钮访问的时候就没有访问 这个是拦截器: package com.essa.Interceptor; import org.apache.log4j.Logger; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.Interceptor; /** * @name MyInterceptor * @time 2015-06-20 * @version 1.0.0 * @author ZhangDongxu */ public class essaBoundaryInterceptor implements Interceptor { private static Logger logger = Logger.getLogger(essaBoundaryInterceptor.class.getName()); /** * 自定义拦截器执行的代码 * 作用:拦截请求 * */ private static final long serialVersionUID = 1L; public void destroy() {} public void init() {} public String intercept(ActionInvocation invocation) throws Exception { logger.info(">>>>>> [请求信息:执行了自定义拦截器的代码!!!!]"); return invocation.invoke(); } } 非常感谢
爬虫福利二 之 妹子图网MM批量下载
爬虫福利一:27报网MM批量下载 点击 看了本文,相信大家对爬虫一定会产生强烈的兴趣,激励自己去学习爬虫,在这里提前祝:大家学有所成! 目标网站:妹子图网 环境:Python3.x 相关第三方模块:requests、beautifulsoup4 Re:各位在测试时只需要将代码里的变量path 指定为你当前系统要保存的路径,使用 python xxx.py 或IDE运行即可。 ...
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 free -m 其中:m表示兆,也可以用g,注意都要小写 Men:表示物理内存统计 total:表示物理内存总数(total=used+free) use...
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发...
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 演示地点演示 html代码如下` music 这个年纪 七月的风 音乐 ` 然后就是css`*{ margin: 0; padding: 0; text-decoration: none; list-...
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。
数据库优化 - SQL优化
以实际SQL入手,带你一步一步走上SQL优化之路!
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 cpp 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7 p...
通俗易懂地给女朋友讲:线程池的内部原理
餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹...
面试官:你连RESTful都不知道我怎么敢要你?
干货,2019 RESTful最贱实践
JDK12 Collectors.teeing 你真的需要了解一下
前言 在 Java 12 里面有个非常好用但在官方 JEP 没有公布的功能,因为它只是 Collector 中的一个小改动,它的作用是 merge 两个 collector 的结果,这句话显得很抽象,老规矩,我们先来看个图(这真是一个不和谐的图????): 管道改造经常会用这个小东西,通常我们叫它「三通」,它的主要作用就是将 downstream1 和 downstre...
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看...
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
【图解经典算法题】如何用一行代码解决约瑟夫环问题
约瑟夫环问题算是很经典的题了,估计大家都听说过,然后我就在一次笔试中遇到了,下面我就用 3 种方法来详细讲解一下这道题,最后一种方法学了之后保证让你可以让你装逼。 问题描述:编号为 1-N 的 N 个士兵围坐在一起形成一个圆圈,从编号为 1 的士兵开始依次报数(1,2,3…这样依次报),数到 m 的 士兵会被杀死出列,之后的士兵再从 1 开始报数。直到最后剩下一士兵,求这个士兵的编号。 1、方...
致 Python 初学者
欢迎来到“Python进阶”专栏!来到这里的每一位同学,应该大致上学习了很多 Python 的基础知识,正在努力成长的过程中。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所面临的处境。我从2007年开始接触 python 这门编程语言,从2009年开始单一使用 python 应对所有的开发工作,直至今天。回顾自己的学习过程,也曾经遇到过无数的困难,也曾经迷茫过、困惑过。开办这个专栏,正是为了帮助像我当年一样困惑的 Python 初学者走出困境、快速成长。希望我的经验能真正帮到你
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
GitHub标星近1万:只需5秒音源,这个网络就能实时“克隆”你的声音
作者 | Google团队 译者 | 凯隐 编辑 | Jane 出品 | AI科技大本营(ID:rgznai100) 本文中,Google 团队提出了一种文本语音合成(text to speech)神经系统,能通过少量样本学习到多个不同说话者(speaker)的语音特征,并合成他们的讲话音频。此外,对于训练时网络没有接触过的说话者,也能在不重新训练的情况下,仅通过未知...
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员...
网易云6亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验。 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落地过程中遇到的挑战和解决方案。 将从如下两个部分展开: AI算法在音乐推荐中的应用 音乐场景下的 AI 思考 从 2013 年 4 月正式上线至今,网易云音乐平台持续提供着:乐屏社区、UGC...
【技巧总结】位运算装逼指南
位算法的效率有多快我就不说,不信你可以去用 10 亿个数据模拟一下,今天给大家讲一讲位运算的一些经典例子。不过,最重要的不是看懂了这些例子就好,而是要在以后多去运用位运算这些技巧,当然,采用位运算,也是可以装逼的,不信,你往下看。我会从最简单的讲起,一道比一道难度递增,不过居然是讲技巧,那么也不会太难,相信你分分钟看懂。 判断奇偶数 判断一个数是基于还是偶数,相信很多人都做过,一般的做法的代码如下...
【管理系统课程设计】美少女手把手教你后台管理
【文章后台管理系统】URL设计与建模分析+项目源码+运行界面 栏目管理、文章列表、用户管理、角色管理、权限管理模块(文章最后附有源码) 1. 这是一个什么系统? 1.1 学习后台管理系统的原因 随着时代的变迁,现如今各大云服务平台横空出世,市面上有许多如学生信息系统、图书阅读系统、停车场管理系统等的管理系统,而本人家里就有人在用烟草销售系统,直接在网上完成挑选、购买与提交收货点,方便又快捷。 试想,若没有烟草销售系统,本人家人想要购买烟草,还要独自前往药...
4G EPS 第四代移动通信系统
目录 文章目录目录4G 与 LTE/EPCLTE/EPC 的架构E-UTRANE-UTRAN 协议栈eNodeBEPCMMES-GWP-GWHSSLTE/EPC 协议栈概览 4G 与 LTE/EPC 4G,即第四代移动通信系统,提供了 3G 不能满足的无线网络宽带化,主要提供数据(上网)业务。而 LTE(Long Term Evolution,长期演进技术)是电信领域用于手机及数据终端的高速无线通...
日均350000亿接入量,腾讯TubeMQ性能超过Kafka
整理 | 夕颜出品 | AI科技大本营(ID:rgznai100)【导读】近日,腾讯开源动作不断,相继开源了分布式消息中间件TubeMQ,基于最主流的 OpenJDK8开发的Tencent Kona JDK,分布式HTAP数据库 TBase,企业级容器平台TKEStack,以及高性能图计算框架Plato。短短一周之内,腾讯开源了五大重点项目。其中,TubeMQ是腾讯大数据平台部门应用的核心组件,...
8年经验面试官详解 Java 面试秘诀
作者 |胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。 Java程序员准备和投递简历的实...
面试官如何考察你的思维方式?
1.两种思维方式在求职面试中,经常会考察这种问题:北京有多少量特斯拉汽车?某胡同口的煎饼摊一年能卖出多少个煎饼?深圳有多少个产品经理?一辆公交车里能装下多少个乒乓球?一个正常成年人有多少根头发?这类估算问题,被称为费米问题,是以科学家费米命名的。为什么面试会问这种问题呢?这类问题能把两类人清楚地区分出来。一类是具有文科思维的人,擅长赞叹和模糊想象,它主要依靠的是人的第一反应和直觉,比如小孩...
so easy! 10行代码写个"狗屁不通"文章生成器
前几天,GitHub 有个开源项目特别火,只要输入标题就可以生成一篇长长的文章。 背后实现代码一定很复杂吧,里面一定有很多高深莫测的机器学习等复杂算法 不过,当我看了源代码之后 这程序不到50行 尽管我有多年的Python经验,但我竟然一时也没有看懂 当然啦,原作者也说了,这个代码也是在无聊中诞生的,平时撸码是不写中文变量名的, 中文...
知乎高赞:中国有什么拿得出手的开源软件产品?(整理自本人原创回答)
知乎高赞:中国有什么拿得出手的开源软件产品? 在知乎上,有个问题问“中国有什么拿得出手的开源软件产品(在 GitHub 等社区受欢迎度较好的)?” 事实上,还不少呢~ 本人于2019.7.6进行了较为全面的回答,对这些受欢迎的 Github 开源项目分类整理如下: 分布式计算、云平台相关工具类 1.SkyWalking,作者吴晟、刘浩杨 等等 仓库地址: apache/skywalking 更...
MySQL数据库总结
一、数据库简介 数据库(Database,DB)是按照数据结构来组织,存储和管理数据的仓库。 典型特征:数据的结构化、数据间的共享、减少数据的冗余度,数据的独立性。 关系型数据库:使用关系模型把数据组织到数据表(table)中。现实世界可以用数据来描述。 主流的关系型数据库产品:Oracle(Oracle)、DB2(IBM)、SQL Server(MS)、MySQL(Oracle)。 数据表:数...
20行Python代码爬取王者荣耀全英雄皮肤
引言 王者荣耀大家都玩过吧,没玩过的也应该听说过,作为时下最火的手机MOBA游戏,咳咳,好像跑题了。我们今天的重点是爬取王者荣耀所有英雄的所有皮肤,而且仅仅使用20行Python代码即可完成。 准备工作 爬取皮肤本身并不难,难点在于分析,我们首先得得到皮肤图片的url地址,话不多说,我们马上来到王者荣耀的官网: 我们点击英雄资料,然后随意地选择一位英雄,接着F12打开调试台,找到英雄原皮肤的图片...
相关热词 c# 输入ip c# 乱码 报表 c#选择结构应用基本算法 c# 收到udp包后回包 c#oracle 头文件 c# 序列化对象 自定义 c# tcp 心跳 c# ice连接服务端 c# md5 解密 c# 文字导航控件
立即提问