struts 韩顺平
基于struts的登录验证:
1.新建web项目;
2.将struts的开发包加入web工程
3.编写login.jsp
4.编写ActionForm(用户表单)Action分控制器;
5.编写struts-config.xml文件,该文件用于配置action actionform的对应关系,和跳转位置,一般放在WEB-INF目录下
6.编写成功失败页面jsp;
7.配置web.xml文件,在该文件中配置struts-config.xml文件
8.测试ok
扩展
1.在登陆成功之后显示用户名;
2.使用filter配合struts解决中文乱码;
写一个过滤器,并设置request.setCharacterEncoding("utf-8");
public class MyFilter extends HttpServlet implements Filter {@Overridepublic void doFilter(ServletRequest request, ServletResponse response,FilterChain filter) throws IOException, ServletException {// TODO Auto-generated method stubrequest.setCharacterEncoding("utf-8");//设置编码filter.doFilter(request, response);//必须}@Overridepublic void init(FilterConfig arg0) throws ServletException {// TODO Auto-generated method stub}}
在web.xml文件中配置过滤器:
<!-- 配置filter --><filter><filter-name>MyFilter</filter-name><filter-class>filter.MyFilter</filter-class></filter><filter-mapping><filter-name>MyFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>
3.struts-config.xml
4.scope:
5.每个action都是单态的,包括ActionServlet;
单态:指在程序运行过程中始终只有一个实例对象;
6.struts-config.xml 不一定在WEB-INF目录下,也不一定只有一个只需在web.xml文件配置即可.
<init-param><param-name>config</param-name><param-value>/WEB-INF/struts-config.xml,/WEB-INF/struts-config-2.xml</param-value></init-param>
7.....
基于struts的用户注册验证:
1.导入struts标签库;
<%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"%><%@ taglib prefix="html" uri="http://struts.apache.org/tags-html" %><!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><html:form action="/register.do" method="post" >用户:<html:text property="username"></html:text><br/>密码:<html:text property="password"></html:text><br/>邮箱:<html:text property="email"></html:text><br/><html:submit value="注册"></html:submit><html:cancel value="取消"></html:cancel></html:form></body></html>
注意:这里的用户、密碼、郵箱必须在<html:form>中并且在form中有相应的字段与之对应.否则会报500错误.因为struts默认认为你的输入框等控件是要用来提交的,所以,必须写在form中且有相应的form类与之对应.而不是在你提交的时候才检测.
2.在web.xml中添加字符编码过滤器Filter,在配置文件中设置字符编码可以使程序更加灵活,也更利于维护;
<filter><filter-name>MyFilter</filter-name><filter-class>com.zky.struts.filter.MyFilter</filter-class><init-param><param-name>encoding</param-name><param-value>utf-8</param-value></init-param></filter><filter-mapping><filter-name>MyFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>
public class MyFilter extends HttpServlet implements Filter {private String encoding;@Overridepublic void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {// TODO Auto-generated method stubrequest.setCharacterEncoding(encoding);chain.doFilter(request, response);}@Overridepublic void init(FilterConfig config) throws ServletException {// TODO Auto-generated method stubencoding = config.getInitParameter("encoding");}}
3.在web.xml中添加关键字过滤器SafeFilter,虽然在Action中也可以实现关键字过滤,但是在filter中实现更好;
<filter><filter-name>SafeFilter</filter-name><filter-class>com.zky.struts.filter.SafeFilter</filter-class><init-param><param-name>keywords</param-name><param-value>拉登;小明;XXX;西吧</param-value></init-param></filter><filter-mapping><filter-name>SafeFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>
java代码:
public class SafeFilter extends HttpServlet implements Filter {private String[] keywords;@Overridepublic void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {// TODO Auto-generated method stubString username = (String) request.getAttribute("username");if (username != null) {for (String keyword : keywords) {if (keyword.equals(username)) {request.getRequestDispatcher("/WEN-INF/err.jsp").forward(request, response);return;}}}chain.doFilter(request, response);}@Overridepublic void init(FilterConfig config) throws ServletException {// TODO Auto-generated method stubkeywords = config.getInitParameter("keywords").split(";");}}
问题:1.在web.xml文件中编辑filter的配置信息是,不小心删除了ActionServlet的部分配置文件,导致404错误;
2.在获得用户输入的用户名是应使用request.getParameter("username");而不是request.getAttribute("username");
导致过滤器无法使用.
案例:文件的上传下载
* 文件上传需要解决的几个问题:
1.文件名重复时,后上传的文件会覆盖先上传文件的问题;
2.中文文件名显示乱码问题;

浙公网安备 33010602011771号