zoukankan      html  css  js  c++  java
  • struts2入门

    好久没有动博客了。今天看了一下慕课网的视频,简单了解一下struts2。

    首先是在项目中引入struts2的文件,有一个比较简单的方法就是可以直接右键项目MyEclipse->Project facets->install struts2

    然后是在web.xml中进行相应的配置(filter过滤器),这里和不使用框架基本类似,代码如下,系统好像会自动生成默认的过滤,如下

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <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">
     3   <display-name>TryStruts2</display-name>
     4   <filter>
     5     <filter-name>struts2</filter-name>
     6     <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
     7       <init-param>
     8           <param-name>struts.action.extension</param-name>
     9           <param-value>do</param-value>
    10       </init-param>
    11   </filter>
    12   <filter-mapping>
    13     <filter-name>struts2</filter-name>
    14     <url-pattern>/*</url-pattern>
    15   </filter-mapping>
    16   <welcome-file-list>
    17     <welcome-file>index.html</welcome-file>
    18     <welcome-file>index.htm</welcome-file>
    19     <welcome-file>index.jsp</welcome-file>
    20   </welcome-file-list>
    21   <!-- 
    22   <filter>
    23     <filter-name>struts2_1</filter-name>
    24     <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    25   </filter>
    26   <filter-mapping>
    27     <filter-name>struts2_1</filter-name>
    28     <url-pattern>*.action</url-pattern>
    29   </filter-mapping>
    30    -->
    31 </web-app>
    web.xml

    然后写一个action文件,如下

     1 package com.imooc.action;
     2 
     3 import javax.servlet.http.HttpServletRequest;
     4 import com.opensymphony.xwork2.ActionSupport;
     5 
     6 public class HelloWorldAction extends ActionSupport {
     7 
     8     private HttpServletRequest request;
     9     
    10     //helloworld.action
    11     
    12     public String add(){
    13 //        return SUCCESS;
    14         return "add";
    15     }
    16     
    17     public String update(){
    18 //        return SUCCESS;
    19         return "update";
    20     }
    21     @Override
    22     public String execute() throws Exception {
    23         System.out.println("执行Action");
    24         return SUCCESS;
    25     }
    26 
    27     
    28 }
    HelloWorldAction

    然后是struts.xml文件,里面通过include引入了另外一个配置文件helloworld.xml

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE struts PUBLIC
     3     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
     4     "http://struts.apache.org/dtds/struts-2.0.dtd">
     5  
     6 <struts>
     7     <include file="helloworld.xml"></include>
     8     
     9     <constant name="struts.action.extension" value="do"></constant>
    10     
    11     <!-- 感叹号方式 -->
    12     <!-- http://localhost:8080/TryStruts2/helloworld!add.action -->
    13     <constant name="struts.enable.DynamicMethodInvocation" value="false"></constant>
    14 </struts>
    struts.xml

    <constant name="struts.action.extension" value="do"></constant>这行代码是进行访问后缀的设置,也可以在web.xml中设置,value用逗号分隔

    有三种动态的方法调用action ,一种是指定method属性,一种是用感叹号方式,但是最推荐的是用通配符的方式,所以前两种方式在代码中注释了

    <constant name="struts.enable.DynamicMethodInvocation" value="false"></constant>   value设置为true就能开启感叹号访问方式

    下面是helloworld.xml的代码,里面有注释就不进行详细分析了

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE struts PUBLIC
     3     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
     4     "http://struts.apache.org/dtds/struts-2.0.dtd">
     5 <struts>
     6     <!-- 映射 -->
     7     <!-- Action搜索顺序 1.判断当前包是否存在(存在2.1 不存在2.2) 2.1判断action是否存在,不存在则去默认namespase的package里面寻找action 
     8         2.2检查上一级路径的package是否存在,直到默认namespace -->
     9 
    10     <package name="default" namespace="/" extends="struts-default">
    11 
    12         <!-- 默认action -->
    13         <default-action-ref name="index"></default-action-ref>
    14             <action name="index">
    15                 <result>/error.jsp</result>
    16             </action>
    17 
    18         
    19 
    20 
    21         <action name="*_*_*" method="{2}" class="com.imooc.{3}.{1}Action">
    22             <result>/result.jsp</result>
    23             <result name="add">/{2}.jsp</result>
    24             <result name="update">/{2}.jsp</result>
    25         </action>
    26 
    27         <!-- 指定method属性 <action name="addAction" method="add" class="com.imooc.action.HelloWorldAction"> 
    28             <result>/add.jsp</result> </action> <action name="updateAction" method="update" 
    29             class="com.imooc.action.HelloWorldAction"> <result>/update.jsp</result> </action> -->
    30     </package>
    31 
    32 </struts>
    helloworld

    比如上面的配置访问路径就为http://localhost:8080/TryStruts2/HelloWorld_add_action.do或者action或者html

    下面介绍一下action接收参数的3个方式 ,这里推荐一篇博客,写的很详细规范。但是我还是自己写一遍毕竟强迫症。

    http://www.cnblogs.com/bukudekong/archive/2012/03/29/2423064.html

    表示感觉炒鸡神奇,再次暴露看的书少- -之前都是用的request

    1.使用Action的属性接收参数

    首先是login.jsp,主要是一个表单,注意input的name属性

    <form action="LoginAction.action" method="post">
    用户名:<input type="text" name="username" />
    密码:<input type="password" name="password" />
    <input type="submit" value="提交" />
    </form>

    然后是LoginAction

     1 package com.imooc.action;
     2 
     3 import com.opensymphony.xwork2.ActionSupport;
     4 
     5 public class LoginAction extends ActionSupport {
     6     
     7     //action 属性取值
     8     private String username;
     9     private String password;
    10     
    11     public String login(){
    12         System.out.println(username);
    13         
    14         return SUCCESS;
    15     }
    16     
    17     public String getUsername() {
    18         return username;
    19     }
    20 
    21     public void setUsername(String username) {
    22         this.username = username;
    23     }
    24 
    25     public String getPassword() {
    26         return password;
    27     }
    28 
    29     public void setPassword(String password) {
    30         this.password = password;
    31     }
    32 }
    LoginAction

     最后在helloworld.xml进行action配置

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

    2.使用DomainModel接收参数

    首先是login.jsp  input的name相应的更改了

    <form action="LoginAction.action" method="post">
    用户名:<input type="text" name="user.username" />
    密码:<input type="password" name="user.password" />
    <input type="submit" value="提交" />
    </form>

    然后是一个po实体类

     1 package com.imooc.po;
     2 
     3 public class User {
     4 
     5     private String username;
     6     private String password;
     7     public String getUsername() {
     8         return username;
     9     }
    10     public void setUsername(String username) {
    11         this.username = username;
    12     }
    13     public String getPassword() {
    14         return password;
    15     }
    16     public void setPassword(String password) {
    17         this.password = password;
    18     }
    19 }
    User

    然后是LoginAction

     1 package com.imooc.action;
     2 
     3 import com.imooc.po.User;
     4 import com.opensymphony.xwork2.ActionSupport;
     5 
     6 public class LoginAction extends ActionSupport {
     7     
     8     private User user;
     9     
    10     public String login(){
    11         System.out.println(user.getUsername());
    12         
    13         return SUCCESS;
    14     }
    15 
    16     public User getUser() {
    17         return user;
    18     }
    19 
    20     public void setUser(User user) {
    21         this.user = user;
    22     }
    23 }
    LoginAction

    3.使用ModelDriven接收参数,感觉这个好叼

    首先是表单 input的name改了,使用前要加这个,类似jstl标签<%@ taglib prefix="s" uri="/struts-tags" %>

    <form action="LoginAction.action" method="post">
    用户名:<input type="text" name="username" /><s:fielderror name="username"></s:fielderror>
    密码:<input type="password" name="password" />
    书籍1:<input type="text" name="bookList[0].username" />
    书籍2:<input type="text" name="bookList[1].username" />
    年龄:<input type="text" name="age" />
    <input type="submit" value="提交" />
    </form>

    然后是实体类

     1 package com.imooc.po;
     2 
     3 import java.util.List;
     4 
     5 public class User {
     6 
     7     private String username;
     8     private String password;
     9     private int age;
    10     private List<User> bookList;
    11     public String getUsername() {
    12         return username;
    13     }
    14     public void setUsername(String username) {
    15         this.username = username;
    16     }
    17     public String getPassword() {
    18         return password;
    19     }
    20     public void setPassword(String password) {
    21         this.password = password;
    22     }
    23     public List<User> getBookList() {
    24         return bookList;
    25     }
    26     public void setBookList(List<User> bookList) {
    27         this.bookList = bookList;
    28     }
    29     public int getAge() {
    30         return age;
    31     }
    32     public void setAge(int age) {
    33         this.age = age;
    34     }
    35     
    36 }
    User

    然后是LoginAction

     1 package com.imooc.action;
     2 
     3 import com.imooc.po.User;
     4 import com.opensymphony.xwork2.ActionSupport;
     5 import com.opensymphony.xwork2.ModelDriven;
     6 
     7 public class LoginAction extends ActionSupport implements ModelDriven<User>{
     8     
     9     private User user=new User();
    10     
    11     public String login(){
    12         
    13         System.out.println(user.getUsername());
    14         System.out.println(user.getBookList().get(0).getUsername());
    15         System.out.println(user.getBookList().get(1).getUsername());
    16         
    17         return SUCCESS;
    18     }
    19 
    20     @Override
    21     public User getModel() {
    22         return user;
    23     }
    24     
    25     @Override 
    26     public void validate(){
    27         if(user.getUsername()==null||"".equals(user.getUsername())){
    28             this.addFieldError("username", "用户名不能为空");
    29         }
    30     }
    31 }
    LoginAction

    validate()方法用于验证用户名是否为空

    在helloworld.xml中添加 用户处理表单验证不正确时返回登陆页

    <action name="LoginAction" method="login" class="com.imooc.action.LoginAction">
    <result>/success.jsp</result>
    <!-- 表单验证不正确 -->
    <result name="input">/login.jsp</result>
    </action>

    下面是5中处理结果类型

    写的有点乱,简单记录一下

  • 相关阅读:
    作业五:团队项目——项目启动及需求分析
    结对编程项目---四则运算
    PSP记录个人项目耗时情况
    代码复查
    是否需要有代码规范?
    编写一个能自动生成小学四则运算题目的程序。
    目前流行的源程序版本管理软件和项目管理软件的优缺点
    在Github注册账户
    浏览完整部教材,列出不懂的5-10个问题
    FZU 1683 纪念SlingShot(矩阵水)
  • 原文地址:https://www.cnblogs.com/wangkaipeng/p/5399384.html
Copyright © 2011-2022 走看看