- 浏览: 184874 次
- 性别:
- 来自: 青岛
文章分类
- 全部博客 (117)
- java基础知识 (17)
- 技术积攒 (9)
- Oracle技术 (4)
- JSP技术 (6)
- Spring技术 (15)
- Linux技术 (6)
- Hibernate技术 (24)
- JPA技术 (1)
- Struts技术 (1)
- Struts2技术 (6)
- javascript知识 (4)
- myeclipse 使用技巧 (3)
- JavaEE技术 (2)
- JSTL (1)
- javamail技术 (1)
- jaf 技术 (1)
- 测试方法 (1)
- web技术积攒 (1)
- tomcat事项 (5)
- mysql使用 (1)
- 趣味题目 (2)
- 技术词汇 (1)
- EJB3.0 (2)
- weblogic 使用说明 (1)
- CSS (1)
最新评论
-
chenhao_java:
知识点五:依赖注入-自动装配依赖对象 -
黑白配:
为什么没有看见三个附件呢?
JavaMail jsp发送邮件 html格式 -
chunchong:
真晕,这样怎么能行呢
JAVA中防止SQL注入攻击类的源代码 -
Rod_johnson:
学习了!真不错
Hibernate:类继承的实现方式(二)--父子类各自一个表 -
erchong2011:
恩 很不错 学习了 简单
jsp页面自动跳转方式
1、使用领域对象来接收用户输入
【工程1:sx_ch0301】:
User对象中包含两个字段:username和password,在Action中有一个User对象user,则在jsp中:
Jsp代码
<input type="text" name="user.username">
<input type="password" name="user.password">
<input type="text" name="user.username">
<input type="password" name="user.password"> 来进行数据绑定。
当Struts2尝试设置user对象的username属性时,将依次调用以下的方法:
Java代码
action.getUser();
action.setUser(new User());
action.getUser().setUserName();
action.getUser();
action.setUser(new User());
action.getUser().setUserName();Struts2首先尝试获得User对象的引用,当它发现User对象为null时,它将使用User类的默认构造方法创建一个User实例,并调用action的setUser()方法设置这个实例。这样,Struts2就可以设置Usser对象的username字段了。
在Struts2中,自动实例化对象的特性对于任意层次的对象包含关系都是适用的。
例如, user.address.street这样的表达式会调用:
Java代码
getUser().getAdderss().setStreet(...);
getUser().getAdderss().setStreet(...); Struts2会先创建User对象,接着创建Address对象,然后设置Address对象的street属性。
2、使用ModelDriver action
【工程2:sx_ch0302】:
LoginAction 类实现了 ModelDriven 接口:(注意要实例化 User 对象,否则在 getModel() 时会取不到对象。)
Java代码
public class LoginAction implements Action, ModelDriven<User> {
private User user = new User();
@Override
public User getModel() {
return user;
}
}
public class LoginAction implements Action, ModelDriven<User> {
private User user = new User();
@Override
public User getModel() {
return user;
}
}在login.jsp页面中,表单字段就不需要再使用“user.”前缀了:
Jsp代码
<input type="text" name="username">
<input type="password" name="password">
<input type="text" name="username">
<input type="password" name="password">在sucess.jsp页面中,表单字段也不需要再使用“user.”前缀了:
Jsp代码
<s:property value="username" />
<s:property value="username" />3、使用action的属性接收用户输入
【工程3:sx_ch0303】:
在 Struts2 中,可以直接使用 action 的属性来接收用户的输入。为LoginAction添加 username 和 password 属性,同时实现这两个属性的getter和setter方法(这样可以直接删除 User 类 ):
Java代码
public class LoginAction implements Action {
private String username;
private String password;
public String execute() throws Exception {
// 这里直接和属性比对
if ("zhangsan".equals(username) && "1234".equals(password)) {
return SUCCESS;
} else {
return 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 class LoginAction implements Action {
private String username;
private String password;
public String execute() throws Exception {
// 这里直接和属性比对
if ("zhangsan".equals(username) && "1234".equals(password)) {
return SUCCESS;
} else {
return 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;
}
} 4、访问request、session和application对象
4.1 与 Servlet API 解耦的访问方式
【工程4:sx_ch0304】:
Java代码
// 获得action的执行上下文
ActionContext context = ActionContext.getContext();
// 得到三个对象
Map request = (Map)context.get("request");
Map session = context.getSession();
Map application = context.getApplication();
// 使用三个对象
// 在请求中放置欢迎信息
request.put("greeting", "欢迎光临");
// 在Session中保存 User 对象
session.put("user", user);
// 统计用户访问量,在 application 中保存用户访问量数据
Integer count = (Integer) application.get("counter");
if (null == count) {
count = 1;
} else {
count++;
}
application.put("counter", count);
// 获得action的执行上下文
ActionContext context = ActionContext.getContext();
// 得到三个对象
Map request = (Map)context.get("request");
Map session = context.getSession();
Map application = context.getApplication();
// 使用三个对象
// 在请求中放置欢迎信息
request.put("greeting", "欢迎光临");
// 在Session中保存 User 对象
session.put("user", user);
// 统计用户访问量,在 application 中保存用户访问量数据
Integer count = (Integer) application.get("counter");
if (null == count) {
count = 1;
} else {
count++;
}
application.put("counter", count);使用JSP内置的表达式语言来访问request、session和application范围的数据:
Jsp代码
${seesionScope.user.username},${requestScope.greeting}
${applicationScope.counter}
${seesionScope.user.username},${requestScope.greeting}
${applicationScope.counter}【工程5:sx_ch0305】:
利用请求对象来传递数据还有一种方式,直接使用 ActionContext 类的put()方法将数据保存到 ActionContext 中:
Jsp代码
ActionContext.getContext().put("greeting", "欢迎光临");
ActionContext.getContext().put("greeting", "欢迎光临");
然后在页面中,从请求对象中取出 greeting 属性:
Jsp代码
${requestScope.greeting}
${requestScope.greeting}或者:
Jsp代码
<%=request.getAttribute("greeting")%>
<%=request.getAttribute("greeting")%>【工程6:sx_ch0306】:
通过接口注入来获取request、session和application对象,
request:实现 RequestAware 接口,实现setRequset(Map request)方法
session:实现 SessionAware 接口,实现setSession(Map session)方法
application:实现 ApplicationAware 接口,实现setApplication(Map application)方法
Java代码
public class LoginAction implements Action, RequestAware, SessionAware,
ApplicationAware {
private User user = new User();
private Map request;
private Map session;
private Map application;
public void setRequest(Map request) {
this.request = request;
}
public void setSession(Map session) {
this.session = session;
}
public void setApplication(Map application) {
this.application = application;
}
@SuppressWarnings("unchecked")
public String execute() throws Exception {
if ("zhangsan".equals(user.getUsername())
&& "1234".equals(user.getPassword())) {
// 在请求中放置欢迎信息
request.put("greeting", "欢迎光临");
// 在Session中保存 User 对象
session.put("user", user);
// 统计用户访问量,在 application 中保存用户访问量数据
Integer count = (Integer) application.get("counter");
if (null == count) {
count = 1;
} else {
count++;
}
application.put("counter", count);
return SUCCESS;
} else {
return ERROR;
}
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
public class LoginAction implements Action, RequestAware, SessionAware,
ApplicationAware {
private User user = new User();
private Map request;
private Map session;
private Map application;
public void setRequest(Map request) {
this.request = request;
}
public void setSession(Map session) {
this.session = session;
}
public void setApplication(Map application) {
this.application = application;
}
@SuppressWarnings("unchecked")
public String execute() throws Exception {
if ("zhangsan".equals(user.getUsername())
&& "1234".equals(user.getPassword())) {
// 在请求中放置欢迎信息
request.put("greeting", "欢迎光临");
// 在Session中保存 User 对象
session.put("user", user);
// 统计用户访问量,在 application 中保存用户访问量数据
Integer count = (Integer) application.get("counter");
if (null == count) {
count = 1;
} else {
count++;
}
application.put("counter", count);
return SUCCESS;
} else {
return ERROR;
}
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
4.2 与 Servlet API 耦合的访问方式
【工程7:sx_ch0307】:
通过ServletActionContext 类来获取HttpServletRequest和ServletContext对象
HttpServletRequest:public static HttpServletRequest getRequest()
ServletContext:public static ServletContext getServletContext()
注:ServletActionContext 类并没有提供直接得到 HttpSession 对象的方法,此对象可通过 HttpServletRequest 对象的 getSession() 方法来得到。
Java代码
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
import com.coderdream.model.User;
import com.opensymphony.xwork2.Action;
public class LoginAction implements Action {
private User user = new User();
@SuppressWarnings("unchecked")
public String execute() throws Exception {
if ("zhangsan".equals(user.getUsername())
&& "1234".equals(user.getPassword())) {
HttpServletRequest request = ServletActionContext.getRequest();
HttpSession session = request.getSession();
ServletContext context = ServletActionContext.getServletContext();
// 在请求中放置欢迎信息
request.setAttribute("greeting", "欢迎光临");
// 在Session中保存 User 对象
session.setAttribute("user", user);
// 统计用户访问量,在 application 中保存用户访问量数据
Integer count = (Integer) context.getAttribute("counter");
if (null == count) {
count = 1;
} else {
count++;
}
context.setAttribute("counter", count);
return SUCCESS;
} else {
return ERROR;
}
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
import com.coderdream.model.User;
import com.opensymphony.xwork2.Action;
public class LoginAction implements Action {
private User user = new User();
@SuppressWarnings("unchecked")
public String execute() throws Exception {
if ("zhangsan".equals(user.getUsername())
&& "1234".equals(user.getPassword())) {
HttpServletRequest request = ServletActionContext.getRequest();
HttpSession session = request.getSession();
ServletContext context = ServletActionContext.getServletContext();
// 在请求中放置欢迎信息
request.setAttribute("greeting", "欢迎光临");
// 在Session中保存 User 对象
session.setAttribute("user", user);
// 统计用户访问量,在 application 中保存用户访问量数据
Integer count = (Integer) context.getAttribute("counter");
if (null == count) {
count = 1;
} else {
count++;
}
context.setAttribute("counter", count);
return SUCCESS;
} else {
return ERROR;
}
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}【工程8:sx_ch0308】:
还可以通过 ActionContext 类的 get() 方法,传递 ServletActionContext.HTTP_REQUEST 和 ServletActionContext.SERVLET_CONTEXT 键值来获取HttpServletRequest和ServletContext对象,同样,通过 ServletActionContext.HTTP_RESPONSE 键值来得到 HttpServletResponse 对象
Java代码
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
import com.coderdream.model.User;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
public class LoginAction implements Action {
private User user = new User();
@SuppressWarnings("unchecked")
public String execute() throws Exception {
if ("zhangsan".equals(user.getUsername())
&& "1234".equals(user.getPassword())) {
ActionContext ctx = ActionContext.getContext();
// 通过键值获得对象
HttpServletRequest request = (HttpServletRequest) ctx
.get(ServletActionContext.HTTP_REQUEST);
HttpSession session = request.getSession();
ServletContext context = (ServletContext) ctx
.get(ServletActionContext.SERVLET_CONTEXT);
// 在请求中放置欢迎信息
request.setAttribute("greeting", "欢迎光临");
// 在Session中保存 User 对象
session.setAttribute("user", user);
// 统计用户访问量,在 application 中保存用户访问量数据
Integer count = (Integer) context.getAttribute("counter");
if (null == count) {
count = 1;
} else {
count++;
}
context.setAttribute("counter", count);
return SUCCESS;
} else {
return ERROR;
}
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
import com.coderdream.model.User;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
public class LoginAction implements Action {
private User user = new User();
@SuppressWarnings("unchecked")
public String execute() throws Exception {
if ("zhangsan".equals(user.getUsername())
&& "1234".equals(user.getPassword())) {
ActionContext ctx = ActionContext.getContext();
// 通过键值获得对象
HttpServletRequest request = (HttpServletRequest) ctx
.get(ServletActionContext.HTTP_REQUEST);
HttpSession session = request.getSession();
ServletContext context = (ServletContext) ctx
.get(ServletActionContext.SERVLET_CONTEXT);
// 在请求中放置欢迎信息
request.setAttribute("greeting", "欢迎光临");
// 在Session中保存 User 对象
session.setAttribute("user", user);
// 统计用户访问量,在 application 中保存用户访问量数据
Integer count = (Integer) context.getAttribute("counter");
if (null == count) {
count = 1;
} else {
count++;
}
context.setAttribute("counter", count);
return SUCCESS;
} else {
return ERROR;
}
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}【工程9:sx_ch0309】:
最后,还可以通过 Action 类实现 ServletRequestAware 和 ServletContextAware 接口,由 Struts2 框架向 Action 实例注入 HttpServletRequest 和 ServletContext 对象:
Java代码
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.util.ServletContextAware;
import com.coderdream.model.User;
import com.opensymphony.xwork2.Action;
public class LoginAction implements Action, ServletRequestAware,
ServletContextAware {
private User user = new User();
private HttpServletRequest request;
private ServletContext context;
@SuppressWarnings("unchecked")
public String execute() throws Exception {
if ("zhangsan".equals(user.getUsername())
&& "1234".equals(user.getPassword())) {
HttpSession session = request.getSession();
// 在请求中放置欢迎信息
request.setAttribute("greeting", "欢迎光临");
// 在Session中保存 User 对象
session.setAttribute("user", user);
// 统计用户访问量,在 application 中保存用户访问量数据
Integer count = (Integer) context.getAttribute("counter");
if (null == count) {
count = 1;
} else {
count++;
}
context.setAttribute("counter", count);
return SUCCESS;
} else {
return ERROR;
}
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public void setServletRequest(HttpServletRequest request) {
this.request = request;
}
public void setServletContext(ServletContext context) {
this.context = context;
}
}
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.util.ServletContextAware;
import com.coderdream.model.User;
import com.opensymphony.xwork2.Action;
public class LoginAction implements Action, ServletRequestAware,
ServletContextAware {
private User user = new User();
private HttpServletRequest request;
private ServletContext context;
@SuppressWarnings("unchecked")
public String execute() throws Exception {
if ("zhangsan".equals(user.getUsername())
&& "1234".equals(user.getPassword())) {
HttpSession session = request.getSession();
// 在请求中放置欢迎信息
request.setAttribute("greeting", "欢迎光临");
// 在Session中保存 User 对象
session.setAttribute("user", user);
// 统计用户访问量,在 application 中保存用户访问量数据
Integer count = (Integer) context.getAttribute("counter");
if (null == count) {
count = 1;
} else {
count++;
}
context.setAttribute("counter", count);
return SUCCESS;
} else {
return ERROR;
}
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public void setServletRequest(HttpServletRequest request) {
this.request = request;
}
public void setServletContext(ServletContext context) {
this.context = context;
}
}
输出结果:
【工程1:sx_ch0301】:
User对象中包含两个字段:username和password,在Action中有一个User对象user,则在jsp中:
Jsp代码
<input type="text" name="user.username">
<input type="password" name="user.password">
<input type="text" name="user.username">
<input type="password" name="user.password"> 来进行数据绑定。
当Struts2尝试设置user对象的username属性时,将依次调用以下的方法:
Java代码
action.getUser();
action.setUser(new User());
action.getUser().setUserName();
action.getUser();
action.setUser(new User());
action.getUser().setUserName();Struts2首先尝试获得User对象的引用,当它发现User对象为null时,它将使用User类的默认构造方法创建一个User实例,并调用action的setUser()方法设置这个实例。这样,Struts2就可以设置Usser对象的username字段了。
在Struts2中,自动实例化对象的特性对于任意层次的对象包含关系都是适用的。
例如, user.address.street这样的表达式会调用:
Java代码
getUser().getAdderss().setStreet(...);
getUser().getAdderss().setStreet(...); Struts2会先创建User对象,接着创建Address对象,然后设置Address对象的street属性。
2、使用ModelDriver action
【工程2:sx_ch0302】:
LoginAction 类实现了 ModelDriven 接口:(注意要实例化 User 对象,否则在 getModel() 时会取不到对象。)
Java代码
public class LoginAction implements Action, ModelDriven<User> {
private User user = new User();
@Override
public User getModel() {
return user;
}
}
public class LoginAction implements Action, ModelDriven<User> {
private User user = new User();
@Override
public User getModel() {
return user;
}
}在login.jsp页面中,表单字段就不需要再使用“user.”前缀了:
Jsp代码
<input type="text" name="username">
<input type="password" name="password">
<input type="text" name="username">
<input type="password" name="password">在sucess.jsp页面中,表单字段也不需要再使用“user.”前缀了:
Jsp代码
<s:property value="username" />
<s:property value="username" />3、使用action的属性接收用户输入
【工程3:sx_ch0303】:
在 Struts2 中,可以直接使用 action 的属性来接收用户的输入。为LoginAction添加 username 和 password 属性,同时实现这两个属性的getter和setter方法(这样可以直接删除 User 类 ):
Java代码
public class LoginAction implements Action {
private String username;
private String password;
public String execute() throws Exception {
// 这里直接和属性比对
if ("zhangsan".equals(username) && "1234".equals(password)) {
return SUCCESS;
} else {
return 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 class LoginAction implements Action {
private String username;
private String password;
public String execute() throws Exception {
// 这里直接和属性比对
if ("zhangsan".equals(username) && "1234".equals(password)) {
return SUCCESS;
} else {
return 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;
}
} 4、访问request、session和application对象
4.1 与 Servlet API 解耦的访问方式
【工程4:sx_ch0304】:
Java代码
// 获得action的执行上下文
ActionContext context = ActionContext.getContext();
// 得到三个对象
Map request = (Map)context.get("request");
Map session = context.getSession();
Map application = context.getApplication();
// 使用三个对象
// 在请求中放置欢迎信息
request.put("greeting", "欢迎光临");
// 在Session中保存 User 对象
session.put("user", user);
// 统计用户访问量,在 application 中保存用户访问量数据
Integer count = (Integer) application.get("counter");
if (null == count) {
count = 1;
} else {
count++;
}
application.put("counter", count);
// 获得action的执行上下文
ActionContext context = ActionContext.getContext();
// 得到三个对象
Map request = (Map)context.get("request");
Map session = context.getSession();
Map application = context.getApplication();
// 使用三个对象
// 在请求中放置欢迎信息
request.put("greeting", "欢迎光临");
// 在Session中保存 User 对象
session.put("user", user);
// 统计用户访问量,在 application 中保存用户访问量数据
Integer count = (Integer) application.get("counter");
if (null == count) {
count = 1;
} else {
count++;
}
application.put("counter", count);使用JSP内置的表达式语言来访问request、session和application范围的数据:
Jsp代码
${seesionScope.user.username},${requestScope.greeting}
${applicationScope.counter}
${seesionScope.user.username},${requestScope.greeting}
${applicationScope.counter}【工程5:sx_ch0305】:
利用请求对象来传递数据还有一种方式,直接使用 ActionContext 类的put()方法将数据保存到 ActionContext 中:
Jsp代码
ActionContext.getContext().put("greeting", "欢迎光临");
ActionContext.getContext().put("greeting", "欢迎光临");
然后在页面中,从请求对象中取出 greeting 属性:
Jsp代码
${requestScope.greeting}
${requestScope.greeting}或者:
Jsp代码
<%=request.getAttribute("greeting")%>
<%=request.getAttribute("greeting")%>【工程6:sx_ch0306】:
通过接口注入来获取request、session和application对象,
request:实现 RequestAware 接口,实现setRequset(Map request)方法
session:实现 SessionAware 接口,实现setSession(Map session)方法
application:实现 ApplicationAware 接口,实现setApplication(Map application)方法
Java代码
public class LoginAction implements Action, RequestAware, SessionAware,
ApplicationAware {
private User user = new User();
private Map request;
private Map session;
private Map application;
public void setRequest(Map request) {
this.request = request;
}
public void setSession(Map session) {
this.session = session;
}
public void setApplication(Map application) {
this.application = application;
}
@SuppressWarnings("unchecked")
public String execute() throws Exception {
if ("zhangsan".equals(user.getUsername())
&& "1234".equals(user.getPassword())) {
// 在请求中放置欢迎信息
request.put("greeting", "欢迎光临");
// 在Session中保存 User 对象
session.put("user", user);
// 统计用户访问量,在 application 中保存用户访问量数据
Integer count = (Integer) application.get("counter");
if (null == count) {
count = 1;
} else {
count++;
}
application.put("counter", count);
return SUCCESS;
} else {
return ERROR;
}
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
public class LoginAction implements Action, RequestAware, SessionAware,
ApplicationAware {
private User user = new User();
private Map request;
private Map session;
private Map application;
public void setRequest(Map request) {
this.request = request;
}
public void setSession(Map session) {
this.session = session;
}
public void setApplication(Map application) {
this.application = application;
}
@SuppressWarnings("unchecked")
public String execute() throws Exception {
if ("zhangsan".equals(user.getUsername())
&& "1234".equals(user.getPassword())) {
// 在请求中放置欢迎信息
request.put("greeting", "欢迎光临");
// 在Session中保存 User 对象
session.put("user", user);
// 统计用户访问量,在 application 中保存用户访问量数据
Integer count = (Integer) application.get("counter");
if (null == count) {
count = 1;
} else {
count++;
}
application.put("counter", count);
return SUCCESS;
} else {
return ERROR;
}
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
4.2 与 Servlet API 耦合的访问方式
【工程7:sx_ch0307】:
通过ServletActionContext 类来获取HttpServletRequest和ServletContext对象
HttpServletRequest:public static HttpServletRequest getRequest()
ServletContext:public static ServletContext getServletContext()
注:ServletActionContext 类并没有提供直接得到 HttpSession 对象的方法,此对象可通过 HttpServletRequest 对象的 getSession() 方法来得到。
Java代码
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
import com.coderdream.model.User;
import com.opensymphony.xwork2.Action;
public class LoginAction implements Action {
private User user = new User();
@SuppressWarnings("unchecked")
public String execute() throws Exception {
if ("zhangsan".equals(user.getUsername())
&& "1234".equals(user.getPassword())) {
HttpServletRequest request = ServletActionContext.getRequest();
HttpSession session = request.getSession();
ServletContext context = ServletActionContext.getServletContext();
// 在请求中放置欢迎信息
request.setAttribute("greeting", "欢迎光临");
// 在Session中保存 User 对象
session.setAttribute("user", user);
// 统计用户访问量,在 application 中保存用户访问量数据
Integer count = (Integer) context.getAttribute("counter");
if (null == count) {
count = 1;
} else {
count++;
}
context.setAttribute("counter", count);
return SUCCESS;
} else {
return ERROR;
}
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
import com.coderdream.model.User;
import com.opensymphony.xwork2.Action;
public class LoginAction implements Action {
private User user = new User();
@SuppressWarnings("unchecked")
public String execute() throws Exception {
if ("zhangsan".equals(user.getUsername())
&& "1234".equals(user.getPassword())) {
HttpServletRequest request = ServletActionContext.getRequest();
HttpSession session = request.getSession();
ServletContext context = ServletActionContext.getServletContext();
// 在请求中放置欢迎信息
request.setAttribute("greeting", "欢迎光临");
// 在Session中保存 User 对象
session.setAttribute("user", user);
// 统计用户访问量,在 application 中保存用户访问量数据
Integer count = (Integer) context.getAttribute("counter");
if (null == count) {
count = 1;
} else {
count++;
}
context.setAttribute("counter", count);
return SUCCESS;
} else {
return ERROR;
}
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}【工程8:sx_ch0308】:
还可以通过 ActionContext 类的 get() 方法,传递 ServletActionContext.HTTP_REQUEST 和 ServletActionContext.SERVLET_CONTEXT 键值来获取HttpServletRequest和ServletContext对象,同样,通过 ServletActionContext.HTTP_RESPONSE 键值来得到 HttpServletResponse 对象
Java代码
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
import com.coderdream.model.User;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
public class LoginAction implements Action {
private User user = new User();
@SuppressWarnings("unchecked")
public String execute() throws Exception {
if ("zhangsan".equals(user.getUsername())
&& "1234".equals(user.getPassword())) {
ActionContext ctx = ActionContext.getContext();
// 通过键值获得对象
HttpServletRequest request = (HttpServletRequest) ctx
.get(ServletActionContext.HTTP_REQUEST);
HttpSession session = request.getSession();
ServletContext context = (ServletContext) ctx
.get(ServletActionContext.SERVLET_CONTEXT);
// 在请求中放置欢迎信息
request.setAttribute("greeting", "欢迎光临");
// 在Session中保存 User 对象
session.setAttribute("user", user);
// 统计用户访问量,在 application 中保存用户访问量数据
Integer count = (Integer) context.getAttribute("counter");
if (null == count) {
count = 1;
} else {
count++;
}
context.setAttribute("counter", count);
return SUCCESS;
} else {
return ERROR;
}
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
import com.coderdream.model.User;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
public class LoginAction implements Action {
private User user = new User();
@SuppressWarnings("unchecked")
public String execute() throws Exception {
if ("zhangsan".equals(user.getUsername())
&& "1234".equals(user.getPassword())) {
ActionContext ctx = ActionContext.getContext();
// 通过键值获得对象
HttpServletRequest request = (HttpServletRequest) ctx
.get(ServletActionContext.HTTP_REQUEST);
HttpSession session = request.getSession();
ServletContext context = (ServletContext) ctx
.get(ServletActionContext.SERVLET_CONTEXT);
// 在请求中放置欢迎信息
request.setAttribute("greeting", "欢迎光临");
// 在Session中保存 User 对象
session.setAttribute("user", user);
// 统计用户访问量,在 application 中保存用户访问量数据
Integer count = (Integer) context.getAttribute("counter");
if (null == count) {
count = 1;
} else {
count++;
}
context.setAttribute("counter", count);
return SUCCESS;
} else {
return ERROR;
}
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}【工程9:sx_ch0309】:
最后,还可以通过 Action 类实现 ServletRequestAware 和 ServletContextAware 接口,由 Struts2 框架向 Action 实例注入 HttpServletRequest 和 ServletContext 对象:
Java代码
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.util.ServletContextAware;
import com.coderdream.model.User;
import com.opensymphony.xwork2.Action;
public class LoginAction implements Action, ServletRequestAware,
ServletContextAware {
private User user = new User();
private HttpServletRequest request;
private ServletContext context;
@SuppressWarnings("unchecked")
public String execute() throws Exception {
if ("zhangsan".equals(user.getUsername())
&& "1234".equals(user.getPassword())) {
HttpSession session = request.getSession();
// 在请求中放置欢迎信息
request.setAttribute("greeting", "欢迎光临");
// 在Session中保存 User 对象
session.setAttribute("user", user);
// 统计用户访问量,在 application 中保存用户访问量数据
Integer count = (Integer) context.getAttribute("counter");
if (null == count) {
count = 1;
} else {
count++;
}
context.setAttribute("counter", count);
return SUCCESS;
} else {
return ERROR;
}
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public void setServletRequest(HttpServletRequest request) {
this.request = request;
}
public void setServletContext(ServletContext context) {
this.context = context;
}
}
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.util.ServletContextAware;
import com.coderdream.model.User;
import com.opensymphony.xwork2.Action;
public class LoginAction implements Action, ServletRequestAware,
ServletContextAware {
private User user = new User();
private HttpServletRequest request;
private ServletContext context;
@SuppressWarnings("unchecked")
public String execute() throws Exception {
if ("zhangsan".equals(user.getUsername())
&& "1234".equals(user.getPassword())) {
HttpSession session = request.getSession();
// 在请求中放置欢迎信息
request.setAttribute("greeting", "欢迎光临");
// 在Session中保存 User 对象
session.setAttribute("user", user);
// 统计用户访问量,在 application 中保存用户访问量数据
Integer count = (Integer) context.getAttribute("counter");
if (null == count) {
count = 1;
} else {
count++;
}
context.setAttribute("counter", count);
return SUCCESS;
} else {
return ERROR;
}
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public void setServletRequest(HttpServletRequest request) {
this.request = request;
}
public void setServletContext(ServletContext context) {
this.context = context;
}
}
输出结果:
发表评论
-
Struts2防止表单重复提交
2009-08-11 14:59 1156最近开发中涉及到了表单重复提次的问题,通过研究做个总结。 防 ... -
struts2的action标签
2009-08-11 11:21 1456一直以为action标签很鸡肋,直到用到了才发现其实很有用处的 ... -
struts2中使用的验证码
2009-07-31 09:01 1725对于验证码,必须采用一张临时图片来显示随机验证码,万不可采用直 ... -
Struts2中struts.xml的Action配置详解
2009-07-17 09:08 1921Struts2中struts.xml的Action配置详解 ... -
struts2中值栈的理解
2009-07-14 13:40 3436通过对struts2的一段时间 ...
相关推荐
### Struts 2 Action 动态方法调用详解 #### 一、引言 在Struts 2框架中,Action动态方法调用是一项非常实用的功能。它允许开发者在一个Action类中定义多个处理方法,而不仅仅局限于传统的`execute()`方法。这种...
Action是Struts2的核心组件,用于处理用户的请求,并返回相应的结果。在现代Web应用中,数据通常以JSON(JavaScript Object Notation)格式在客户端和服务器之间交换,因为JSON具有轻量级、易于解析的特性。本篇将...
在Struts2中,Action类扮演着控制器的角色,负责处理用户请求并协调模型与视图之间的交互。以下是关于"struts2 Action编写方式"的详细讲解: 1. POJO(Plain Old Java Object)方式: 在Struts2中,Action类可以...
在处理用户请求时,Struts2允许开发者通过Action类来接收和处理参数,包括中文参数。当我们需要通过POST方法提交包含中文字符的数据时,可能会遇到编码问题,因为HTTP请求默认使用的是ASCII编码,而中文字符需要UTF-...
Struts2 Action是该框架中的核心组件,用于处理用户请求并返回相应的响应。 首先,要了解Struts2 Action的开发,需要熟悉其基本概念。Struts2 Action本质上是一个Java类,它包含了处理用户请求的业务逻辑。为了将这...
ajaxt json 调用struts2 action的实例(myeclipse 直接导入运行) 学习点: 1;怎样在页面用ajax调用struts2的action 2;怎样对struts进行配置 3;ajax的运行历程 最简单明了的实例,清晰的帮你弄清上述概念,运行...
Struts2是一个强大的MVC框架,它在设计上吸收了XWork的核心机制,尤其是在Action的处理上。Action是Struts2中的核心组件,它负责处理用户的请求并执行业务逻辑。在Struts2中,Action类需要实现`...
5. **整合测试**:Struts2SpringUnitDemo还涉及到了框架的整合测试,这通常是为了确保Struts2的Action能够顺利地与Spring管理的bean交互。整合测试可能会包括检查Action是否能正确地从Spring容器获取依赖,以及在...
如果你想自学struts2,此文档是很好的自学宝典,经典struts2 in Action,能帮你建立整体的struts2思想,你还在犹豫什么
总的来说,"struts2+json"资源涉及到了Struts2框架中的Action设计、拦截器机制、结果类型的配置,以及AJAX和JSON在Web应用中的使用。理解这些知识点对于开发动态、交互性强的Java Web应用至关重要。
Struts2 中 Action 接收参数的方法 Struts2 框架中,Action 组件可以通过多种方式接收参数,这些方式包括使用 Action 的属性、使用 DomainModel 和使用 ModelDriven。下面将详细介绍这些方法: 使用 Action 的属性...
2. **Struts2 Action**:Action是Struts2的核心组件,它处理用户请求,并通过业务层进行数据处理。Action类通常继承自`org.apache.struts2.dispatcher.ng.ExecuteOperations`或实现了`...
ActionSupport 类则提供了常用功能的实现,但 Action 接口并非强制,任何包含 execute 方法的普通 Java 对象(POJO)都能作为 Struts2 的 Action。 2. **线程模型**: - Struts1 的 Action 实例是单例的,这意味着...
而在Struts2中,Action类可以实现Action接口,也可以实现其他接口以获取自定义服务。更重要的是,Struts2允许任何带有execute方法的普通Java对象(POJO)作为Action,提供了更大的灵活性。 线程模型是另一个关键...
`Struts2_Action` 示例展示了如何定义和执行Struts2中的Action,这是框架的核心部分。通过这个实例,你可以学习到Action的生命周期、结果映射以及如何处理业务逻辑。 7. **Struts2 HelloWorld** `Struts2_Hello...
Struts1 的 Action 类需要继承一个抽象基类,而 Struts2 的 Action 类可以实现一个 Action 接口,使可选和定制的服务成为可能。 2. Struts2 的工作流程: Struts2 的工作流程可以分为九个步骤: (1)客户端提交...
stuts2 项目开发action 类 action 视图文件约定规则