struts 2使用步骤(struts2怎么使用)

本文目录
struts2怎么使用
一、下载Jar包
从Apache网站下载Struts2的Jar包。
回到顶部
二、部署Struts.xml和Web.xml
打开压缩包中的Blank实例,copy其中的Struts.xml到项目的src目录下,copy其中的Web.xml中的filter部分到项目中的web.cml中。
回到顶部
三、复制Jar包
copy blank实例中lib目录中的所有Jar包到项目中的lib目录下。
回到顶部
四、写Action类
一般来说Action就是MVC中的Controller,Action一般要继承ActionSupport类
在里面写各种处理的方法即可。
回到顶部
五、配置Struts.xml
用Struts2实现在网站登录 写出过程步骤及核心代码
登录有两种实现:表单提交和Ajax,给你介绍下表单提交。
步骤一:页面一个文本框一个密码框分别填写帐号和密码,再一个提交按钮用于表单提交:
《% String root = request.getContextPath(); %》
《form action="《%=root%》/doLogin.action" method="post"》
《input name="loginCode"/》
《input name="password" type="password"/》
《input type="submit"/》
《/form》
步骤二:编写后台登录Action
public class LoginAction extends ActionSupport{
private String loginCode;
private String password;
public String getLoginCode() {
return loginCode;
}
public void setLoginCode(String loginCode) {
this.loginCode = loginCode;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
//登录核心方法
public void doLogin(){
//根据用户添入的帐号和密码调用帐号密码验证方法(这个验证方法自己实现)
boolean result = checkLogin(loginCode,password);
if(result){
return SUCCESS;
}else{
return ERROR;
}
}
}
步骤三:编写struts.xml配置文件
《action name="doLogin" class="步骤二的类package+LoginAction " method="步骤二的类中登录方法名doLogin"》
《result name="success"》登录成功跳转的页面《/result》
《result name="error"》登录验证失败后跳转的页面《/result》
《/action》
struts2国际化在js里面怎么使用
一、struts2国际化比较简单,过程如下:
1. 建立资源文件
中文资源:language_zh_CN.properties (language-自定义名称,zh-中文,CN-中国)
英文资源:language_en_US.properties (language保持一致,en-英文,US-美国)
其内容就是键值对,俩资源文件的键名对应保持一致,值分别对应中文与英文
其中中文在MyEclipse环境下,用Properties进行,直接输入中文
如:password 密码
那么从Source看时,就可看到中文是用Unicode表示的
如:password=\u5BC6\u7801
2. 配置
struts.xml文件中,配置i18n的源,值取资源文件的自定义名称部分(如果资源文件不是在src下,记得加上包路径):
《constant name="struts.custom.i18n.resources" value="language"》《/constant》
web.xml文件中,配置Struts2:
《filter》
《filter-name》struts2《/filter-name》
《filter-class》org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter《/filter-class》
《/filter》
《filter-mapping》
《filter-name》struts2《/filter-name》
《url-pattern》/*《/url-pattern》
《/filter-mapping》
3. jsp中使用资源
加入标签引用:《%@ taglib prefix="s" uri="/struts-tags" %》
s:text标签用健名取资源值:《s:text name="password"/》
或者表单元素用:key="password"
4. 在action中使用资源
用ActionSupport类中的方法取资源值:getText("password");
二、js中要获取以上的资源值,就比较麻烦了
单独建立一套资源的话,就需要维护两套资源,重复且维护麻烦
1. js中使用量较少时,可在jsp页面中定义变量先取出资源值
用js代码如:var curPassword=’《s:text name="password"/》’;
或:var curLang = {
password : ’《s:text name="password"/》’,
user : ’《s:text name="user"/》’
}
那单独的js文件中就可直接使用了
2. 另外想到的是从Java资源中全部取出,在js中再建立一个语言的对象
struts国际化,是建立在java国际化之上,做了一次封装
java国际化,用到的有两个类:Locale、ResourceBundle
Locale是语言类,选定当前的语言与地域,如:Locale locale = new Locale("zh","CN");
ResourceBundle是资源类,加载的是资源
如:ResourceBundle bundle = new ResourceBundle.getBundle("language",locale);
有个方法可取键值:bundle.getString("password");
找到一个方法可取全部键名:Set《String》 keys=bundle.keySet();
好,再看Struts2中如何取ResourceBundle对象:
ActionSupport类中方法:ResourceBundle bundle=getTexts("langauge");
Action中添加方法:
protected String getCurLang(String resourceName){
ResourceBundle bundle=getTexts(resourceName);
if(null != bundle){
Set《String》 keys=bundle.keySet();
Iterator《String》 it = keys.iterator();
StringBuffer curLang = new StringBuffer();
curLang.append("{");
int id=0;
String key;
while(it.hasNext()){
key=it.next();
if(id》0){
curLang.append(",");
}
curLang.append(key);
curLang.append(":\’");
curLang.append(getText(key));
curLang.append("\’");
id++;
}
curLang.append("}");
return curLang.toString();
}
return "";
}
然后放入session中:session.setAttribute("curLang",getCurLang("langauge"));
或前台调用Ajex通讯取得
最后,前台把它转为对象,如:
var strvar curLang="《%=session.getAttribute("curLang")%》";
那么js文件中就可直接使用了:curLang;
struts2的处理流程
1、客户端向Servlet容器(如Tomcat)提交一个请求
2、请求经过一系列过滤器(如ActionContextCleanUp (已被JVM和WEB容器废弃的空对象) 过滤器等)
3、核心控制器被调用,询问ActionMapper来决定请求是否需要调用某个Action
4、如果ActionMapper决定需要调用某个Action,核心控制器把控制权委派给ActionProxy (备注:JSP请求无需调用Action)
5、ActionProxy通过Configuration Manager询问框架的配置文件(struts.xml),找到需调用的Action类
6、ActionProxy创建一个ActionInvocation的实例,(ActionInvocation的作用是如何执行Action,拦截器的功能就是在ActionInvocation中实现的)
7、ActionInvocation负责调用Action,在此之前会依次调用所有配置的拦截器
8、Action执行完毕,ActionInvocation负责根据结果码字符串在struts.xml的配置中找到对应的返回结果
9、拦截器被再次执行
10、过滤器被再次执行
谁知道struts2做增删改查的详细步骤
那要看你使用了那些框架咯,一般来说分为三层
第一层是表层:就是action那部分,响应jsp操作
第二层是service层:就是进行逻辑操作的。
第三层是持久层(DAO):就是进行数据库操作的
比如,增加一个留言(Message)的操作。在action层中将这个Message封装好,重写excute()方法。
调用Service层的方法,进行一些逻辑性的操作,最后到持久层DAO将这个Message对象加入数据库。
我有一个SSH的代码可以看下。 (只贴出了代码,还有一些配置文件省略了)
action:
public class AddMessage extends ActionSupport {
private String content;
private String username;
private String visior;
private MessageService messageService;
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
。。。。。//还有其他的set() get()方法省略
@Override
public String execute() throws Exception {
Map session = ActionContext.getContext().getSession();
HttpServletRequest request = ServletActionContext.getRequest();
String username = (String) session.get("username");
String visitor = (String)session.get("visitor");
if (null == username || "".equals(username)) {
return ERROR;
} else {
// 封装Message
Message message = new Message();
message.setUsername(username);
message.setContent(content);
if(visitor == null){
message.setVisitor("游客");
}else{
message.setVisitor(visitor);
}
message.setDate(new Date());
messageService.addMessage(message); //这里调用Service层的方法
return this.SUCCESS;
}
}
}
service层:
接口:
public interface MessageService {
//添加留言
public void addMessage(Message message);
//删除留言
public void deleteMessage(int id);
//分页查询留言
public Result showUserMessageByPage(String username,Page page);
}
实现类:
public class MessageServiceImpl implements MessageService {
private MessageDAO messageDAO;
public MessageDAO getMessageDAO() {
return messageDAO;
}
public void setMessageDAO(MessageDAO messageDAO) {
this.messageDAO = messageDAO;
}
//刚刚调用的service方法
public void addMessage(Message message) {
messageDAO.add(message);//这里调用了DAO层的方法,将数据保存到数据库
}
public void deleteMessage(int id) {
messageDAO.deleteMessage(id);
}
public Result showUserMessageByPage(String username, Page page) {
page = PageUtil.createPage(page,messageDAO.queryUserAllCount(username));
List《Message》 all = messageDAO.queryByPage(username, page);
Result result = new Result();
result.setPage(page);
result.setList(all);
return result;
}
}
DAO层:
(接口)
public interface MessageDAO {
//添加留言
public void add(Message message);
//删除留言
public boolean deleteMessage(int id);
//查询某个用会员的全部留言
public List《Message》 queryByPage(String username,Page page);
//按照ID俩查询留言
public Message queryById(int id);
//查询数据库中某用户所有留言数目
public int queryUserAllCount(String username);
//获取所访问的用户ID
public int UserID();
}
(实现类)
public class MessageDAOImpl extends HibernateDaoSupport implements MessageDAO {
//这里是刚刚调用的add方法
public void add(Message message) {
this.getHibernateTemplate().save(message);//这里就把message存入数据库中了
}
public boolean deleteMessage(int id) {
this.getHibernateTemplate().delete(this.queryById(id));
return false;
}
public Message queryById(int id) {
List《Message》 find = this.getHibernateTemplate().find("select meg from Message meg where meg.id = ?", id);
return (Message) find.get(0);
}
public List《Message》 queryByPage(final String username,final Page page) {
return this.getHibernateTemplate().executeFind(new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query query = session.createQuery("select meg from Message meg where meg.username = ? order by meg.date desc");
//设置查询的用户
query.setParameter(0, username);
//设置查询的最大数
query.setMaxResults(page.getEveryPage());
//设置从哪里开始查询
query.setFirstResult(page.getBeginIndex());
return query.list();
}
});
}
public int queryUserAllCount(String username) {
List find = this.getHibernateTemplate().find("select count(*) from Message meg where meg.username = ?",username);
return ((Long)find.get(0)).intValue();
}
public int UserID() {
// TODO Auto-generated method stub
return 0;
}
}
其他的操作类似

更多文章:
跷二郎腿太低好吗?想要通过贴墙站改正二郎腿影响的话,有哪些要点需要注意
2026年10月11日 05:10
易语言点击js按钮(易语言网页填表怎样点击链接为“javascript:void(0)“的按钮)
2026年10月11日 03:00
compare with造句(用compared with和compared to造句)
2026年10月10日 23:30
tensorflow与keras对应版本(为什么tensorflow2.8没有keras)
2026年10月10日 22:10
maven仓库jar网站(如何在maven仓库中添加jar包)
2026年10月10日 19:50






