写在前面的日记
离大三开学有一段时间了,在学校的日子也快结束了。学校在大三开设的课程为JAVA框架,对于我这种已经打算从事PHP行业的小菜鸟来说本来不打算学的。今天在机房上课的时候突然想到一位前辈说的话,大概的意思就是程序员应该学习更多的语言来扩展自己的思维和眼界。仅仅局限于某种语言是不可取的。因此决定在学习PHP之余重拾Java,好好学习Java思想。争取明年能熟练运用java进行项目开发。
Java框架Struts2之初体验(一)
Struts2是一种基于MVC的Java框架,老师说挺多人用的,至于现在还有没有人用我也不清楚,也没去了解过。由于是基于我所熟悉的MVC模式,了解了一下流程就很快能上手了。以下为一个简单的登陆例子,只为记录自己所学。
Model 模型
新建一个LoginService类,不需要继承或实现任何父类或接口
模拟一下登陆流程,不操作数据库。
package cc.ccyou;
public class LoginService {
public boolean login(String username, String password){
if(username.equals("admin") && password.equals("123456")){
return true;
}
return false;
}
}
一个非常简单的模型,为了走流程而诞生 [笑哭]
Controller 控制器
定义Action类,调用业务逻辑,返回结果视图,不需要继承或实现任何父类或接口,只需要遵守某些命名规范即可:如果该Action类是通过表单提交调用,且Action类需要使用表单提交的请求参数,那么必须在Action类中声明与表单域的名字对应的变量,并为变量提供getters/setters方法; Action类中必须有一个public String execute(){}形式的方法,该方法将在访问Action时被Struts2框架自动调用,实现控制逻辑。
package cc.ccyou;
public class LoginAction {
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(){
LoginService ls = new LoginService();
if(ls.login(username, password)){
return "success";
}
return "fail";
}
}
由Action类中execute方法返回的字符串需要到struts.xml中配置
struts.xml的配置
配置很简单,正确书写package内的action标签即可。其中result的name分别为execute方法所返回的字符串,值则对应的跳转页面。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<package name="cc.ccyou" extends="struts-default">
<action name="Login" class="cc.ccyou.LoginAction">
<result name="success">/welcome.jsp</result>
<result name="fail">/index.jsp</result>
</action>
</package>
</struts>
View 视图
最后,引入Struts2的标签库进行视图的渲染即可。s为前缀,或者说别名,可以自定义。
index.jsp
<body>
<%@taglib uri="/struts-tags" prefix="s" %>
<s:form action="Login">
<s:textfield name="username" label="input username"></s:textfield>
<s:password name="password" label="input password"></s:password>
<s:submit value="Login"></s:submit>
</s:form>
</body>
welcome.jsp
<body>
Hello,${username}
</body>
web.xml 中配置FilterDispatcher
FilterDispatcher是Struts2框架API中提供的类,任何一个客户端的请求都必须经过FilterDispatcher进行过滤才能进入框架流程。在myeclipse中引入Struts2框架会自动生成该配置,如果url-pattern的值为*.action则需要修改为 /* 让它过滤所有页面。