- 浏览: 5664 次
- 性别:
- 来自: 武汉
-
最近访客 更多访客>>
文章分类
最新评论
-
ybj316:
有js代码吗,可否共享?
js调用webservice客户端编写 -
itcyt:
yanglinumber1 写道谢谢大家的关注,我已经搞定。。 ...
js调用webservice客户端编写 -
yanglinumber1:
谢谢大家的关注,我已经搞定。。谢谢!
js调用webservice客户端编写 -
lijiang:
struts2入门的文章
struts2第三篇:踏入struts2世界第一步 -
yanglinumber1:
<div class="quote_title ...
struts2第三篇:踏入struts2世界第一步
/*
大家如果喜欢学习struts2可以随时来看看,欢迎大家的到来!
由于我的时间有限,很多地方都不能详细的讲解,因此需要大家的理解和支持,其实学这个,我也只能做一下指导,如果大家有不懂的可以留言询问。大家互相学习学习!
我会在每一天出一篇struts2讲解。如果有事耽搁了,请大家原谅!
*/
/*
大家注意代码中标有红记的地方,是学习的重点。
*/
第一步(view编写):(login.jsp)
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!-- 导入struts2的主要标签库,在struts2中去掉了很多不必要的标签,也将标签全部整合在了一起,更方便开发-->
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'login.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<s:form action="login">
<!--注意:login不是与action直接对应,而是通过struts.xml映射文件中的
name=“login”对应-->
<s:textfield name="username" label="用户名"></s:textfield>
<s:password name="password" label="密码"></s:password>
<s:submit label="提交"></s:submit>
<!--在struts2中,表单提交后自动被传给action,其中的set方法会将值暂时保存在内存中,以供使用-->
</s:form>
/*
利用标签创建提交表单,相信大家看得懂。
*/
</body>
</html>
/*
*/
(result.jsp)
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'result.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
${requestScope.username}
<br>
${requestScope.password }
</body>
<!--jsp中的条件表达式,获取forward传递的值,在struts2中,如没进行具体设置,默认情况是服务器端跳转,也就是所说的forword,而并不是请求跳转Redirect-->
</html>
第二步(action)
package com.newstar.struts2.action;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport {
/**
*
*/
private static final long serialVersionUID = 9038781564022152594L;
private String username;
private String password;
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("hello".equals(username.trim())&&"world".equals(password.trim())){
return "success";
}else{
this.addFieldError("username","username or password is not right!");
return "failer";
}
/*
execute()只做调控作用,业务逻辑不应该在这里完成,这里因为比较简单,我才写在了这里。业务逻辑交给业务层,我以MVC模式举例。
*/
}
@Override
public void validate() {
if(username==null||"".equals(getUsername().trim())){
this.addFieldError("username", "username is null");
}
if(password==null||"".equals(getPassword().trim())){
this.addFieldError("password", "password is null");
}
}
/*
这个方法是做表单验证的,是struts2中很重要的一部分,后面我会作具体介绍。相信这点代码还是难不倒大家的。
*/
}
第三步(web.xml)
<?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">
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--这是struts2的精华部分,大家看好了,大家记得struts1中是怎样配置的吧,这个是不是简单的多了呢。这个就是对所有用户输入数据的过滤器映射,也就是说只要用户有提交数据(不管是空值还是其他确切的值)都会首先经过struts2中的过滤器过滤,然后才传下去。就这么简单,大家感觉到乐趣了吧。。呵呵。。come on everyone!-->
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
</welcome-file-list>
</web-app>
最后一步(struts.xml)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="struts" extends="struts-default">
<action name="login" class="com.newstar.struts2.action.LoginAction">
<result name="input">/login.jsp</result>
<result name="success">/result.jsp</result>
<result name="failer">/login.jsp</result>
</action>
</package>
<!--这里就有点难度了,不过不用怕,后期我会向大家讲解。现在只需简单的了解就足够了package是继承于的web work,其实它的够着方式也是蛮有趣的。action内面的配置其实很简单,相信大家根据英文都能看懂了,就不说了-->
</struts>
好了,今天的就到这了,GOOD BYE!
评论
我这样配置怎么报错了?<%@ taglib prefix="s" uri="/struts-tags"%> 这个提示找不到标签什么的...
注意两点:
1.标签地址。
2。标签库。
但是在地趾栏打链接http://localhost:8080/login.action
或者表单都可以找到为什么呢,我用的是struts2 spring 2.5 hibernate3.2
希望后期相继的发些Struts2+Spring+Hibernate的案例.
我正在学习SSH综合开发
<p style='text-align: left;'><span style=''><strong>大家如果喜欢学习struts2可以随时来看看,欢迎大家的到来!</strong></span></p>
<p style='text-align: left;'><strong><span style=''><span style='color: #000000;'>由于我的时间有限,很多地方都不能详细的讲解</span><span style='color: #000000;'>,因此需要大家的理解和支持,其实学这个,我也只能做一下指导,如果大家有不懂的可以留言询问。大家互相学习学习!</span></span></strong></p>
<p style='text-align: left;'><strong><span style=''>我会在每一天出一篇struts2讲解。如果有事耽搁了,请大家原谅!</span></strong></p>
<p style='text-align: left;'><span style=''>*/</span></p>
<p style='text-align: left;'><span style=''>/*</span></p>
<p><span style=''>
</span></p><p style='text-align: left;'><strong><span style=''>大家注意代码中标有红记的地方,是学习的重点。</span></strong></p>
<p/>
<p style='text-align: left;'><span style=''>*/</span></p>
<p style='text-align: center;'><span style=''>第一步(view编写):(login.jsp)</span></p>
<p style='text-align: left;'><span style=''><%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><br/><span style='color: #ff0000;'><strong><%@ taglib prefix="s" uri="/struts-tags"%></strong></span></span></p>
<p style='text-align: left;'><span style=''><strong><span style='color: #ff0000;'><!-- 导入struts2的主要标签库,在struts2中去掉了很多不必要的标签,也将标签全部整合在了一起,更方便开发--></span></strong><br/><%<br/> String path = request.getContextPath();<br/> String basePath = request.getScheme() + "://"<br/> + request.getServerName() + ":" + request.getServerPort()<br/> + path + "/";<br/>%></span></p>
<p style='text-align: left;'><span style=''><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><br/><html><br/> <head><br/> <base href="<%=basePath%>"></span></p>
<p style='text-align: left;'><span style=''> <title>My JSP 'login.jsp' starting page</title></span></p>
<p style='text-align: left;'><span style=''> <meta http-equiv="pragma" content="no-cache"><br/> <meta http-equiv="cache-control" content="no-cache"><br/> <meta http-equiv="expires" content="0"><br/> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><br/> <meta http-equiv="description" content="This is my page"><br/> <!--<br/> <link rel="stylesheet" type="text/css" href="styles.css"><br/> --></span></p>
<p style='text-align: left;'><span style=''> </head></span></p>
<p style='text-align: left;'><span style=''> <body><br/> <span style='color: #ff0000;'><strong><s:form action="login"></strong></span></span></p>
<p style='text-align: left;'><span style=''><span style='color: #ff0000;'><strong><!--注意:login不是与action直接对应,而是通过struts.xml映射文件中的 </strong></span></span></p>
<p style='text-align: left;'><span style=''><span style='color: #ff0000;'><strong>name=“login”对应--><br/> <s:textfield name="username" label="用户名"></s:textfield><br/> <s:password name="password" label="密码"></s:password><br/> <s:submit label="提交"></s:submit></strong></span></span></p>
<p style='text-align: left;'><span style=''><span style='color: #ff0000;'><strong><!--在struts2中,表单提交后自动被传给action,其中的set方法会将值暂时保存在内存中,以供使用--><br/> </s:form></strong></span></span></p>
<p style='text-align: left;'><strong><span style=''>/*</span></strong></p>
<p style='text-align: left;'><strong><span style=''>利用标签创建提交表单,相信大家看得懂。</span></strong></p>
<p style='text-align: left;'><strong><span style=''>*/</span></strong></p>
<p style='text-align: left;'><span style=''> </body><br/></html></span></p>
<p style='text-align: left;'><span style=''>/*</span></p>
<p style='text-align: left;'> </p>
<p style='text-align: left;'><span style=''>*/</span></p>
<p style='text-align: center;'><span style=''>(result.jsp)</span></p>
<p style='text-align: left;'><span style=''> <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><br/><%<br/> String path = request.getContextPath();<br/> String basePath = request.getScheme() + "://"<br/> + request.getServerName() + ":" + request.getServerPort()<br/> + path + "/";<br/>%></span></p>
<p style='text-align: left;'><span style=''><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><br/><html><br/> <head><br/> <base href="<%=basePath%>"></span></p>
<p style='text-align: left;'><span style=''> <title>My JSP 'result.jsp' starting page</title></span></p>
<p style='text-align: left;'><span style=''> <meta http-equiv="pragma" content="no-cache"><br/> <meta http-equiv="cache-control" content="no-cache"><br/> <meta http-equiv="expires" content="0"><br/> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><br/> <meta http-equiv="description" content="This is my page"><br/> <!--<br/> <link rel="stylesheet" type="text/css" href="styles.css"><br/> --></span></p>
<p style='text-align: left;'><span style=''> </head></span></p>
<p style='text-align: left;'><span style=''><span style='color: #ff0000;'><strong> <body><br/> ${requestScope.username}<br/> <br><br/> ${requestScope.password }<br/> </body></strong></span></span></p>
<p style='text-align: left;'><span style=''><strong><span style='color: #ff0000;'><!--jsp中的条件表达式,获取forward传递的值,在struts2中,如没进行具体设置,默认情况是服务器端跳转,也就是所说的forword,而并不是请求跳转Redirect--></span></strong><br/></html></span></p>
<p style='text-align: center;'><span style=''>第二步(action)</span></p>
<p style='text-align: left;'><span style=''> package com.newstar.struts2.action;</span></p>
<p style='text-align: left;'><span style=''>import com.opensymphony.xwork2.ActionSupport;</span></p>
<p style='text-align: left;'><span style=''>public class LoginAction extends ActionSupport {</span></p>
<p style='text-align: left;'><span style=''> /**<br/> * <br/> */<br/> private static final long serialVersionUID = 9038781564022152594L;<br/> private String username;<br/> private String password;<br/> public String getUsername() {<br/> return username;<br/> }<br/> public void setUsername(String username) {<br/> this.username = username;<br/> }<br/> public String getPassword() {<br/> return password;<br/> }<br/> <br/> public void setPassword(String password) {<br/> this.password = password;<br/> }<br/> <span style='color: #ff0000;'><strong>public String execute(){<br/> if("hello".equals(username.trim())&&"world".equals(password.trim())){<br/> return "success"; <br/> }else{<br/> this.addFieldError("username","username or password is not right!");<br/> return "failer";<br/> }<br/><span style='color: #008000;'>/*</span></strong></span></span></p>
<p style='text-align: left;'><strong><span style=''>execute()只做调控作用,业务逻辑不应该在这里完成,这里因为比较简单,我才写在了这里。业务逻辑交给业务层,我以MVC模式举例。</span></strong></p>
<p style='text-align: left;'><span style=''><span style='color: #ff0000;'><strong><span style='color: #008000;'>*/<br/></span> }<br/> </strong><strong><span style='color: #ff0000;'>@Override<br/> public void validate() {<br/> if(username==null||"".equals(getUsername().trim())){<br/> this.addFieldError("username", "username is null");<br/> }<br/> if(password==null||"".equals(getPassword().trim())){<br/> this.addFieldError("password", "password is null");<br/> }<br/> }</span></strong></span></span></p>
<p style='text-align: left;'><span style=''><strong>/*</strong></span></p>
<p style='text-align: left;'><strong><span style=''>这个方法是做表单验证的,是struts2中很重要的一部分,后面我会作具体介绍。相信这点代码还是难不倒大家的。</span></strong></p>
<p style='text-align: left;'><span style=''><span style='color: #ff0000;'><strong><span style='color: #008000;'>*/<br/></span></strong><span style='color: #333333;'>}</span></span></span></p>
<p style='text-align: center;'><span style=''><span style='color: #ff0000;'><span style='color: #000000;'>第三步(web.xml)</span></span></span></p>
<p style='text-align: left;'><span style=''><span style='color: #ff0000;'><br/><span style='color: #000000;'><?xml version="1.0" encoding="UTF-8"?><br/><web-app version="2.5" xmlns="</span><a href='http://java.sun.com/xml/ns/javaee'><span style='color: #000000;'>http://java.sun.com/xml/ns/javaee</span></a><span style='color: #000000;'>"<br/> xmlns:xsi="</span><a href='http://www.w3.org/2001/XMLSchema-instance'><span style='color: #000000;'>http://www.w3.org/2001/XMLSchema-instance</span></a><span style='color: #000000;'>"<br/> xsi:schemaLocation="</span><a href='http://java.sun.com/xml/ns/javaee'><span style='color: #000000;'>http://java.sun.com/xml/ns/javaee</span></a><span style='color: #000000;'> <br/> </span><a href='http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd'><span style='color: #000000;'>http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd</span></a></span><span style='color: #000000;'>"></span></span></p>
<p style='text-align: left;'><span style=''><span style='color: #ff0000;'><span style='color: #000000;'><span style='color: #ff0000;'><strong> <filter><br/> <filter-name>struts2</filter-name><br/> <filter-class><br/> org.apache.struts2.dispatcher.FilterDispatcher<br/> </filter-class><br/> </filter><br/> <filter-mapping><br/> <filter-name>struts2</filter-name><br/> <url-pattern>/*</url-pattern><br/> </filter-mapping></strong></span></span></span></span></p>
<p style='text-align: left;'><span style=''><span style='color: #ff0000;'><span style='color: #000000;'><strong><span style='color: #008000;'><!--这是struts2的精华部分,大家看好了,大家记得struts1中是怎样配置的吧,这个是不是简单的多了呢。这个就是对所有用户输入数据的过滤器映射,也就是说只要用户有提交数据(不管是空值还是其他确切的值)都会首先经过struts2中的过滤器过滤,然后才传下去。就这么简单,大家感觉到乐趣了吧。。呵呵。。come on everyone!--><br/></span></strong> <welcome-file-list><br/> <welcome-file>login.jsp</welcome-file><br/> </welcome-file-list><br/></web-app></span></span></span></p>
<p style='text-align: center;'><span style=''><span style='color: #ff0000;'><span style='color: #000000;'>最后一步(struts.xml)</span></span></span></p>
<p style='text-align: left;'><span style=''><?xml version="1.0" encoding="UTF-8" ?></span></p>
<p style='text-align: left;'><span style=''><span style='color: #ff0000;'><span style='color: #000000;'><!DOCTYPE struts PUBLIC<br/> "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"<br/> "</span><a href='http://struts.apache.org/dtds/struts-2.0.dtd'><span style='color: #000000;'>http://struts.apache.org/dtds/struts-2.0.dtd</span></a><span style='color: #000000;'>"><br/><struts><br/> <span style='color: #ff0000;'><strong> <package name="struts" extends="struts-default"><br/> <action name="login" class="com.newstar.struts2.action.LoginAction"><br/> <result name="input">/login.jsp</result><br/> <result name="success">/result.jsp</result><br/> <result name="failer">/login.jsp</result><br/> </action><br/> </package></strong></span></span></span></span></p>
<p style='text-align: left;'><span style=''><span style='color: #ff0000;'><span style='color: #000000;'><span style='color: #008000;'><strong><!--这里就有点难度了,不过不用怕,后期我会向大家讲解。现在只需简单的了解就足够了package是继承于的web work,其实它的够着方式也是蛮有趣的。action内面的配置其实很简单,相信大家根据英文都能看懂了,就不说了--></strong></span><br/></struts></span></span></span></p>
<p style='text-align: left;'><span style=''/></p>
<p style='text-align: left;'><span style=''><span style='color: #ff0000;'><span style='color: #000000;'><!--大家互相交流,纯属学习,无商业意义,如欲转载,请联系本人</span></span></span></p>
<p style='text-align: left;'><span style=''><span style='color: #ff0000;'><span style='color: #000000;'>QQ:471723842 --></span></span></span></p>
<p style='text-align: left;'><span style=''><span style='color: #ff0000;'><span style='color: #000000;'>好了,今天的就到这了,GOOD BYE!</span></span></span></p></div><br/>写的很好
相关推荐
### Struts2 第一篇:流程篇 #### 一、Struts2是什么? ##### 1、Struts2在三层架构开发中的位置 Struts2作为一款轻量级的Java Web开发框架,主要应用于三层架构(即表示层、业务逻辑层、数据访问层)中的表示层...
- **MVC模式**:Struts2基于Model-View-Controller(MVC)架构模式,将业务逻辑、数据和用户界面分离,提高代码的可维护性和可重用性。 - **Action和Result**:Action是处理用户请求的业务逻辑组件,Result则是...
2. Struts2框架的特点:Struts2框架主要的特点是它采用了MVC(Model-View-Controller)的设计模式,这种模式可以将应用程序的输入、处理和输出分离开来,提高了程序的可维护性和可扩展性。Struts2还具有强大的标签库...
1. **FilterDispatcher初始化**:Struts2的核心组件`FilterDispatcher`在Web应用启动时被加载。它是一个Servlet Filter,用于拦截所有到达应用的请求,并将其导向Struts2的处理流程。 2. **ActionMapping匹配**:`...
信息安全、网络安全在“互联网+”始终是一个非常重要的问题。没有网络安全就没有国家安全。近日,安恒信息安全研究院WEBIN... 修复方式:更新至Struts 2.3.32 或者 Struts 2.5.10.1 或 使用第三方的防护设备进行防护。
Struts2漏洞检查工具2019版 警告: 本工具为漏洞自查工具,请勿非法攻击他人网站! ==漏洞编号==============影响版本=========================官方公告==========================================影响范围====...
struts2环境搭建+struts2 ...struts2 新闻发布系统:struts2+jsp 功能不全面,但足够简单的新闻发布。 struts2 留言板:struts2+jquery 直接导入myecplise中即可使用,很好用,可以在此基础上添加并完善项目将更完美。
包含struts2-core-2.5.10.1.jar,struts2-jfreechart-plugin-2.5.10.1.jar,struts2-json-plugin-2.5.10.1.jar,struts2-junit-plugin-2.5.10.1.jar,struts2-bean-validation-plugin-2.5.10.1.jar,struts2-cdi-...
Struts2 的配置文件主要有两个:struts.xml 和 web.xml。struts.xml 文件用于配置 Struts2 的核心配置,包括 Action 的映射、结果类型、拦截器等。web.xml 文件用于配置 Web 应用程序的容器相关信息,包括 Servlet ...
它分为两个版本:Struts1 和 Struts2。虽然两者都基于模型-视图-控制器(MVC)设计模式,但它们之间存在诸多差异。了解这些差异对于选择合适的技术栈、优化开发流程至关重要。 #### Action处理机制 - **Struts1**:...
#### 三、为什么选择Struts2 - **Struts2的优势**: - Struts2具有高度的灵活性和可扩展性。 - 它支持多种数据库访问技术和框架,如Hibernate、Spring等。 - Struts2提供了强大的插件体系,开发者可以根据项目...
3. struts.configuration.files:这是Struts2自动加载的一个配置文件列表,Struts2会自动加载这些文件中的设置和参数。 4. struts.configuration.xml.reload:这是一个布尔值,用于确定是否加载XML配置文件。如果...
《Struts2技术内幕:深入解析Struts2架构设计与实现原理》以Struts2的源代码为依托,通过对Struts2的源代码的全面剖析深入探讨了Struts2的架构设计、实现原理、设计理念与设计哲学,对从宏观上和微观上去了解Struts2...
Struts2是一个强大的Java web应用程序框架,源自Struts1.x和WebWork的融合。它并非Struts1.x的简单延续,而是基于WebWork的核心构建,因此具有更稳定、高效的性能。Struts2的设计思路和工作流程与Struts1.x有很大的...
Struts2是一个强大的Java web框架,它提供了丰富的功能来构建MVC(模型-视图-控制器)架构的应用程序。在Struts2中,Tag库是其核心组件之一,极大地简化了视图层的开发,使得开发者可以更方便地创建动态网页。本篇将...
本篇文章将带你踏上Struts 2的自学之旅,首先从准备工作开始,然后通过一个简单的“Hello, World”程序来熟悉基本操作。 准备工作: 1. **环境配置**:首先确保你的计算机上已经安装了Java Development Kit (JDK)...
Struts2_01FirstDemo : 跑通第一个Struts2的实例 Struts2_02CURD : 关于Struts2的增、删、改和查 实际业务中数据来自数据库,从DAO层查询,本实例使用静态资源的方式模拟, 主要是关于CURD的操作方式。 Struts2_03...
- **Struts1**:由于Action与Servlet API紧密耦合,测试较为困难,需要使用如Struts TestCase的第三方工具。 - **Struts2**:Action可以通过依赖注入进行测试,使得测试更加容易和独立。 5. **输入捕获**: - **...
Struts1和Struts2是两个非常著名的Java Web框架,它们都由Apache软件基金会开发,用于构建MVC(Model-View-Controller)架构的应用程序。虽然它们在目标上相似,但在设计模式、功能特性和使用体验上存在显著差异。...
- 配置Struts2:在`struts.xml`配置文件中定义Action类、结果页面和拦截器。 - 创建Action类:这是处理用户请求的核心,实现业务逻辑。 - 编写JSP页面:使用Struts2的标签库来展示数据和处理用户输入。 3. **...