struts2笔记(一)
一、J2EE框架概述
view -> controller -> model
jsp -> servlet -> javaBean->xxService->xxDao
(javaBean作为数据承载,service和dao作为业务处理)
二、struts引入
如果需要在url输入网址,访问后台pojo类,可以使用servlet。
servlet: -> pojo:
class loginServlet extends HttpServlet{ class loginAction{
void doPost(request,response){ void excute();
new loginAction().excute(); }
}
}
如果不能使用servlet,只能使用过滤器,因为在java web项目中,能接收请求的只有servlet和filter。
filter: -> 同上
class loginServlet implements Filter{
void doFilter(request,response,chain){
new loginAction.excute();
chain.doFilter(request,response);
}
}
三、struts介绍
struts1:
1、创建web项目
2、为项目添加struts1各种包支持
-->Struts config path:Struts核心配置文件路径
-->ActionServlet name:请求处理的名称
-->URL pattern:action的映射路径
-->Base package for new classes:基本包名
-->Default application resources:默认应用程序资源文件
点击'finish'后,开发工具会自动将struts相关的包导入到项目中,并创建相关文件。
3、添加Struts开发文件
src->New->Other->Myeclipse->Web Struts 1.x->Struts Form,Action&Jsp
点击'finish',进入表单相关的参数配置
-->Use case:用例,暂时用请求名login代替
-->Superclass:父类,org.apache.struts.action.ActionForm
-->Form properties:配置表单需要的元素,完成登陆至少配置两个元素,'username'、'password'
-->JSP:前端页面
点击'finish',进入action配置
-->Superclass:父类,org.apache.struts.action.ActionForm
-->Scope:作用域
-->Input Source:输入错误后跳转的页面
点击'finish'完成所有配置
struts2:
struts运用拦截器的概念,结合各种过滤器来获取url。与struts1区别是,struts1是单实例(所有请求共享一个实例),struts2是多实例(一个请求一个实例),还引入'堆栈'的概念,可以达到与servletAPI完全解耦的目的。
1、创建一个web项目
2、添加struts2包支持
四、配置文件
4.1、六大配置文件
1、struts-default.xml struts默认配置 在struts2-core-2.2.1 jar包中
2、default.properties 默认常量配置 org.apache.struts2
3、web.xml 项目的配置文件
4、struts.xml struts 核心配置文件
5、struts.properties 自定义常量配置文件
6、struts-plugin.xml 插件配置
4.2、核心配置文件
1、global-results元素
<package name = "user" namespace ="/" extends ="struts-default" >
<global-results>
<result name="error">/error.jsp</result>
</global-results>
</package>
可以配置多个action共享的结果集
2、default-action-ref元素
<package name = "user" namespace ="/" extends ="struts-default" >
<default-action-ref name="default"></default-action-ref>
<global-results>
<result name="error">/error.jsp</result>
</global-results>
<action name ="default" class="com.defaultAction">
<result name = "success">/404.jsp</result>
</action>
</package>
通常用于防止url输入错误,显示404错误页面,但该页面往往对用户很不友好,可以使用该配置统一控制404显示页面3、default-class-ref元素
<package name = "user" namespace ="/" extends ="struts-default" >
<default-action-ref name="default"></default-action-ref>
<default-class-ref class="defaultAction"></default-action-ref>
<action name ="default" >
<result name = "success">/404.jsp</result>
</action>
</package>
action包忘记配置class时默认的action值
4、注意:
(在struts-2.1.dtd里,default-action-ref在default-class-ref前面,default-calss-ref在global-results前面,所以代码也一样)
4.3、协作配置
对一个项目而言,配置文件会很多,此时可采用include标签将各种配置文件分开存储(代码顺序参照上幅图片35行)
五、动态调用方法(通过url指定调用的方法)
5.1、动态配置
在不使用action的method属性情况下,通过URL"/XXX!方法名"(例如http://localhost:8080/struts201/user/aaa!login.action)制定调用后台的login方法,要实现url动态调用方法,需将"default.properties"中的"struts.serve.static.browserCache=true"设置为true,因为在struts2.1以上的版本,其默认值为false
5.2、使用通配符
<package name ="user" namespace = "/user" extends ="struts-default">
<action name ="user_*" calss ="com.loginAction" method ="{1}">
<result name ="success">/login.jsp</result>
</action>
</package>
----------------------------------------
<package name ="user" namespace = "/user" extends ="struts-default">
<action name ="*_*" calss ="com.{1}Action" method ="{2}">
<result name ="success">/login.jsp</result>
</action>
</package>
在action的name属性中可以使用"*"去命名,那么在其他属性中需要使用"{0}"或者"{1}"或者"{2}"取出url路径
六、接受请求参数
struts2是MVC的控制器,在整个请求过程中,对参数的处理是struts2的职责所在,接受和处理参数分为属性驱动,模型驱动,域驱动等
6.1属性驱动
直接在action的pojo类中声明与表单一致的属性,并生成匹配的get/set方法,struts2会自动将表单中的数据提交到action中,并直接给相应的属性赋值
struts.xml核心代码:
<package name="user" namespace="/" extends="struts-default">
<action name="login" class="com.action.loginAction" >
<result name="success">/weclome.jsp</result>
<action name="login" class="com.action.loginAction" >
<result name="success">/weclome.jsp</result>
<result name="false">/index.jsp</result>
</action>
</package>
</action>
</package>
action代码:
package com.action;
public class loginAction {
private String username;
private String password;
private String error;
public String getError() {
return error;
}
public void setError(String error) {
this.error = error;
}
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 String execute() {
if (username.equals("admin") && password.equals("admin")) {
return "success";
} else {
this.error = "error";
return "false";
}
}
}
public class loginAction {
private String username;
private String password;
private String error;
public String getError() {
return error;
}
public void setError(String error) {
this.error = error;
}
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 String execute() {
if (username.equals("admin") && password.equals("admin")) {
return "success";
} else {
this.error = "error";
return "false";
}
}
}
jsp核心代码:
<body>
<span style="color: red;">${error}</span>
<form action="login.action" method="post">
username:<input type="text" name="username"><br>
possword:<input type="password" name="password"><br>
<input type="submit" value="submit"/>
</form>
</body>
6.2模型驱动
struts2中提供了一个叫模型驱动的拦截器,要使用此模型驱动填充参数,需action类实现ModelDriven接口
jsp代码:
action代码:
6.3域驱动
通常情况下,表单元素往往对应一个实体,实体又往往单独放在实体层中,那么此时需要在action中放入实体对象作为请求参数,域驱动的方式就是把实体类中的对象作为action的属性
jsp代码:
action代码:
struts.xml代码:
pojo代码:
七、知识点:
转发:request.getRequestDispatcher(path).forward(request,response);
重定向:request.sendRedirect(path);
表单验证的方法 分为三层:1、客户端的javascript脚本验证(对数据的合法性验证)
2、控制器的服务器验证(对数据的合法性验证)
3、对数据的有效性验证(连接数据库验证正确性)
配置文件都优先级:web.xml>struts.properties>struts.xml>default.properties
struts.xml的action配置:
<package name = "user" namespace ="/user" extends ="struts-default" >
<action name ="aaa" class = "com.action.loginAction" method="login">
<result name = "success">/login.jsp</result>
</action>
</package>
jsp校验:<span style="color: red;">${error}</span>