Struts2学习笔记(第四天)
来源:互联网 发布:sql多表删除 编辑:程序博客网 时间:2024/06/14 10:34
Struts2_day04
1.今日任务
·使用Struts2完成对用户登录的权限拦截器代码编写
2.相关知识
2.1 Struts2拦截器
2.1.1 拦截器的概述
java里的拦截器是动态拦截Action调用的对象。它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行,同时也提供了一种可以提取action中可重用部分的方式。在AOP(Aspect-OrientedProgramming)中拦截器用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。
2.1.2 Struts2执行流程
2.1.3 自定义拦截器
方式1:
//拦截器:第一种创建方式//拦截器生命周期:随项目的启动而创建,随项目关闭而销毁public class MyInterceptor implements Interceptor {@Override//初始化方法public void init() {}@Override//拦截方法public String intercept(ActionInvocation arg0) throws Exception {return null;}@Override//销毁方法public void destroy() {}}
//创建方式2: 继承AbstractInterceptor -> struts2的体贴//帮我们空实现了init 和 destory方法. 我们如果不需要实现这两个方法,就可以只实现intercept方法public class MyInterceptor2 extends AbstractInterceptor {@Overridepublic String intercept(ActionInvocation arg0) throws Exception {return null;}}
方式3:
//继承:MethodFilterInterceptor 方法过滤拦截器//功能: 定制拦截器拦截的方法.//定制哪些方法需要拦截.//定制哪些方法不需要拦截public class MyInterceptor3 extends MethodFilterInterceptor{@Overrideprotected String doIntercept(ActionInvocation invocation) throws Exception {//前处理System.out.println("MyInterceptor3 的前处理!");//放行String result = invocation.invoke();//后处理System.out.println("MyInterceptor3 的后处理!");return result;}}
2.1.4 拦截器配置
<interceptors><!-- 1.注册拦截器 --><interceptor name="myInter3" class="cn.itcast.a_interceptor.MyInterceptor3"></interceptor><!-- 2.注册拦截器栈 --><interceptor-stack name="myStack"><!-- 自定义拦截器引入(建议放在20个拦截器之前) --><interceptor-ref name="myInter3"><!-- 指定哪些方法不拦截 <param name="excludeMethods">add,delete</param> --> <!-- 指定哪些方法需要拦截 --> <param name="includeMethods">add,delete</param></interceptor-ref><!-- 引用默认的拦截器栈(20个) --><interceptor-ref name="defaultStack"></interceptor-ref></interceptor-stack></interceptors><!-- 3.指定包中的默认拦截器栈 --><default-interceptor-ref name="myStack"></default-interceptor-ref>
3.CRM案例练习
使用Struts2完成对用户登录的权限拦截器代码编写
struts.xml配置文件
<?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.devMode" value="true"></constant><constant name="struts.i18n.encoding" value="UTF-8"></constant><constant name="struts.configuration.xml.reload" value="true" /><package name="crm" namespace="/" extends="struts-default"><!-- 配置拦截器 --><interceptors><interceptor name="loginInterceptor" class="com.itheima.web.interceptor.LoginInterceptor"></interceptor><interceptor-stack name="myStack"><interceptor-ref name="loginInterceptor"><!--指定不包含login方法 --><param name="excludeMethods">login</param></interceptor-ref><!-- 引用默认拦截器栈 --><interceptor-ref name="defaultStack"></interceptor-ref></interceptor-stack></interceptors><!-- 指定默认拦截器栈 --><default-interceptor-ref name="myStack"></default-interceptor-ref><!-- 定义全局结果集 --><global-results><result name="login">/login.jsp</result></global-results><!-- 配置异常处理映射 --><global-exception-mappings><!-- 如果出现java.lang.RuntimeException异常,就将跳转到名为error的结果 --><exception-mapping result="error" exception="java.lang.RuntimeException"></exception-mapping></global-exception-mappings><action name="CustomerAction_*" class="com.itheima.web.action.CustomerAction"method="{1}"><result name="list">/jsp/customer/list.jsp</result><result name="toList" type="redirectAction"><param name="actionName">CustomerAction_list</param><param name="namespace">/</param></result></action><action name="UserAction_*" class="com.itheima.web.action.UserAction" method="{1}"><result name="toIndex" type="redirect">/index.htm</result><result name="error" >/login.jsp</result></action></package></struts>
UserAction:
public class UserAction extends ActionSupport implements ModelDriven<User>{private User user = new User();private UserService userService = new UserServiceImpl();public String login() throws Exception {//调用业务层登录User u = userService.login(user);//放入session域ActionContext.getContext().getSession().put("user", u);return "toIndex";}@Overridepublic User getModel() {// TODO Auto-generated method stubreturn this.user ;}}
UserService:
public class UserServiceImpl implements UserService {private UserDao userDao = new UserDaoImpl();@Overridepublic User login(User user) throws Exception {// TODO Auto-generated method stubUser existUser = null;// 开启事务Transaction tx = HibernateUtils.getCurrentSession().beginTransaction();// 获取用户existUser = userDao.getByUsername(user.getUser_name());// 获取用户后提交事务tx.commit();// 判断用户是否存在if (existUser == null) {throw new RuntimeException("用户名不存在!");} else {// 判断密码是否正确if (!existUser.getUser_password().equals(user.getUser_password())) {throw new RuntimeException("密码错误!");}}return existUser;}}
UserDao:
public class UserDaoImpl implements UserDao {@Overridepublic User getByUsername(String user_name) throws Exception {// TODO Auto-generated method stubSession session = HibernateUtils.getCurrentSession();String hql = "from User where user_name=?";Query query = session.createQuery(hql);query.setParameter(0, user_name);return (User) query.uniqueResult();}}
User类
public class User {private Long user_id;private String user_name;private String user_password;private Character user_state;public User() {super();// TODO Auto-generated constructor stub}public User(Long user_id, String user_name, String user_password, Character user_state) {super();this.user_id = user_id;this.user_name = user_name;this.user_password = user_password;this.user_state = user_state;}public Long getUser_id() {return user_id;}public void setUser_id(Long user_id) {this.user_id = user_id;}public String getUser_name() {return user_name;}public void setUser_name(String user_name) {this.user_name = user_name;}public String getUser_password() {return user_password;}public void setUser_password(String user_password) {this.user_password = user_password;}public Character getUser_state() {return user_state;}public void setUser_state(Character user_state) {this.user_state = user_state;}@Overridepublic String toString() {return "User [user_id=" + user_id + ", user_name=" + user_name + ", user_password=" + user_password+ ", user_state=" + user_state + "]";}}
User.hbm.xml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping package="com.itheima.domain"><!-- name属性为类名 因为上面的 hibernate-mapping已经指定类的包名位置 所以这里只要写类名即可 如果上面没有指定 需要写全类名 com.itheima.domain.Customertable属性为数据库里表的名字--><class name="User" table="sys_user" ><!-- 映射主键id字段 --><id name="user_id" column="user_id"><generator class="native"></generator></id><!-- name属性为实体类的字段名 column为数据库里表的字段名 一般为了规范都是设置成一样的 --><property name="user_name" column="user_name"/><property name="user_password" column="user_password"/><property name="user_state" column="user_state"/></class></hibernate-mapping>
登录页面:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ taglib uri="/struts-tags" prefix="s" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/frameset.dtd"><HTML xmlns="http://www.w3.org/1999/xhtml"><HEAD><META http-equiv=Content-Type content="text/html; charset=utf-8"><STYLE type=text/css>BODY {FONT-SIZE: 12px; COLOR: #ffffff; FONT-FAMILY: 宋体}TD {FONT-SIZE: 12px; COLOR: #ffffff; FONT-FAMILY: 宋体}</STYLE><script type="text/javascript">window.onload=function(){if(window.parent != window){window.parent.location.href = '${pageContext.request.contextPath}/login.jsp';}}</script><META content="MSHTML 6.00.6000.16809" name=GENERATOR></HEAD><BODY><FORM id=form1 name=form1 method=post action="${pageContext.request.contextPath}/UserAction_login"><DIV id=UpdatePanel1><DIV id=div1 style="LEFT: 0px; POSITION: absolute; TOP: 0px; BACKGROUND-COLOR: #0066ff"></DIV><DIV id=div2 style="LEFT: 0px; POSITION: absolute; TOP: 0px; BACKGROUND-COLOR: #0066ff"></DIV><DIV> </DIV><DIV><TABLE cellSpacing=0 cellPadding=0 width=900 align=center border=0> <TBODY> <TR> <TD style="HEIGHT: 105px"><IMG src="images/login_1.gif" border=0></TD></TR> <TR> <TD background=images/login_2.jpg height=300> <TABLE height=300 cellPadding=0 width=900 border=0> <TBODY> <TR> <TD colSpan=2 height=35></TD></TR> <TR> <TD width=360></TD> <TD> <TABLE cellSpacing=0 cellPadding=2 border=0> <TBODY> <TR> <TD style="HEIGHT: 28px" width=80>登 录 名:</TD> <TD style="HEIGHT: 28px" width=150><INPUT id=txtName style="WIDTH: 130px" name=user_name></TD> <TD style="HEIGHT: 28px" width=370><SPAN id=RequiredFieldValidator3 style="FONT-WEIGHT: bold; VISIBILITY: hidden; COLOR: white">请输入登录名</SPAN></TD></TR> <TR> <TD style="HEIGHT: 28px">登录密码:</TD> <TD style="HEIGHT: 28px"><INPUT id=txtPwd style="WIDTH: 130px" type=password name=user_password></TD> <TD style="HEIGHT: 28px"><SPAN id=RequiredFieldValidator4 style="FONT-WEIGHT: bold; VISIBILITY: hidden; COLOR: white">请输入密码</SPAN></TD></TR> <TR> <TD style="HEIGHT: 28px">验证码:</TD> <TD style="HEIGHT: 28px"><INPUT id=txtcode style="WIDTH: 130px" name=txtcode></TD> <TD style="HEIGHT: 28px"> </TD></TR> <TR> <TD style="HEIGHT: 18px" colspan="2"><font color="red"><s:property value="exception.message"/></font></TD> <TD style="HEIGHT: 18px"></TD></TR> <TR> <TD></TD> <TD><INPUT id=btn style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" onclick='javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("btn", "", true, "", "", false, false))' type=image src="images/login_button.gif" name=btn> </TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></TD></TR> <TR> <TD><IMG src="images/login_3.jpg" border=0></TD></TR></TBODY></TABLE></DIV></DIV></FORM></BODY></HTML>
0 0
- Struts2学习笔记(第四天)
- struts2学习之第四天
- 第四天学习笔记
- 第四天学习笔记
- 学习笔记第四天
- C程序设计 第四版(谭浩强)-学习笔记-第四天
- struts2学习_第四天(参数接收)
- struts2笔记整理第四天(项目实战)
- hibernate学习笔记第四天(1)
- hibernate学习笔记第四天(2)
- hibernate学习笔记第四天(3)
- Hibernate学习笔记(第四天)
- JavaScript学习笔记(第四天)
- Koa2 学习笔记(第四天)
- Struts2框架学习(第四讲)
- Sruts2 学习笔记(马士兵教程 struts2.1.6版本) 第四天
- Android学习笔记: 第四天
- java学习笔记--第四天
- hdu2838 cow sorting
- thinkphp upload上传显示不存在文件解决
- Hadoop学习三(java api 对hdfs常用操作)
- PowerDesigner生成sql语句时自动导出注释
- C++四种强制类型转换运算符
- Struts2学习笔记(第四天)
- Netty 网络IO BIO
- 浏览器事件Event.deepPath属性
- js 检测浏览器是否联网 (navigator.onLine)
- JSP自定义标签--分页
- RXjava实现计时按钮
- Cookie
- React Native 之 Flex
- UIWebView网页cookie丢失