Struts基础

         最近看了一下struts,很久都没有用了,回顾了一下,strust主要的作用就是起到一个请求分发的作用,将前端不同请求交给不同的action处理,并将这些处理的结果返回给前端进行显示。这是我对strust一点简单的理解。

        下面是一些简单的代码

         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" 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>AllTest</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  
  
  <!-- 配置Struts2的前端控制器 -->
	<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>

struts.xml配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
    "http://struts.apache.org/dtds/struts-2.1.7.dtd">

<struts>
	
	<package name="login" namespace="/novel" extends="struts-default">
	        <!-- 拦截器 -->
	        <interceptors>
	              <interceptor name="firstInterceptor" class="struts.test.FirstIntceptor"></interceptor>
	              <interceptor name="SecondInterceptor" class="struts.test.SecondIntceptor"></interceptor>
	              <interceptor-stack name="interceptorStack">
	                   <interceptor-ref name="firstInterceptor"></interceptor-ref>
	                   <interceptor-ref name="SecondInterceptor"></interceptor-ref>
	                   <interceptor-ref name="defaultStack"></interceptor-ref>
	              </interceptor-stack>
	        </interceptors>
	        
	        <action name="login" class="struts.test.LoginAction" method="login">
	            <interceptor-ref name="interceptorStack"></interceptor-ref>
	            <result name="error">/user/login.jsp</result>
	            <result name="success">/index.jsp</result>
	        </action>	         
	</package>

</struts>

登陆页面login.jsp

<%@ page language="java" import="java.util.*" pageEncoding="GBK"  contentType="text/html;charset=GBK"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK" />
<title>无线活动录入后台</title>
<link href="http://js.soufunimg.com/wireless_m/touch/css/ztback.css" rel="stylesheet" type="text/css"/>
<script src="http://js.soufunimg.com/wireless_m/touch/js/jquery.js"></script>


</head>
<body>
<div class="wrap" style="width:330px; height:140px; margin-top:200px; border:1px solid #A2A2A2;-moz-border-radius:6px; -webkit-border-radius:6px; border-radius:6px;box-shadow: 0 0 8px #A2A2A2; -webkit-box-shadow:0 0 8px #A2A2A2; -moz-box-shadow:0 0 8px #A2A2A2; padding:20px">
  <!-- 
        action中的“/novel/login/login”,novel对应struts.xml中的package的namespace的值
        login对应struts.xml中的action的name的值                  
  -->
  <form class="loginForm" action="/novel/login" method="post">
  <table width="100%" height="${empty param.username_change?80:120}" border="0" cellspacing="0" > 
    <tr>
      <td width="13%">账号</td>
      <td width="87%"><input id="userName" name="userName" type="text" class="loginput" value=""/></td>
    </tr>
    <tr>
      <td>密码</td>
      <td><input id="password" name="password" type="password"  class="loginput"/></td>
    </tr>
    <tr>
     <td></td><td id="warn" class="loginput" style="display:none;color:red">用户名或密码错误</td>
    </tr>
    </table>
    <input id="submit" type="submit" class="pindbarbtn ablack" style="width:60px;margin-left:auto; margin-right:auto; text-align:center; margin-top:8px; margin-bottom:8px" value="登录"></input>
  </form>
  <div>
      
  </div>
  <div>
    <label></label>
  </div>

 
  </div>
  <script type="text/javascript">
var status = "${requestScope.status}";
if(status=="error"){
	$("#warn").show();
}
</script>
</body>

</html>

业务控制器你,LoginAction.java

package struts.test;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.ServletActionContext;

public class LoginAction {    
	private String userName;
	private String password;
	
	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 String checkLogin(){
		HttpServletRequest request = ServletActionContext.getRequest();
		if("wangbiao".equals(userName)&&"654321".equals(password)){			
			request.setAttribute("hello", password );
			request.setAttribute("status", "success");
			return "success";
		}else{
			request.setAttribute("status", "error");
			return "error";
		}
	}

}

两个拦截器

package struts.test;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;


public class FirstIntceptor implements Interceptor {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@Override
	public void destroy() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void init() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public String intercept(ActionInvocation arg0) throws Exception {
		// TODO Auto-generated method stub
		System.out.println("我是第一个拦截器,action执行之前拦截");
		arg0.invoke(); 
		System.out.println("我是第一个拦截器,action执行之后拦截");
		return null;
	}

	

}

package struts.test;

import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.ServletActionContext;
import org.xml.sax.SAXException;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;


public class SecondIntceptor implements Interceptor{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@Override
	public void destroy() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void init() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		// TODO Auto-generated method stub		
		
		Map<String, Object> paramMap = invocation.getInvocationContext().getParameters();
		/**
		 * 拦截器获取页面传过来的值
		 */
		String[] usernameArr = (String[])paramMap.get("userName");
		String[] passwordArr = (String[])paramMap.get("password");
		System.out.println("我是第二个拦截器,action执行之前拦截");
		System.out.println("用户名:"+usernameArr[0]+"密码:"+passwordArr[0]);
		if("123456".equals(passwordArr[0])){
			return "success";
		}else{
			 //就是调用相应的action
			invocation.invoke();
			System.out.println("我是第二个拦截器,action执行之后拦截");
		}
		return null;
	}


}

跳转到成功的页面,index.jsp

<%@ page language="java" contentType="text/html; charset=gbk"
    pageEncoding="gbk"%>
<!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=gbk">
<title>Insert title here</title>
</head>
<body>
<h1>登陆成功</h1>
<!-- 用el表达式获取登陆页传来的用户名和密码 -->
<label>账号:${userName}</label>
<label>密码:${password}</label>
</body>
</html>

我认为最好的老师就是实践,因为简单的看了一下struts的书,也觉得很简单,但是就是写上面的代码,也花了我一点时间。如果只是看书而不写出来运行一下的话,始终是留于表面的,而且很容易忘记。学到上面知识点最好是用代码写出来,写于求职准备中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值