Struts学习总结:
1.struts:是一个框架(frameset),是基于mvc的web框架。
2struts的运行原理:
3.struts的开发步骤:
①:开发sttuts所需要的包。Struts 1.3.10
antlr-2.7.2.jar
bsf-2.3.0.jar
commons-beanutils-1.8.0.jar
commons-chain-1.2.jar
commons-digester-1.8.jar
commons-fileupload-1.1.1.jar
commons-io-1.1.jar
commons-logging-1.0.4.jar
commons-validator-1.3.1.jar
jstl-1.0.2.jar
oro-2.0.8.jar
standard-1.0.6.jar
struts-core-1.3.10.jar
struts-el-1.3.10.jar
struts-extras-1.3.10.jar
struts-faces-1.3.10.jar
struts-mailreader-dao-1.3.10.jar
struts-scripting-1.3.10.jar
struts-taglib-1.3.10.jar
struts-tiles-1.3.10.jar
②:先写出login.jsp。
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<form action="/strutsLogin/login.do" method="post">
用户名:<input type="text" name="username" />
<br />
密码:<input type="password" name="userpass">
<br>
<input type="submit" value="登录" />
</form>
</body>
</html>
③:编写ActionForm和Action。
package com.forms;
import org.apache.struts.action.ActionForm;
//这是一个用户表单,用来填充数据的
public class UserForm extends ActionForm {
//在这里定义属性的时候有一个规范,就是属性的名称一般和jsp页面的表单控件的名称一致。
//当然名称可以不一致,但是setXxx,getXxx,Xxx表示jsp控件名,必须一致。
private String username;
private String userpass;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getUserpass() {
return userpass;
}
public void setUserpass(String userpass) {
this.userpass = userpass;
}
}
package com.actions;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import com.forms.UserForm;
//这是一个action
public class LoginAction extends Action {
//重写execute方法:execute会被自动调用
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
//把form转化成对应的UserForm对象
UserForm userForm=(UserForm) form;
System.out.println("用户名:"+userForm.getUsername());
System.out.println("密码:"+userForm.getUserpass());
//对数据进行简单校验
if("123".equals(userForm.getUserpass())){
return mapping.findForward("ok");
}else{
return mapping.findForward("error");
}
}
}
④:配置struts-config.xml。
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software 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="UserForm" type="com.forms.UserForm"/>
</form-beans>
<!-- 配置action -->
<action-mappings>
<!-- path表示将来访问action的资源名 -->
<!-- type:用于表示action的全路径-->
<!-- name:用于关联某个表单-->
<action path="/login" name="UserForm" type="com.actions.LoginAction">
<!-- 在这里配置forward 跳转关系-->
<!-- name:表示结果名称,path:表示跳转到那个页面 -->
<forward name="ok" path="/ok.jsp"></forward>
<forward name="error" path="/error.jsp"></forward>
</action>
</action-mappings>
</struts-config>
⑤:写出welcome.jsp。
⑥:在web.xml中配置ActionServlet。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>strutsLogin</display-name>
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<!-- 配置struts -->
<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>
</web-app>
⑦:开始使用我们的struts。
⑧:struts中的乱码问题->过滤器。
package com.filters;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
/**
* Servlet Filter implementation class characterFilter
*/
@WebFilter("/characterFilter")
public class characterFilter implements Filter {
/**
* Default constructor.
*/
public characterFilter() {
// TODO Auto-generated constructor stub
}
/**
* @see Filter#destroy()
*/
public void destroy() {
// TODO Auto-generated method stub
}
/**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("utf-8");
chain.doFilter(request, response);
response.setCharacterEncoding("utf-8");
}
/**
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
// TODO Auto-generated method stub
}
}
在web.xml中配置过滤器:
<filter>
<filter-name>characterFilter</filter-name>
<filter-class>com.filters.characterFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>characterFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
4.struts配置的一些细节:
①:在表单中,当发送一个请求时:
<form action=”http://loachost:8080/strutsLogin2/login.do”>,会自动添加协议,得到login.do,login.do去找到ActionServlet,ActionServlet去在config中找到资源,(反射机制)
②:
注意actionForm中的get和set方法的命名:
③:struts-config.xml约定俗成的放在WEB-INF文件夹下,但可以根据自己的实际自己放置。
④:每个action都是单态,包括actionservlet
单态:在程序运行的整个过程中,始终是一个对象。
⑤:一个项目中可以有多个struts-config.xml,但里面的资源不能再相同,在web.xml中配置的时候:在第一个后面加逗号,再写上第二个配置文件
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<!-- 配置struts -->
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml,/WEB-INF/struts-config2.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
5.