前端写一个简单的表单
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!--action是服务器的地址-->
<form action="${pageContext.request.contextPath}/loginByInterface.action" method="post">
用户:<input type="text" name="uaccount" id="uaccount" /><br>
密码:<input type="password" name="upwd" id="upwd"><br>
<input type="submit" value="提交">
</form>
</body>
</html>
struts.xml编写(action的配置)
<?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">
<!-- action的配置 -->
<struts>
<constant name="struts.i18n.encoding" value="utf-8"></constant>
<package name="uaccountDemo" extends="struts-default" namespace="/" >
<action name="userlogin" class="com.sofency.action.UserAction" method="login">
<!-- type属性 -->
<!-- 默认值是请求转发的意思,请求转发的特点就是 地址栏不发生变化 type='dispatcher' -->
<!-- 重定向 会将地址栏的地址发生变化-->
<result name="success" type="redirect">/login.jsp</result>
</action>
</package>
</struts>
java后台接受并处理前端穿来的数据的代码
package com.sofency.action;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport{
public String register(){
//写注册的逻辑 服务层 Dao层
System.out.println("register");
return SUCCESS;//接口中的常量
}
public String login(){
HttpServletRequest request = ServletActionContext.getRequest();
//底层会处理表单为中文的问题 原理--转码操作
String uaccount = request.getParameter("uaccount");
String upwd = request.getParameter("upwd");
System.out.println(uaccount+"--"+upwd);
//密码验证逻辑暂时不写
System.out.println("login");
return SUCCESS;//接口中的常量
}
}
其中接收还有两种方式 1. 通过ActionContext获取
处理代码如下
public String login(){
//第一种方式使用ActionContext进行获取所有的参数 存储到map中进行遍历读取
//1.使用ActionContext类获取
ActionContext context = ActionContext.getContext();
//2. 调用方法获取表单数据
// key表示的表单的name属性 value 表示表单输入的值
Map<String,Object> map = context.getParameters();
Set<String> set = map.keySet();//底层就是map形式的
for(String key:set) {
Object[] obj = (Object[])map.get(key);//多选框时会用到
System.out.println(Arrays.toString(obj));
}
System.out.println("login");
return SUCCESS;//接口中的常量
}
}
2.通过接口方式实现 实现servletRequestAware接口 获取到request 耦合性非常低
package com.sofency.action;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.interceptor.ServletRequestAware;
import com.opensymphony.xwork2.ActionSupport;
public class ClientAction extends ActionSupport implements ServletRequestAware{
private HttpServletRequest request;
@Override
public void setServletRequest(HttpServletRequest request) {
// TODO Auto-generated method stub
this.request= request;
}
//使用request接口注入的方式进行获取表单数据
@Override
public String execute() throws Exception {
String uaccount = request.getParameter("uaccount");
String upwd = request.getParameter("upwd");
System.out.println(uaccount+"--"+upwd);
return SUCCESS;
}
}