struts2入门
好久没有动博客了。今天看了一下慕课网的视频,简单了解一下struts2。
首先是在项目中引入struts2的文件,有一个比较简单的方法就是可以直接右键项目MyEclipse->Project facets->install struts2
然后是在web.xml中进行相应的配置(filter过滤器),这里和不使用框架基本类似,代码如下,系统好像会自动生成默认的过滤,如下
<?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>TryStruts2</display-name>
<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>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!--
<filter>
<filter-name>struts2_1</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2_1</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
-->
</web-app>
web.xml
然后写一个action文件,如下
package com.imooc.action; import javax.servlet.http.HttpServletRequest;
import com.opensymphony.xwork2.ActionSupport; public class HelloWorldAction extends ActionSupport { private HttpServletRequest request; //helloworld.action public String add(){
// return SUCCESS;
return "add";
} public String update(){
// return SUCCESS;
return "update";
}
@Override
public String execute() throws Exception {
System.out.println("执行Action");
return SUCCESS;
} }
HelloWorldAction
然后是struts.xml文件,里面通过include引入了另外一个配置文件helloworld.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd"> <struts>
<include file="helloworld.xml"></include> <constant name="struts.action.extension" value="do"></constant> <!-- 感叹号方式 -->
<!-- http://localhost:8080/TryStruts2/helloworld!add.action -->
<constant name="struts.enable.DynamicMethodInvocation" value="false"></constant>
</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的代码,里面有注释就不进行详细分析了
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<!-- 映射 -->
<!-- Action搜索顺序 1.判断当前包是否存在(存在2.1 不存在2.2) 2.1判断action是否存在,不存在则去默认namespase的package里面寻找action
2.2检查上一级路径的package是否存在,直到默认namespace --> <package name="default" namespace="/" extends="struts-default"> <!-- 默认action -->
<default-action-ref name="index"></default-action-ref>
<action name="index">
<result>/error.jsp</result>
</action> <action name="*_*_*" method="{2}" class="com.imooc.{3}.{1}Action">
<result>/result.jsp</result>
<result name="add">/{2}.jsp</result>
<result name="update">/{2}.jsp</result>
</action> <!-- 指定method属性 <action name="addAction" method="add" class="com.imooc.action.HelloWorldAction">
<result>/add.jsp</result> </action> <action name="updateAction" method="update"
class="com.imooc.action.HelloWorldAction"> <result>/update.jsp</result> </action> -->
</package> </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
package com.imooc.action;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport {
//action 属性取值
private String username;
private String password;
public String login(){
System.out.println(username);
return SUCCESS;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
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实体类
package com.imooc.po;
public class User {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
User
然后是LoginAction
package com.imooc.action; import com.imooc.po.User;
import com.opensymphony.xwork2.ActionSupport; public class LoginAction extends ActionSupport { private User user; public String login(){
System.out.println(user.getUsername()); return SUCCESS;
} public User getUser() {
return user;
} public void setUser(User user) {
this.user = user;
}
}
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>
然后是实体类
package com.imooc.po;
import java.util.List;
public class User {
private String username;
private String password;
private int age;
private List<User> bookList;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public List<User> getBookList() {
return bookList;
}
public void setBookList(List<User> bookList) {
this.bookList = bookList;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
User
然后是LoginAction
package com.imooc.action; import com.imooc.po.User;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven; public class LoginAction extends ActionSupport implements ModelDriven<User>{ private User user=new User(); public String login(){ System.out.println(user.getUsername());
System.out.println(user.getBookList().get(0).getUsername());
System.out.println(user.getBookList().get(1).getUsername()); return SUCCESS;
} @Override
public User getModel() {
return user;
} @Override
public void validate(){
if(user.getUsername()==null||"".equals(user.getUsername())){
this.addFieldError("username", "用户名不能为空");
}
}
}
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中处理结果类型
写的有点乱,简单记录一下
struts2入门的更多相关文章
- Struts2 入门
一.Struts2入门案例 ①引入jar包 ②在src下创建struts.xml配置文件 <?xml version="1.0" encoding="UTF-8&q ...
- Struts2入门3 深入学习
Struts2入门3 深入学习 处理结果和异常 前言: Struts学习的差不多了,还有最后的一点就收官了就是结果处理和异常处理.前面学习Struts主要围绕就是Action以及struts.xml配 ...
- Struts2入门2 Struts2深入
Struts2入门2 Struts2深入 链接: http://pan.baidu.com/s/1rdCDh 密码: sm5h 前言: 前面学习那一节,搞得我是在是太痛苦了.因为在Web项目中确实不知 ...
- Struts2入门1 Struts2基础知识
Struts2入门1 Struts2基础知识 20131130 代码下载: 链接: http://pan.baidu.com/s/11mYG1 密码: aua5 前言: 之前学习了Spring和Hib ...
- struts2入门程序
struts2入门程序 1.示例 搭建编程环境就先不说了,这里假设已经搭建好了编程环境,并且下好了strut2的jar包,接下来程序. 1.1 新建web项目 点击File->New->D ...
- struts2框架(1)---struts2入门
struts2框架 如果你之前在MVC模式的时候一直都是通过servlet,获取和返回数据,那么现在开始学习struts2框架, Struts是一个实现MVC设计模式的优秀的框架.它的许多优点我就不说 ...
- [java]struts2入门
摘要 本文是struts2入门,配置教程.如何在IntelJ Idea中进行手动配置.在使用idea新建struts2web项目的时候,在下载jar包的过程中,下载失败,没办法就直接手动进行下载jar ...
- ---web模型 --mvc和模型--struts2 入门
关于web模型: 早期的web 应用主要是静态页丽的浏览〈如新闻的制监),随着Internet的发展,web应用也变得越来越复杂,不仅要 和数据库进行交互 ,还要和用户进行交互,由此衍生了各种服务器端 ...
- Struts2入门示例(Myeclipse)
1.新建Web项目在lib导入struts-2.3.37核心基础jar包 2.在WebRoot新建2个JSP demo1.jsp <%@ page language="java&quo ...
- Struts2入门(六)——国际化
一.前言 1.1.国际化简介 国际化是指应用程序在运行的时候,根据客户端请求来自的国家地区.语言的不同而显示不同的界面(简单说就是根据你的地区显示相关地区的语言,如果你现在在英国,那么显示的语言就是英 ...
随机推荐
- Perfmon 介绍
1.UI 1.笔图标,可以把视图里的细线加粗. 2.加号图标.可以为视图添加新的记数器. 3.操作-->属性.可以用于设置默认的采样时间. 2.增加计数据器页面 1.一个计数据器会包涵多个对象. ...
- 解决Node.js调用fs.renameSync报错的问题(Error: EXDEV, cross-device link not permitted)
2014-08-23 今天开始学习Node.js,在写一个文件上传的功能时候,调用fs.renameSync方法错误 出错代码所在如下: function upload(response,reques ...
- org/apache/commons/pool/impl/GenericObjectPool异常的解决办法
org/apache/commons/pool/impl/GenericObjectPool异常的解决办法 webwork+spring+hibernate框架的集成, 一启动Tomcat服务器就出了 ...
- C++_enum
C++的enum可以限制成员的类型 //error C2440: “=”: 无法从“int”转换为“color” #include <iostream> using namespace s ...
- 网易云课堂_C语言程序设计进阶_第七周:文件:文件访问、格式化输入输出、二进制输入输出
7.1文件 7.2底层操作 7.1文件 格式化的输入输出 printf %[flags][width][.prec][hIL]type Flag 含义 - 左对齐 + 在前面放+或- (space) ...
- [置顶] android利用jni调用第三方库——第二篇——编写库android程序直接调用第三方库libhello.so
0:前言 1:本文主要作为丙方android公司的身份来写 2:作者有不对的地方,请指出,谢谢 [第一篇:android利用jni调用第三方库——编写库libhello.so] [第二篇:androi ...
- Windows内核之进程的终止和子进程
1 进程终止的方法: <1>主线程的进入点函数返回(最好使用这种方法) <2>进程中的一个线程调用ExitProcesss函数(应该避免使用这样的方法). <3>还 ...
- 【九】注入框架RoboGuice使用:(Your First Injected Service and BroadcastReceiver)
上一篇我们简单的介绍了一下RoboGuice的使用([八]注入框架RoboGuice使用:(Your First Injected Fragment)),今天我们来看下服务(Service)和广播接受 ...
- ovs 实用案例
建立gre,xvlan:http://networkstatic.net/configuring-vxlan-and-gre-tunnels-on-openvswitch/ vm之间通过gre通信:h ...
- Ghost Button制作教程及设计趋势分析
概述:Ghost Button(虚拟按钮)是网页设计中一个非常实用的按钮样式,特别是图片背景中,有出色的效果.今天我们一起来研究Ghost Button的各种效果的制作方法,并对Ghost Butto ...