如果你不喜欢我请直接告诉我-------路
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";
}
}
}
LoginAction.java的源码
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";
}
}
Bussinessction.java的源码
package com.hbyooge.action;
public class BussinessAction {
public String index(){
return "success";
}
}
login.jsp主要代码片段
<body>
<h1>登录</h1>
<hr/>
<form action="login_login.do">
用户名:<input name="username"/><br/>
密码:<input name="password"/><br/>
<input type="submit" value="登录"/>
</form>
</body>
relogin.jsp主要代码片段
<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