初窥Struts2(一)
在介绍struts2之前下回顾一下我们没使用struts2之前是怎么进行网站系统开发的。利用MVC分层思想建立一个项目,我们只实现一个登陆模块功能
首先我们在mysql中创建按一张表代码如下
1 create table user( 2 id int primary key auto_increment, 3 name varchar(20) not null, 4 password varchar(20) not null 5 ); 6 insert into user(name,password) values('tim','123'); 7 insert into user(name,password) values('jim','123'); 8 insert into user(name,password) values('harry','123');
在MyEclipse建一个工程,工程目录结构如下
一个简单的利用MVC搭建的项目,web.xml配置如下
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 5 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 6 <servlet-mapping> 7 <servlet-name>ActionServlet</servlet-name> 8 <url-pattern>*.action</url-pattern> 9 </servlet-mapping> 10 <welcome-file-list> 11 <welcome-file>index.jsp</welcome-file> 12 </welcome-file-list> 13 </web-app>
使用ActionServlet充当前端控制器,所有请求都通过ActionServlet来控制页面的跳转.
ActionServlet的代码:
1 package demo.servlet; 2 3 import java.io.IOException; 4 5 import javax.servlet.ServletException; 6 import javax.servlet.http.HttpServlet; 7 import javax.servlet.http.HttpServletRequest; 8 import javax.servlet.http.HttpServletResponse; 9 import javax.servlet.http.HttpSession; 10 11 import demo.action.UserAction; 12 import demo.entity.User; 13 14 public class ActionServlet extends HttpServlet { 15 16 /** 17 * 18 */ 19 private static final long serialVersionUID = -5458581559476188332L; 20 21 @Override 22 public void service(HttpServletRequest request, HttpServletResponse response) 23 throws ServletException, IOException { 24 String url = request.getRequestURI(); 25 System.out.println(url); 26 String action = url.substring(url.lastIndexOf("/"), 27 url.lastIndexOf(".")); 28 if (action.equals("/login")) { 29 User user = UserAction.login(request, response); 30 if (user != null) { 31 HttpSession session = request.getSession(); 32 session.setAttribute("user", user); 33 response.sendRedirect("main.jsp"); 34 } else { 35 request.setAttribute("msg", "用户名或密码错误"); 36 request.getRequestDispatcher(url).forward(request, response); 37 } 38 } 39 } 40 41 }
上述代码
每一个请求我们都要,进行判断,这样随着业务的增加请求越来越多,service里面的代码越来越多,不便于维护。于是便有了struts2框架,struts2充当了前端控制器的角色,不过struts2控制功能更加强大,代码更加容易维护,使我们只关注与业务代码的编写,而不用关心业务之间的跳转。
现在我们对上述的项目使用struts2进行改进
首先配置web.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 5 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 6 <filter> 7 <filter-name>struts2</filter-name> 8 <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> 9 </filter> 10 <filter-mapping> 11 <filter-name>struts2</filter-name> 12 <url-pattern>/*</url-pattern> 13 </filter-mapping> 14 </web-app>
在src下新建一个struts.xml文件
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE struts PUBLIC 3 "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" 4 "http://struts.apache.org/dtds/struts-2.1.dtd"> 5 <struts> 6 <!-- 配置package,用于组织和管理Action的配置 7 属性: 8 name 指定package的名称,可以定义多个包,name不能重复 9 extends 指定当前包的基包,通常使用包struts-default, 10 该包由strtus-core-*.jar/struts-default.xml中定义, 包含package所必需的底层配置 11 namespace 指定包的命名空间,用于访问包中的Action时指定对应的路径 12 例: namespace="/demo",actionName="login" 13 http://localhost:8080/struts2_analysis/demo/login.action 14 namespace="/",actionName="login" 15 http://localhost:8080/struts2_analysis/login.action 16 17 --> 18 19 <package name="struts2-analysis" extends="struts-default" 20 namespace="/demo"> 21 <!-- 配置login 22 属性name 指定访问Action时使用的名称,访问时以.action结尾 23 method 指定处理业务的方法名称,默认值是execute 24 --> 25 <action name="login" 26 class="demo.action.UserAction" 27 method="execute"> 28 <!-- 配置Result,用于将视图页面映射为逻辑名称 --> 29 <result name="success">/main.jsp</result> 30 <result name="fail">/login.jsp</result> 31 </action> 32 33 </package> 34 </struts>
在对UserAction进行改写
package demo.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.opensymphony.xwork2.ActionContext;
import demo.dao.UserDao;
import demo.entity.User;
public class UserAction {
public static User login(HttpServletRequest request,
HttpServletResponse response) {
String name = request.getParameter("name");
String password = request.getParameter("password");
UserDao dao = new UserDao();
User user = dao.findUser(name, password);
return user;
}
private String name;
private String password;
private String msg;
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String execute() {
UserDao dao = new UserDao();
User user = dao.findUser(name, password);
if (user != null)
return "success";
else {
msg = "用户名或密码错误";
return "fail";
}
}
}
login.jsp代码
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <title>login</title> 8 <style type="text/css"> 9 .input { 10 width: 200px; 11 } 12 13 table { 14 margin-left: 35%; 15 } 16 </style> 17 </head> 18 <body> 19 <form action="demo/login.action"> 20 <table border="1"> 21 <tr> 22 <td> 23 用户名: 24 </td> 25 <td> 26 <input type="text" name="name" class="input" /> 27 </td> 28 </tr> 29 <tr> 30 <td> 31 密 码: 32 </td> 33 <td> 34 <input type="password" name="password" class="input" /> 35 </td> 36 </tr> 37 <tr> 38 <td colspan="2" align="center"> 39 <span style="color: red">${msg}</span> 40 </td> 41 </tr> 42 <tr> 43 <td colspan="2" align="center"> 44 <input type="submit" value="登录" style="width: 100px;" /> 45 </td> 46 </tr> 47 </table> 48 </form> 49 </body> 50 </html>
在浏览器中输入 http://localhost:8080/struts2_analysis/login.jsp
这样一个利用struts2构建的MVC程序就完成了.有了struts2我们只需要关注与Action的编写就可以了,页面的跳转我们可以再struts.xml中配置。
posted on 2012-07-27 00:07 Arts&Crafts 阅读(223) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构