通过用户登录的一个场景,介绍java struts的基本开发流程和工作过程。
1 创建一个j2ee的web project。
把struts包中的所有内容,拷贝到WEB-INF的lib文件夹中,使当前项目支持struts。
2 编辑一个带有form的jsp,如下:
<form action="/strutslogin/login.do" method="post">
u:<input type="text" name="username"/><br/>
p:<input type="text" name="password"/><br/>
<input type="submit" value="login"/>"
</form>
其中action的do,是在web.xml中配置,后面会介绍。
3 分别创建formAction文件和Action文件,可分别放置在不同的package中。
例如formAction起名为usrForm:
里面存放的是form jsp中,传递数据的控件的set 和get方法。需要继承ActionForm方法
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;
}
Action文件,创建后要继承Action方法,并且要重写execute
public class LoginAction extends Action {
//需要重写一个方法:execute会被自动调用,类似于servlet的service,doGet,doPost
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
//吧form转换成userForm类对象
usrForm usrform = (usrForm)form;
System.out.println("用户名:"+usrform.getUsername());
if(usrform.getUsername().equals("123")){
System.out.println("用户合法");
return mapping.findForward("ok");
}
else{
return mapping.findForward("err");
}
}
}
将formAction实例化并 强转。根据xml的配置,返回的不同值。
4 根据需要,编写不同的跳转页,如welcome.jsp和error.jsp.
5 编写struts-config.xml文件
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Sorfware Foundation//DTD Struts Configuration 1.3//EN" "http://struts.apache.org/dtds/struts-config_1_3.dtd">
<struts-config>
<!-- 配置表单 -->
<form-beans>
<!-- name是表单的名字,是表单类的小写.type是表单类的全路径。 -->
<form-bean name="usrForm" type="com.sl.forms.usrForm"></form-bean>
</form-beans>
<!-- 配置action -->
<action-mappings>
<!-- 配置具体action path是表示将来访问该action的资源名称。name是对应的表单名称。 -->
<action path="/login" name="usrForm" type="com.sl.actions.LoginAction">
<!-- 配置跳转关系,name表示结果名称,path是转发到哪个页面。 -->
<forward name="ok" path="/WEB-INF/welcome.jsp"/>
<forward name="err" path="/WEB-INF/error.jsp"></forward>
</action>
</action-mappings>
</struts-config>
6 编写filter,处理中文字符。
filter是一个servlet,并且要实现接口Filter(javax.servlet),
public class myFilter1 extends HttpServlet implements Filter {
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
// TODO Auto-generated method stub
arg0.setCharacterEncoding("gbk");
arg1.setContentType("text/html;charset=gbk");
arg2.doFilter(arg0, arg1);
}
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
注意每一个节点的内容:
这里的表单,是指formAction文件,配置的action则是带有form控件的jsp页。还要注意type的写法等。
7 配置web.xml
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<!--配置struts-config -->
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<span style="white-space:pre"> </span><filter>
<span style="white-space:pre"> </span><filter-name>myFilter1</filter-name>
<span style="white-space:pre"> </span><filter-class>com.sl.filters.myFilter1</filter-class>
<span style="white-space:pre"> </span></filter>
<span style="white-space:pre"> </span><filter-mapping>
<span style="white-space:pre"> </span><filter-name>myFilter1</filter-name>
<span style="white-space:pre"> </span><url-pattern>/*</url-pattern>
<span style="white-space:pre"> </span></filter-mapping>
7 添加filter处理中文字符
基本流程完成,可根据输入内容,在action文件进行跳转或其他操作。
---------------补充:
在struts-config.xml中获取变量,<action >这个标签中的scope,有session和request两个值,表示该action的表单对象的存储范围,scope=request相当于 request= request.setAttribute("键名",value);
默认存储到session中。若scope = "request",则使用时:
((usrForm)request.getAttribute("usrForm")).getUsername()
先强转成usrForm(表单名),然后通过get得到对象值。