【struts2】学习笔记
常见问题及注意事项:
1.下载struts2时,要看清所下载的版本,不同版本web.xml配置路径不同!
2. 导入jar包时,导入的包要完全准确,缺少或过多的会导致缺失或冲突!
3. RegisterAction-validation.xml 客户端校验无效,暂未解决。
1. 下载struts2软件包
下载地址:http://struts.apache.org/download.cgi#struts2513
2. 在web工程中导入struts包中的jar文件
2.1 将下载好的struts包下的一些核心类库复制到/WEB-INF/lib目录下,并构建路径。
3. web.xml配置
3.1 针对不同struts版本,web.xml配置方式有所不同!
check your struts2-core-x.x.jar version.
-->if it is struts2-core-2.5.jar then change your filter class tag value in web.xml to
<filter-class>
org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
</filter-class>
-->if it is struts2-core-2.1.3.jar then change your filter class tag value in web.xml to
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
FilterDispatcher is deprecated since Struts 2.1.3. If you are working with older versions then user above solution.
-->if it is struts2-core-2.3.X.jar then change your filter class tag value in web.xml to
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
3.2 配置web.xml(本人struts版本为struts2.3)
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name></display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
4. struts配置实例struts.xml
<?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">
<struts>
<package name="struts2" extends="struts-default">
<action name="login" class="com.gxh.action.LoginAction">
<result name="success">/login_success.jsp</result>
<result name="failure">/login_failure.jsp</result>
<result name="input">/login.jsp</result>
</action>
<action name="input" class="com.gxh.action.InputAction">
<result name="success">/demo/output.jsp</result>
<result name="input">/demo/input.jsp</result>
</action>
<action name="register" class="com.gxh.action.RegisterAction">
<result name="success">/demo2/result.jsp</result>
<result name="input">/demo2/register2.jsp</result>
</action>
</package>
</struts>
5. 创建控制类Action
//LoginCheck.java类,校验用户名和密码
public class LoginCheck{
public boolean isLogin(String username,String password){
if("tom".equals(username) && "123".equals(password)){
return true;
}else{
return false;
}
}
}
方式一:编写普通的实体类,如loginAction.java ,重写execute()方法
public class LoginAction{
private String username;
private String password;
public void setUsername(String username){
this.username = username;
}
public String getUsername(){
return username;
}
public void setPassword(String password){
this.password
= password
;
}
public String getPassword(){
return password
;
}
public String execute()throws Exception{
LoginCheck lc = new LoginCheck(); //LoginCheck.java类另写
if(lc.isLogin(getUsername(),getPassword())){
ActionContext.getContext().getSession().put("login","true");
return "success";
}else{
return "failure";
}
}
}
//配置struts.xml
<?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">
<struts>
<package name="struts2" extends="struts-default">
<action name="login" class="com.gxh.action.LoginAction">
<result name="success">/login_success.jsp</result>
<result name="failure">/login_failure.jsp</result>
</action>
</package>
</struts>
方式二:编写Java类,实现Action接口,如LoginAction2.java
public class LoginAction2 implements Action{
public String username;
public String password;
public void setUsername(String username){
this.username = username;
}
public String getUsername(){
return username;
}
public void setPassword(String password){
this.password = password;
}
public String getPassword(){
return password;
}
public String execute()throws Exception{
LoginCheck lc = new LoginCheck(); //LoginCheck.java类另写
if(lc.isLogin(getUsername(),getPassword())){
ActionContext.getContext().getSession().put("login","true");
return SUCCESS;
}else{
return ERROR;
}
}
}
//配置struts.xml
<?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">
<struts>
<package name="struts2" extends="struts-default">
<action name="login" class="com.gxh.action.LoginAction2">
<result name="success">/login_success.jsp</result>
<result name="error">/login_failure.jsp</result>
</action>
</package>
</struts>
方式三:编写Java类,继承ActionSupport类,如LoginAction3.java
public class LoginAction3 extends ActionSupport{
public String username;
public String password;
public void setUsername(String username){
this.username = username;
}
public String getUsername(){
return username;
}
public void setPassword(String password){
this.password = password;
}
public String getPassword(){
return password;
}
pubic void validate(){
if(getUsername() == null || "".equals(getUsername().trim()) ){
this.addFieldError("username","username can not empty."); //username为在username标签上提示错误,
}else if(!getUsername().matches("正则式")){ //
this.addFieldError("username","username is invalidate.");
}
if(getPassword() == null || "".equals(getPassword().trim())){
this.addFieldError("password","password can not empty."); //password为在password
标签上提示错误,
}else if(!getPassword().matches("正则式")){
this.addFieldError("password","password is invalidate.");
}
}
public String execute()throws Exception{
LoginCheck lc = new LoginCheck(); //LoginCheck.java类另写
if(lc.isLogin(getUsername(),getPassword())){
ActionContext.getContext().getSession().put("login","true");
return SUCCESS;
}else{
return ERROR;
}
}
}
//配置struts.xml
<?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">
<struts>
<package name="struts2" extends="struts-default">
<action name="login" class="com.gxh.action.LoginAction3">
<result name="success">/login_success.jsp</result>
<result name="error">/login_failure.jsp</result>
<result name="input">/login.jsp</result> //当验证不通过时,跳转到登录页面
</action>
</package>
</struts>
struts学习总结
1. struts应用
- 表单设计,使用struts标签替换传统的HTML标签;
- 使用Action-validation.xml实现客户端校验;
- 通过重写validate()方法实现服务器端校验。
【struts2】学习笔记的更多相关文章
- Struts2学习笔记⑧
今天是Struts2学习笔记的最后一篇文章了.用什么做结尾呢,这两天其实还学了很多东西,没有记录下,今天就查漏补缺一下. 文件上传与下载.FreeMarker以及昨天没做完的例子 文件上传与下载 文件 ...
- Struts2学习笔记①
Struts2 学习笔记① 所有的程序学习都从Hello World开始,今天先跟着书做一个HW的示例. Struts2是一套MVC框架,使用起来非常方便,接触到现在觉得最麻烦的地方是配置文件.我的一 ...
- Struts2学习笔记NO.1------结合Hibernate完成查询商品类别简单案例(工具IDEA)
Struts2学习笔记一结合Hibernate完成查询商品类别简单案例(工具IDEA) 1.jar包准备 Hibernate+Struts2 jar包 struts的jar比较多,可以从Struts官 ...
- Struts2 学习笔记(概述)
Struts2 学习笔记 2015年3月7日11:02:55 MVC思想 Strust2的MVC对应关系如下: 在MVC三个模块当中,struts2对应关系如下: Model: 负责封装应用的状态,并 ...
- struts2学习笔记 ⑤
拦截器初探 昨天临睡觉之前看了看拦截器,也在昨天的学习笔记里面胡诌诌了几句,今天就来好好的会会拦截器这个东西.实际上拦截器是一种模块实现的机制<起码我是这么体会的>(至于说书里面说体现了A ...
- [struts2学习笔记] 第二节 使用Maven搞定管理和构造Struts 2 Web应用程序的七个步骤
本文地址:http://blog.csdn.net/sushengmiyan/article/details/40303897 官方文档:http://struts.apache.org/releas ...
- struts2学习笔记之二:基本环境搭建
学习struts2有一段时间了,作为一个运维人员学习的时间还是挺紧张的,写这篇文件为了方便以后复习时使用 环境: MyEclipse 10 tomcat6 jdk1.6 首先建立一个web项目,并 ...
- 【Struts2学习笔记-4】包含其他配置文件
包含其他配置文件 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLI ...
- 【Struts2学习笔记-3】常量配置
Struts2常量 配置Struts2常量值有3个地方,1)在struts.properties文件中配置常量:2)在web.xml文件中配置FileterDispatcher指定初始化参数来配置常量 ...
- struts2学习笔记(4)——数据类型转换
回过头来看昨天的那个例子. 在昨天的例子中,只转换了一个Point类,如果想转换多个Point类怎么办呢?在昨天的例子上面做一个小的修改. 首先在input.jsp页面中修改几个输入框. <s: ...
随机推荐
- IT兄弟连 ElasticSearch在Linux下的安装和启动、常见问题解决
环境要求 · Linux(Centos 7) · ElasticSerach 6.6.1 ES下载 · 下载地址:https://www.elastic.co/cn/do ...
- Luogu P1069细胞分裂【分解质因数/数论】By cellur925
题目传送门 发现这题真的坑超多啊...调了一晚上终于过了...我好菜啊qwq. 题意说的比较明白,让你求满足(si^k)%(m1^m2)==0的最小k值.然后看数据范围我们知道,我们肯定不能暴力的判断 ...
- Ubuntu开机之后报错结局方法
sudo gedit /etc/default/apport 把里面的enabled=1改成enabled=,保存 201. 就是下雨也去.202. 我马上拿来.203. 孙英开飞机.204. 国华来 ...
- 单表:1.查询全部 2.条件查询 JSP Servlet
- python之重写父类方法
#修改父类的方法#重写父类的方法的目的是为了给他扩展功能,父类的方法已经不能满足需求#核心思想就一句话,先调用一下你要重写的父类方法,class Coon(object): #基本类 def __in ...
- Hdu 2888 Check Corners (二维RMQ (ST))
题目链接: Hdu 2888 Check Corners 题目描述: 给出一个n*m的矩阵,问以(r1,c1)为左上角,(r2,c2)为右下角的子矩阵中最大的元素值是否为子矩阵的顶点? 解题思路: 二 ...
- 递推DP HDOJ 5459 Jesus Is Here
题目传送门 题意:简单来说就是sn = sn-1 + sn-2递推而来,求其中所有c字符的:∑i<j:sn[i..i+2]=sn[j..j+2]=‘‘cff"(j−i) mod 530 ...
- Contextual Action bar(1) CAB in Android
Contextual Action bar (CAB) in Android BY PARESH MAYANI - OCTOBER, 23RD 2013 Before getting into the ...
- 关于ES6的Promise的使用深入理解
ES6的promise对象研究 什么叫promise? Promise对象可以理解为一次执行的异步操作,使用promise对象之后可以使用一种链式调用的方式来组织代码:让代码更加的直观. 那我们为什么 ...
- JS编写自己的富文本编辑器
富文本编辑器,网上有很多功能齐全种类丰富的如百度的Ueditor,简单适用型的如WangEditor等等.在经过一番挑选后,我发现都不适用现在的项目,然后决定自己造轮子玩玩.富文本编辑器中主要涉及到J ...