Struts2---入门

Struts2---入门

1、概念

Struts是一个流行和成熟的基于MVC模式下的Web应用程序框架,使用Struts的目的是为了帮助我们减少在运用MVC设计模型来开发Web应用的时间

MVC是模型(Model)、视图(View)和控制器(Controller)的缩写;MVC是一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。在Struts中,Controller就是action。

搭建Struts2环境步骤:
1、下载相关jar包;
2、创建Web项目;
3、创建并完善相关配置文件;
4、创建Action并测试启动;

2、配置文件

解析struts.xml:
1、.dtd就是约束struts.xml中可以有哪些标签不能有哪些标签。
2、<include>
<!-- 可以通过 <include file="">包含其他文件,include节点是struts2中组件化的方式,可以将每个功能模块独立到一个xml配置文件中,然后用Include节点引用 -->
<include file="struts-default.xml"></include>
3、<package>
package提供了将多个Action组织成为一个模块的方式。
package的名字必须是唯一的(配置文件中可以有多个包,但包名要唯一),可以在这个包上加一些拓展的包。
abstract设置package的属性为抽象,抽象的package不能定义action的值,ture或false。
namespace="/test":http://localhost:8080/项目名/test/xx.action
namespace="/":http://localhost:8080/项目名/xx.action
<package name="包名" extends="继承的父类的名称" namespace="包的命名空间">
4、拦截器
<interceptors>
<!-- 拦截器定义name(名称)和class(类路径) -->
<interceptor name="" class=""></interceptor>
<!-- 定义拦截器栈 -->
<interceptor-stack name="">
<interceptor-ref name=""></interceptor-ref>
</interceptor-stack>
</interceptors>
<!-- 定义默认的拦截器,每个Action都会自动引用。如果Action中引用了其他的拦截器,默认的拦截器将无效 -->
<default-interceptor-ref name=""></default-interceptor-ref>
5、<global-results>
<!-- 全局results配置 -->
<global-results>
<result name="">/xxx.jsp</result>
</global-results>
6、<action>
<!-- 
Action配置:一个Action可以被多次映射(只要action配置中的name不同)
name:action名称,如(假设namespace="/"):http://localhost:8080/项目名/<action>中属性name值.action
class:对应的类的路径
method:调用Action中的方法名
Ps:每个package包里可以定义多个action
-->
<action name="" class="" method="" converter="">
<!-- 引用拦截器:name:拦截器名称或拦截器栈名称 -->
<interceptor-ref name=""></interceptor-ref>

<!-- 节点配置:name:result名称,和Action中返回的值相同(如果不写name,默认SUCCESS或"success");
type:result类型,不写则选用superpackage的type struts-default.xml中的默认为dispatcher -->
<result name="" type="">/xxx.jsp</result>

<!-- 参数设置:name:对应Action中的get/set方法 -->
<param name="">值</param>
</action>
7、<constant>
<!-- struts.properties文件中的语句:struts.i18n.reload=true,则对应struts.xml文件中语法如下 -->
<constant name="struts.i18n.reload" value="true"></constant>

3、深入

深入讲解struts的八个主要步骤:
1.访问Servlet API

2.Action搜索顺序

3.动态方法调用
动态方法调用是为了解决一个Action对应多个请求的处理,以免Action太多。
三种方式:指定method属性、感叹号方式、通配符方式
1:<action name="addAction" method="add" class="com.imooc.action.HelloWorldAction">
http://localhost:8080/HelloWorld/addAction.action
2:<constant name="struts.enable.DynamicMethodInvocation" value="false"> </constant>
<action name="helloworld" class="com.imooc.action.HelloWorldAction">
<result >/result.jsp</result>
<result name="add">/add.jsp</result>
<result name="update">/update.jsp</result>
</action>
http://localhost:8080/HelloWorld/helloworld!add.action
3: <action name="*_*" method="{2}" class="com.imooc.action.{1}Action">
<result >/{2}.jsp</result>
<result name="add">/{2}.jsp</result>
<result name="update">/{2}.jsp</result>
</action>
http://localhost:8080/HelloWorld/HelloWorld_add.action
4.指定多个配置文件
<include file="com/imooc/xml/helloworld.xml"></include>
5.默认Action
<default-action-ref name="error"></default-action-ref>
<action name="error">
<result>/error.jsp</result>
</action>

注意:<default-action-ref name="error">和<action name="error">必须要一致以及package——name不要一样。

Ps:设置默认Action大前提:后缀正确范围内有效以及不许有通配符出现。如“_”。
6.Struts2后缀
<!-- Struts2后缀方式一:struts.xml -->
<constant name="struts.action.extension" value="action,do"></constant>
<!-- Struts2后缀方式二:struts.properties -->
struts.action.extension=action,do,struts2
<!-- Struts2后缀方式三:web.xml -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
<init-param>
<param-name>struts.action.extension</param-name>
<param-value>do</param-value>
</init-param>
</filter>

注意:如果值什么都不写,则后缀不加才可以正常显示。如果这条语法都没有设置,则默认.action或什么都不加后缀
7.接受参数
<!-- 使用Action的属性接收参数 -->
@login.jsp
<form action="LoginAction.action" method="post">
用户名:<input name="user" type="text" />
密码:<input name="pwd" type="password" />
<input value="提交" type="submit" />
</form>

@LoginAction.java
public class LoginAction extends ActionSupport {
private String user;
private String pwd;
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}

public String login(){
System.out.println(user);
System.out.println(pwd);
return SUCCESS;
}
}

@struts.xml
<action name="LoginAction" class="com.imooc.action.LoginAction" method="login">
<result>/success.jsp</result>
</action>

<!-- 使用DomainModel接收参数 -->
@login.jsp
<form action="LoginAction.action" method="post">
用户名:<input name="user1.user" type="text" />
密码:<input name="user1.pwd" type="password" />
<input value="提交" type="submit" />
</form>

@LoginAction.java
public class LoginAction extends ActionSupport {
private User user1;

public User getUser1() {
return user1;
}

public void setUser1(User user1) {
this.user1 = user1;
}

public String login(){
System.out.println(user1.getUser());
System.out.println(user1.getPwd());
return SUCCESS;
}
}

@struts.xml
<action name="LoginAction" class="com.imooc.action.LoginAction" method="login">
<result>/success.jsp</result>
</action>

@User.java
public class User {
private String user;
private String pwd;
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
}

<!-- 使用ModelDriven接收参数(推荐) -->
@login.jsp
<form action="LoginAction.action" method="post">
用户名:<input name="user" type="text" />
密码:<input name="pwd" type="password" />
书籍1:<input name="bookList[0].user" type="text" />
书籍2:<input name="bookList[1].user" type="text" />
<input value="提交" type="submit" />
</form>

@LoginAction.java
public class LoginAction extends ActionSupport implements ModelDriven<User>{
private User user1 =new User();	
public String login(){
System.out.println(user1.getUser());
System.out.println(user1.getPwd());
System.out.println(user1.getBookList().get(0).getUser());
System.out.println(user1.getBookList().get(1).getUser());
return SUCCESS;
}
public User getModel() {
return user1;
}
}

@struts.xml
<action name="LoginAction" class="com.imooc.action.LoginAction" method="login">
<result>/success.jsp</result>
</action>

@User.java
public class User {
private String user;
private String pwd;
private List<User> bookList;
//setter/getter...
}

注意:request方式接收参数也行。


8.输入数据校验

@LoginAction.java
public class LoginAction extends ActionSupport implements ModelDriven<User>{
private User user1 =new User();

public String login(){

/*if(user1.getUser()==null||"".equals(user1.getUser())){方法一
this.addFieldError("error_user", "用户名不能为空!");
return INPUT;
}*/

System.out.println(user1.getUser());
System.out.println(user1.getPwd());
System.out.println(user1.getBookList().get(0).getUser());
System.out.println(user1.getBookList().get(1).getUser());
System.out.println(user1.getAge());
return SUCCESS;
}

public User getModel() {
return user1;
}

@Override
public void validate() {//方法二:推荐
if(user1.getUser()==null||"".equals(user1.getUser())){
this.addFieldError("error_user", "用户名不能为空!");
}
}
}

@User.java
public class User {
private String user;
private String pwd;
private int age;
private List<User> bookList;
//setter/getter...
}

@login.jsp
<%@ taglib prefix="s" uri="/struts-tags" %>
<form action="LoginAction.action" method="post">
用户名:<input name="user" type="text" /><s:fielderror name="error_user"></s:fielderror>
密码:<input name="pwd" type="password" />
书籍1:<input name="bookList[0].user" type="text" />
书籍2:<input name="bookList[1].user" type="text" />
年龄:<input name="age" type="text" />
<input value="提交" type="submit" />
</form>

9.处理结果类型



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值