struts学习笔记

1、使用2.3.34的版本,2.1.6存在中文乱码的问题,下面是pom表单的模板

2、解决乱码要注意的问题:

(1)记得表单提交尽量用post方法

(2)编码全部用utf-8,包括jsp页面与编码页面都要设置好

(3)struts的配置文件要写好。


3、开发流程,以开发一个helloworld为例

(1)pom.xml配置,引入struts,一个模板

<dependency>  
        <groupId>org.apache.struts</groupId>  
        <artifactId>struts2-core</artifactId>  
        <version>2.3.34</version>  
</dependency>

(2)配置web.xml文件,一个模板

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>
  <filter>								<!--定义核心Filter FilterDispatcher -->
		<filter-name>struts2</filter-name>	<!-- 定义核心Filter的名称 -->
		<filter-class>						<!--定义核心Filter的实现类 -->
			org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
		</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>struts2</filter-name><!--核心Filter的名称 -->
		<url-pattern>/*</url-pattern><!--使用该核心Filter过滤所有的Web请求 -->	
	</filter-mapping>
</web-app>

(3)写一个只有name和sex两个属性的user类,类似文件一般放在po包里

public class user {
private String name;
private String sex;
public String getName() {
	return name;
}
public void setName(String name) {
	this.name = name;
}
public String getSex() {
	return sex;
}
public void setSex(String sex) {
	this.sex = sex;
}
}

(4)写一个用户页面,向后台提交user的name属性

<form action="hello.action" method="post">
      <label for="name">Please enter your name</label><br/>
      <input type="text" name="name"/>
      <input type="submit" value="Say Hello"/>
   </form>

(5)配置struts.xml文件,指明action的名字,由哪个类处理,结果应该怎么处理

<?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>
	<constant name="struts.i18n.encoding" value="utf-8"></constant>
    <package name="struts2" extends="struts-default"> 
 		<action name="hello" class="com.wyj.action.HelloWorldAction">
                <result name="success">/HelloWorld.jsp</result>
 		</action>		
 	</package>	
</struts>

(6)写对应的action类,一般封在action包中

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;
import com.wyj.po.user;

public class HelloWorldAction extends ActionSupport{
	   private String name;	   
	   
	   public String getName() {
	      return name;
	   }

	   public void setName(String name) {
	      this.name = name;
	   }
	   
	   public String execute() throws Exception {
		   user u=new user();
		   u.setName("我们");
		   
		   ServletActionContext.getRequest().setAttribute("uu", u);
		   System.out.println(name);
		   return "success";
	}
}

(7)对于ServletActionContext.getRequest().setAttribute("uu", u);这种样式的,相应的jsp页面要用<s:property value="#request.uu.sex" />或者<s:property value="#request.uu.getSex()" />(当然了,po里要有这个方法)来接收,如果单独对于一个name来说,用<s:property value="%{name}" default="未接收到"/> 来接收就好了,但是这种要有set,get方法,而且action里的属性名要与页面传回来的名字一致,set,get方法名的后半部要与属性名第一个字母大写以后相同。

(8)Action中get,set方法的使用流程?
      前台form中有一个<input type="text" name="username"/>
      如果传到action。在action中应该有一个属性,名字也叫username;而且这个username有get/set方法,其中get方法的命名必须为getUsername,其中set方法的命名必须为setUsername。
        当struts接受这个action请求时,struts调用 username的get方法把前台的值传到action中的username,当action处理完成,要返回到页面时。在生成jsp的过程中,你可以在页面中使用EL,${username},这时调用username的set方法。

(9)怎么传一个对象到jsp

           user u=new user();
           u.setName("wyj");
           u.setSex("male");
           HttpServletRequest request = ServletActionContext.getRequest();
           request.setAttribute("user",u);

    前台用 <s:property value="#request.user.name" />接收

(10)传一个集合到jsp,迭代取值

后台:

List<Subject> subjects = subjectService.findAllSubject();
        HttpServletRequest request = ServletActionContext.getRequest();

        request.setAttribute("subjects", subjects);

前台:

   <s:iterator value="#request.subjects" var="subject">
                <tr>
                    <td><s:property value="#subject.subjectID"/></td>
                    <td><s:property value="#subject.subjectTitle"/></td>
                    <td><s:property value="#subject.subjectAnswer"/></td>
                    <td><a href="subjectParticular.action?subjectID=<s:property value="#subject.subjectID"/>">查看</a></td>
                    <td><a href="subjectUpadateBefore.action?subjectID=${subject.subjectID}">更新</a></td>
                    <td><a href="subjectDelete?subjectID=${subject.subjectID}">删除</a></td>
              </tr>
          </s:iterator>   

4、关于标签问题,EL标签不能与struts tag混用了。起码不能内部混用,像<s:if test="${item.flag} ==0  ">这种是不能使用的。

!!一个大坑,<s:if test="#request.uu.name==\"wyj\"">鬼鬼鬼</s:if>这里,如果wyj没有加引号死活出不来值,可能加引号才是字符串吧。下边这些测试有用。

!!jsp接不到Action传来的值

如果type这样写会导致无法接收,action处理完后重定向到一个视图资源(如:jsp页面),请求参数全部丢失,action处理结果也全部丢失。

Struts2的标签使用方法:

#使用的时候,在jsp头部加入:<%@ taglib prefix="s" uri="/struts-tags"%>

#1.<s:textfield />的用法

这个尾端要打斜杠,为它赋初值用<s:textfield value="%{#request.uu.name}" />或者<s:textfield value="%{name}" />






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值