框架之Struts2的使用(传参、获取参数及验证输入)

cn.scxh.struts包 User类:

package cn.scxh.struts;

import org.apache.log4j.Logger;

import com.opensymphony.xwork2.ActionSupport;

public class User extends ActionSupport {
	private static Logger log = Logger.getLogger(User.class);
	
	@Override
	public String execute() throws Exception {
		log.debug("hello zhangbo");
		log.info("hello caiyu");
		log.error("hello yangming");
		log.warn("hello xiaobao");
		return SUCCESS;
	}
	public String add(){
		log.debug("hello world");
		return "ADD";
	}
	public String update(){
		log.debug("UPDATE hello world");
		return "UPDATE";
	}
	public String delete(){
		log.debug("DELETE hello world");
		return "DELETE";
	}
}

配置文件:log4j.properties

### 设置###
log4j.rootLogger = debug,stdout,D

### 输出信息到控制台 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

### 输出DEBUG 级别以上的日志到=D://logs/debug.log ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = D://logs/debug.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG 
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n
配置文件:struts.properties

#更改struts2后缀€
struts.action.extension=do
#让struts2支持动态方法调用
struts.enable.DynamicMethodInvocation=true

struts.xml

<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
    "http://struts.apache.org/dtds/struts-2.5.dtd">
	<!-- 动态调用方式三     -->
		
<struts>
		<!-- 让struts2支持动态方法调用   在struts.properties中实现-->
 <!-- <constant name="struts.enable.DynamicMethodInvocation" value="true"/> -->
	
		<!-- 如果分层<struts>里写法如下(只分层): -->
<!--<include file="struts1.xml"></include>
	<include file="struts2.xml"></include> -->
	
		<!-- 命名空间为user -->
	<package name="user" namespace="/user" extends="struts-default">
	
	<default-action-ref name="default"/>
	
		<!-- 解决struts2.5 通配符无效问题 -->
	<global-allowed-methods>regex:.*</global-allowed-methods>
	
<!-- 	访问地址:http://192.168.5.7:8080/Struts/user/User_add.do 类名加方法名-->
	<!-- <action name="*_*" class="cn.scxh.struts.{1}" method="{2}">
		<result>/index.jsp</result>
		<result name="ADD">/one.jsp</result>
		<result name="UPDATE">/index.jsp</result>
		<result name="DELETE">/one.jsp</result>
	</action> -->
	
	<!-- 访问地址http://192.168.5.7:8080/Struts/user/user_delete.do -->
		<action name="user_*" class="cn.scxh.struts.UserDemo" method="{1}">
			<result>/index.jsp</result>
			<result name="ADD">/one.jsp</result>
			<result name="UPDATE">/index.jsp</result>
			<result name="DELETE">/one.jsp</result>
			<result name="input">/default.jsp</result>
		</action>	
	<!-- 随便输入地址则执行默认如:http://192.168.5.7:8080/Struts/user/useaar_delete.do -->
	<action name="default">
		<result>/default.jsp</result>
	</action>
	
	

	</package>
</struts>

struts1.xml

<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
    "http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
	<!-- 开发模式 -->
	<constant name="struts.devMode" value="true" />
	<!-- 所有匹配*.do的请求都由struts2处理 ,
	如果在struts.properties中设置了struts2后缀,struts.properties优先-->
 	<constant name="struts.action.extension" value="do" />
	<!-- 让struts2支持动态方法调用<default-action-ref name="index"/> -->
	<!-- <constant name="struts.enable.DynamicMethodInvocation" value="true"/> -->

	<!-- package提供了将多个Action组织为一个模块的方式, package的名字必须是唯一的. namespace:定义package命名空间 
		该命名空间影响到url的地址, 例如此命名空间为/student那么访问是的地址为http://192.168.5.7:8080/Struts/student/test.a
		namespace="/student" 命名空间可以不用student  如果用http://192.168.5.7:8080/Struts/student/a/test.a
		也可以访问 /a/后面还可以随意加   但是student前面不能再加,
		 -->
	<package name="student" namespace="/student" extends="struts-default">
		<!-- 如果不加method默认执行execute方法 -->
		<action name="add" class="cn.scxh.struts.User" method="add">
			<result name="ADD">/one.jsp</result>
			<result name="success">/index.jsp</result>
		</action>
		
		<action name="user" class="cn.scxh.struts.User">
			<result name="ADD">/one.jsp</result>
			<result name="success">/index.jsp</result>
			<!-- 默认执行 execute方法 可以不写name="success" 默认执行-->
			<!--  <result>/index.jsp</result> -->
		</action>
		
		<action name="update" class="cn.scxh.struts.User" method="update">
			<result name="UPDATE">/one.jsp</result>
		</action>
		
		<action name="delete" class="cn.scxh.struts.User" method="delete">
			<result name="DELETE">/one.jsp</result>
		</action>
		
	</package>
</struts>

struts2.xml

<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
    "http://struts.apache.org/dtds/struts-2.5.dtd">
	<!-- 动态调用方式二     -->
		<!--访问地址http://192.168.5.7:8080/Struts/user/user!delete.do -->
<struts>
		<!-- 让struts2支持动态方法调用   在struts.properties中实现-->
<!-- 	<constant name="struts.enable.DynamicMethodInvocation" value="true"/> -->
	
		<!-- 命名空间为student -->
	<package name="user" namespace="/user" extends="struts-default">
	
		<!-- 解决struts2.5 通配符无效问题 -->
	<global-allowed-methods>regex:.*</global-allowed-methods>
	
		<action name="user" class="cn.scxh.struts.User">
			<result>/index.jsp</result>
			<result name="ADD">/one.jsp</result>
			<result name="UPDATE">/index.jsp</result>
			<result name="DELETE">/one.jsp</result>
		</action>
	</package>
</struts>

此工程只需要struts.xml就可完成    struts1.xml   struts2.xml只是动态调用的两种方法   struts.xml中应该是相对较常用的一种


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_3_0.xsd"
	id="WebApp_ID" version="3.0">
	<display-name>Struts</display-name>
	<filter>
		<filter-name>struts2</filter-name>
		  <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
	</filter>

	<filter-mapping>
		<filter-name>struts2</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

	<welcome-file-list>
		<welcome-file>login.jsp</welcome-file>
	</welcome-file-list>
</web-app>

default.jsp  index.jsp  one.jsp不再累赘


传参、获取参数和验证输入如下:

cn.scxh.struts包 Use类:

package cn.scxh.struts;

public class Use {
	private String name;
	private String passWord;
	
	public Use() {
	}

	public Use(String name, String passWord) {
		this.name = name;
		this.passWord = passWord;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getPassWord() {
		return passWord;
	}

	public void setPassWord(String passWord) {
		this.passWord = passWord;
	}
	
}


cn.scxh.struts包 UserDemo类:

package cn.scxh.struts;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.log4j.Logger;
import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

/**
 * 接收参数三种方式:
 * 1.通过Action属性(将Use类写在此类中)
 * 
 * 2.domainModel  已注释
 *  利用现有model类,不需要实现implements ModelDriven<Use>
 *  1>private Use use; 添加get,set方法
 *  2>页上form表单name属性指定为 对象名.属性名 如: use.name
 *  
 * 3.实现ModelDriven接口方式
 *  1>实现ModelDriven接口
 *  2>实例化model类.如 : private User user = new User();
 *  3>表单add_user.jsp中  name值必须与Use类中的属性相同 如:name="name" name="passWord"
 */
public class UserDemo extends ActionSupport implements ModelDriven<Use>{
	private Logger log = Logger.getLogger(UserDemo.class);
	private Use use = new Use();
//	private Use use;
	@Override
	public String execute() throws Exception {
		
		return SUCCESS;
	}
	public String add(){
		HttpServletRequest request = ServletActionContext.getRequest();
		HttpSession session = request.getSession();
		
		log.debug("name:"+use.getName()+"\npassWord:"+use.getPassWord());
		log.debug("name:"+request.getParameter("name")+
				"\npassWord:"+request.getParameter("passWord"));
		
		if(use.getName().equals("admin") && use.getPassWord().equals("admin")){
			return "ADD";
		}else{
			addActionError("用户名或密码错误!");
			return INPUT;
		}
	
		
	}
	public String update(){
		log.debug("UPDATE hello world");
		return "UPDATE";
	}
	public String delete(){
		log.debug("DELETE hello world");
		return "DELETE";
	}
	
	
	
	@Override
	public Use getModel() {
		
		return use;
	}
	
//	public Use getUse() {
//		return use;
//	}
//	public void setUse(Use use) {
//		this.use = use;
//	}
}


add_user.jsp:

需要导入:  <%@ taglib prefix="s" uri="/struts-tags" %>      且在表单提交前加:    <s:actionerror/>   

在上面类判断用户名和密码else中写了输入错误提示语:   addActionError("用户名或密码错误!"); 

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>添加用户</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  	<script src="http://libs.baidu.com/jquery/1.10.2/jquery.min.js"></script>
  	<script>
  		function check(){
  			var user = $("#name").val();//获取表单元素值
  			var number = $("#number").val();
  			if(user == "" || number ==""){
  				$("#msg").text("用户和密码不能为空!");
  				return false;
  			}else{
  				return true;
  			}
  		}
  	</script>
  </head>
  
  <body>
    <form action="./user/user_add.do" method="post" enctype="application/x-www-form-urlencoded" οnsubmit="return check()">
    	用户:<input type="text" name="name" id="name"/><br>
    	密码:<input type="text" name="passWord" id="number"/><br>
    	<span id="msg" style="color:red;font-size:15px">${error}</span>
    		<s:actionerror/>
    		<input type="submit" value="添加"/>${message}
    </form>
  </body>
</html>





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值