如果你不喜欢我请直接告诉我-------路
Ubuntu终于装好了,让我开始Ubuntu下的开发吧。安装JDK、tomcate、eclipse、myeclipse以及破解什么的网上到处有教程,是在不难,关键在于多倒腾。
拦截器,所谓拦截器就是你在进行http请求时,stuts2拦截你的请求(AOP),然后做一定的处理,这就是拦截器的作用。这样说很抽象,举个例子:假如你现在有一个系统,进入系统要先登录,登录后才可以做一些其他操作。那你如何保证你做一些操作时保证用户已经登录了,而不是用户知道你的一些操作的URL直接访问的呢?于是你就可以在用户http请求时,拦截他的请求检查session中是否有用户的用户名,如果有就正常运行结果,如果没有让他重新登录。
拦截器其实很简单看下下面的配置,聪明如你肯定是能理解的了。
以下代码是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> <!-- 修改stuts2拦截后缀 --> <constant name="struts.action.extension" value="do"></constant> <package name="default" extends="struts-default"> <!-- 拦截器 --> <interceptors> <!-- 声明自定义拦截器 --> <interceptor name="loginInterceptor" class="com.hbyooge.interceptor.LoginInterceptor"></interceptor> <!-- 拦截器栈 --> <interceptor-stack name="checkLoginStack"> <!-- struts2默认拦截器 --> <interceptor-ref name="defaultStack"></interceptor-ref> <!-- 自定义拦截器 --> <interceptor-ref name="loginInterceptor"></interceptor-ref> </interceptor-stack> </interceptors> <!-- 声明默认拦截器。那么在所有的action中如果不显示配置拦截器的话,就默认调用这个声明的拦截器 --> <default-interceptor-ref name="checkLoginStack"></default-interceptor-ref> <!-- 全局结果 --> <global-results> <result name="login">/reLogin.jsp</result> </global-results> <!-- Action --> <action name="default_*" class="com.hbyooge.action.BussinessAction" method="{1}"> <result name="success" >/index.jsp</result> <!-- 显示声明在这个Action中使用checkLoginStack拦截器 --> <interceptor-ref name="checkLoginStack"/> </action> </package> <package name="public" extends="default"> <!-- 登录 --> <action name="login_*" class="com.hbyooge.action.LoginAction" method="{1}"> <result name="success">/index.jsp</result> <!-- 显示声明在这个Action中使用defaultStack拦截器 --> <interceptor-ref name="defaultStack"></interceptor-ref> </action> <!-- 业务 --> <action name="bussiness_*" class="com.hbyooge.action.BussinessAction" method="{1}"> <result name="success">/index.jsp</result> </action> </package> </struts>
1、用interceptor声明一个自定义的拦截器,name拦截器名称,class用来实例化拦截器的类
<interceptor name="loginInterceptor" class="com.hbyooge.interceptor.LoginInterceptor"></interceptor>2、interceptor-stack声明一个拦截栈
<pre name="code" class="html"><interceptor-stack name="checkLoginStack"> <!-- struts2默认拦截器 --> <interceptor-ref name="defaultStack"></interceptor-ref> <!-- 自定义拦截器 --> <interceptor-ref name="loginInterceptor"></interceptor-ref> </interceptor-stack>
拦截器LoginInterceptor.java的源码
package com.hbyooge.interceptor; import java.util.Map; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.AbstractInterceptor; /** * 拦截器 * @author hugsunshine */ public class LoginInterceptor extends AbstractInterceptor { private static final long serialVersionUID = 1L; @Override public String intercept(ActionInvocation arg0) throws Exception { // 获取session Map<String,Object> session = arg0.getInvocationContext().getSession(); // 获取登录后的用户名 Object obj = session.get("username"); if(obj != null){ // 已经登录 return arg0.invoke(); } else{ // 没有登录 return "login"; } } }
package com.hbyooge.action; import javax.servlet.http.HttpSession; import org.apache.struts2.ServletActionContext; public class LoginAction { /** * 登录验证 * @return */ public String login(){ HttpSession session = ServletActionContext.getRequest().getSession(); session.setAttribute("username", "admin"); return "success"; } }
package com.hbyooge.action; public class BussinessAction { public String index(){ return "success"; } }
<body> <h1>登录</h1> <hr/> <form action="login_login.do"> 用户名:<input name="username"/><br/> 密码:<input name="password"/><br/> <input type="submit" value="登录"/> </form> </body>
<body> 您还没有登录,请登录! <br> <s:include value="/login.jsp"></s:include> </body>
<body> 登录成功! <br> </body>
运行结果一:直接敲入URL---http://localhost:8080/HelloWordTest/bussiness_index.do
说明:HelloWordTest是我的Web工程名字,bussiness_index.do .do后缀是我修改了,你也可以自定义自己的后缀
运行结果二:
1、敲入URL:http://localhhost:8080/HelloWordTest
说明:通常默认首页是index.jsp,我这里默认首页就是login.jsp(如何修改成login.jsp,自己百度去吧)
如图所示填写,点击登录
2、在浏览器的新的选项卡的地址栏敲入:http://localhost:8080/HelloWordTest/bussiness_index.do
看到如上代码以及结果,聪明如你一定已经理解了。