Struts
一,搭建一个Struts2项目的步骤:
1.引入Struts2依赖的jar包
2.在web.xml文件中配置一个Filter拦截所有的请求,让转入Struts2工作体系
StrutsPrepareAndExecuteFilter是Struts2的核心的控制器
<filter>
<filter-name>struts2</filter-name>
<filter-class> org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.class
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3.在src文件下新建一个struts.xml 文件 ,这是Struts2的核心配置文件,配置如下例子
eg:
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="/" extends="struts-default" namespace="/">
//package 的name自己取名,只要是唯一的就行;namespece是构成访问路径的一部分
<action name="reg" class="com.zt.action.RegAction">
<result>/success.jsp</result>
</action>
//reg也是访问路径的一部分
<action name="login" class="com.zt.action.LoginAction">
<result>/success.jsp</result>
</action>
</package>
</struts>
4.编写一个处理用户请求的Action类
Struts2的action可以是一个简单的java类,
也可以继承ActionSupport 类。
注意1.类名的全路径必须是3步骤中配置的类路径com.zt.action.RegAction
2.访问Action时候根据namespace+Action name来访问的
例如如果配置如下,
<struts>
<package name="user" extends="struts-default" namespace="/user">
//package 的name自己取名,只要是唯一的就行
<action name="hello" class="com.zt.action.HelloAction">
<result name="success">/success.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package>
</struts>
则访问HelloAction 就需要工程名+/user/hello
4.Action中获取表单值
1:字段驱动
Action中属性名与页面表单中的input name进行一一对应,给上set方法,就会自动注入页面传递过来的值
eg:
public class RegAction extends ActionSupport{
private String name;
private String pass;
public void setName(String name) {
this.name = name;
}
public void setPass(String pass) {
this.pass = pass;
}
@Override
public String execute() throws Exception {
System.out.println("name-->"+name);
System.out.println("pass-->"+pass);
return SUCCESS;
}
}
2.模型驱动
需要编写一个模型类, Action中模型类的属性名与页面表单的name进行一一对应 ,Action中提供一个模型类属性, 实现 ModelDriven<User>接口并指定类名,实现getModel()方法,创建并返回一个类对象
eg:
public class LoginAction extends ActionSupport
implements ModelDriven<User>{
private User user;
@Override
public String execute() throws Exception {
System.out.println(user.getName());
System.out.println(user.getPass());
return SUCCESS;
}
@Override
public User getModel() {
user=new User();
return user;
}
}
5.Action中如何传值:
struts如何传值
一、 Map
1:
public String execute() throws Exception {
Map request = (Map) ActionContext.getContext().get("request");
Map session = (Map) ActionContext.getContext().getSession();
Map application = (Map) ActionContext.getContext().getApplication();
request.put("name", "admin");
session.put("sessionname", "sessionadmin");
application.put("applicationname", "applicationadmin");
return SUCCESS;
}
2:
public class UserAction extends ActionSupport implements RequestAware,
SessionAware, ApplicationAware {
Map request;
Map session;
Map application;
@Override
public String execute() throws Exception {
request.put("name", "admin");
session.put("sessionname", "sessionadmin");
application.put("applicationname", "applicationadmin");
return SUCCESS;
}
二、HttpServletRequest
1:
public String execute() throws Exception {
HttpServletRequest request = ServletActionContext.getRequest();
HttpSession session = request.getSession();
ServletContext application = session.getServletContext();
request.setAttribute("name", "admin");
session.setAttribute("sessionname", "sessionadmin");
application.setAttribute("applicationname", "applicationadmin");
return SUCCESS;
}
2:
public class UserAction extends ActionSupport implements RequestAware,
SessionAware, ApplicationAware {
Map request;
Map session;
Map application;
@Override
public String execute() throws Exception {
request.put("name", "admin");
session.put("sessionname", "sessionadmin");
application.put("applicationname", "applicationadmin");
return SUCCESS;
}
@Override
public void setRequest(Map<String, Object> arg0) {
request = arg0;
}
@Override
public void setApplication(Map<String, Object> arg0) {
application = arg0;
}
@Override
public void setSession(Map<String, Object> arg0) {
session = arg0;
}
}
六,struts2动态方法的调用
namespace+Action name!方法名
完全匹配namespace+Action name 如果找不到会忽略namespace 找“/”+Action name
七、struts中的文件上传
表单<form action="upload" method="post" enctype="multipart/form-data">
表单的<input type =“file”name=“”>
单个文件的上传:
public class FileUploadAction extends ActionSupport {
private String name;
private File photo;
private String photoFileName; // file属性名+Name
private String photoContentType;// file属性名+ContentType
public void setName(String name) {
this.name = name;
}
public void setPhoto(File photo) {
this.photo = photo;
}
public void setPhotoFileName(String photoFileName) {
this.photoFileName = photoFileName;
}
public void setPhotoContentType(String photoContentType) {
this.photoContentType = photoContentType;
}
public String execute() throws Exception {
String path = ServletActionContext.getRequest().getRealPath(
"/uploadFiles");
long curr = System.currentTimeMillis();
System.out.println(path);
File file = new File(path, curr
+ photoFileName.substring(photoFileName.lastIndexOf(".")));
FileUtils.copyFile(photo, file);
return SUCCESS;
}
}
多个文件的上传:
public class FileUploadAction extends ActionSupport {
private String name;
private File photo;
private String photoFileName; // file属性名+Name
private String photoContentType;// file属性名+ContentType
public void setName(String name) {
this.name = name;
}
public void setPhoto(File photo) {
this.photo = photo;
}
public void setPhotoFileName(String photoFileName) {
this.photoFileName = photoFileName;
}
public void setPhotoContentType(String photoContentType) {
this.photoContentType = photoContentType;
}
public String execute() throws Exception {
String path = ServletActionContext.getRequest().getRealPath(
"/uploadFiles");
long curr = System.currentTimeMillis();
System.out.println(path);
File file = new File(path, curr
+ photoFileName.substring(photoFileName.lastIndexOf(".")));
FileUtils.copyFile(photo, file);
return SUCCESS;
}
}
八、struts2异常处理
1.配置 log4j
log4j -》log for java
log4j等级 error-》waring -》info
九:struts2拦截器Interceptor
struts的拦截器两种实现方式
1。实现Interceptor接口
2.继承AbstractInterceptor 抽象类
拦截器多个拦截器采取栈的思想,先进后出
十、Action 跳转jsp和跳转action
Action 跳转jsp:
1.默认type=“dispatcher”, 是请求转发,一次请求,地址栏不发生变化,可以传递request范围值
2.action中加入type=“redirect”变为请求重定向,两次请求,地址栏会发生变化,不可以传递request范围值
Action跳转action :
type="chain"
请求转发 一次请求 地址栏不发生变化
<result name="index" type="chain">
<param name="namespace">/user</param>
<param name="actionName">user</param>
</result>
请求转发 一次请求 地址栏不发生变化
<result name="index" type="chain">
<param name="namespace">/user</param>
<param name="actionName">user</param>
</result>
type="redirectAction" 请求重定向
<result name="index" type="redirectAction">user/user</result>
十一:struts2 国际化(I18N) Internationalization