Struts1.3——登录案例的改进
在上篇写的用户登录验证案例的基础上进一步改进。
1.在登录成功后的welcome.jsp页面显示登录成功的用户名
思路1:在LoginAction中,将username放入request的域对象中
因为,ActionMapping的findForward()方法实质上是请求转发,所以可以把username放入request的域对象中,如下:
public class LoginAction extends Action {
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
UserForm userForm = (UserForm)form;
System.out.println("用户名="+userForm.getUsername());
System.out.println("密码="+userForm.getPassword());
if("123".equals(userForm.getPassword())){
// 把名字存入request域对象,因为findForward是转发,所以可以存到request对象中
request.setAttribute("username", userForm.getUsername());
return mapping.findForward("ok");
}else{
return mapping.findForward("error");
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
然后,在welcome.jsp页面将request域对象中的username取出来即可,如下:
<body>
Welcome! <br>
<%--把username取出来 --%>
<%=request.getAttribute("username").toString() %>
<br><a href="/strutslogin">返回重新登录</a>
</body>
- 1
- 2
- 3
- 4
- 5
- 6
但实际上,在struts中并不需要这么做,我们只需要在struts-config.xml文件中简单配置Action,就可以把UserForm这个表单的对象放入request或者session域对象中:
思路2:直接在struts-config.xml中配置Action,添加scope元素,指定表单的生命周期
<action path="/login" name="userForm" scope="request" type="com.gavin.actions.LoginAction">
<forward name="ok" path="/WEB-INF/welcome.jsp"/>
<forward name="error" path="/WEB-INF/error.jsp"/>
</action>
- 1
- 2
- 3
- 4
注意,如果不在action中配置scope属性,它也是默认存在的,并且默认取值为session。
在这里: scope="request",相当于这样一句话:request.setAttribute("userForm",userForm) scope="session",相当于:request.getSession().setAttribute("userForm",userForm)
如果,我们在这里配置了scope属性,那么就相当于把userForm表单对象实例放入了request的域对象,这时候我们的welcome.jsp需要这么写:
<body>
Welcome! <br>
<%--取出userForm对象,然后获取username --%>
<%=((UserForm)request.getAttribute("userForm")).getUsername()%>
<br><a href="/strutslogin">返回重新登录</a>
</body>
- 1
- 2
- 3
- 4
- 5
- 6
2.中文乱码问题处理
在测试的过程中,发现如果用户名出现了中文,会产生中文乱码问题。
在struts中,我们必须使用filter(过滤器)来解决struts中的中文乱码问题
步骤如下:
开发一个过滤器EncodingFilter,并设置它的request.setCharacterEncoding("utf-8")即可
public class EncodingFilter extends HttpServlet implements Filter {
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
// 在这里设置接收编码
arg0.setCharacterEncoding("utf-8");
arg2.doFilter(arg0, arg1);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
然后在web.xml文件中配置该过滤器,使访问所有的页面都要经过该过滤器,如下:
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>com.gavin.filters.EncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
3.Action是单态的
单态的含义:单态是指在整个程序运行的过程中,始终是一个对象在运行、在为我们服务。
也就是说我们的LoginAction只被实例化一次,之后的所有访问都由这个对象来处理。
4.关于struts-config.xml文件
- 它的路径不一定非要放在WEB-INF目录下面,也可以自己随意放置,但一般上是放在WEB-INF目录下
- 那么在一个项目中,能不能有多个struts-config.xml配置文件呢?
答案是可以的。
如果有两份配置文件,它仍然是由一个总控制器ActionServlet管理的,假设有struts-config.xml,struts-config2.xml两个配置文件,那么它们是这样配置的:
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml,/WEB-INF/struts-config2.xml</param-value>
</init-param>
</servlet>
Struts1.3——登录案例的改进的更多相关文章
- Android first---文件读取(登录案例编写为主)
以android登录案例来介绍文件的读取与androidAPI给予的方法 第一步:绘制界面 绘制方法:在线性布局下面设置相对布局 代码部分: <LinearLayout xmlns:androi ...
- ADO.NET学习系列(三)----做一个登录案例
总体思路.根据用户输入的用户名和密码,来判断,和数据库里面存的是不是一样,如果一样就表明登录成功,否则就登录失败. 方案一: 1.select* from 表名 where username=&quo ...
- 基于Struts2框架实现登录案例 之 使用Struts2标签库简化表单+继承ActionSupport完成输入交验
一,使用Struts2标签库简化表单 在文章[基于Struts2框架实现登录案例]的基础上,通过使用Struts标签库可以简化登录页面login2.jsp <%@ page language=& ...
- 简单登录案例(SharedPreferences存储账户信息)&联网请求图片并下载到SD卡(文件外部存储)
新人刚学习Android两周,写一个随笔算是对两周学习成果的巩固,不足之处欢迎各位建议和完善. 这次写的是一个简单登录案例,大概功能如下: 注册的账户信息用SharedPreferences存储: 登 ...
- Android(java)学习笔记213:开源框架post和get方式提交数据(qq登录案例)
1.前面提到Http的get/post方式 . HttpClient方式,实际工作的时候不常用到,因为这些方式编写代码是很麻烦的 2.Android应用会经常使用http协议进行传输,网上会有很完善 ...
- Android(java)学习笔记212:中文乱码的问题处理(qq登录案例)
1.我们在之前的笔记中LoginServlet.java中,我们Tomcat服务器回复给客户端的数据是英文的"Login Success","Login Failed&q ...
- C#学习笔记(35)——事件做的登录案例
说明(2018-4-9 20:11:42): 1. 先自定义了一个登录控件,可以输入账号.密码,点击登录.然后在Form1里面拖入这个控件,要求输入账号密码正确时,点击登录,控件显示绿色,否则显示红色 ...
- Spring Security Oauth2 单点登录案例实现和执行流程剖析
Spring Security Oauth2 OAuth是一个关于授权的开放网络标准,在全世界得到的广泛的应用,目前是2.0的版本.OAuth2在“客户端”与“服务提供商”之间,设置了一个授权层(au ...
- Android(java)学习笔记156:开源框架post和get方式提交数据(qq登录案例)
1. 前面提到Http的get/post方式 . HttpClient方式,实际工作的时候不常用到,因为这些方式编写代码是很麻烦的 2. Android应用会经常使用http协议进行传输,网上会有很 ...
随机推荐
- win10右键在此处打开CMD
1.在网上找了好多发现都不能运行,最后找到一个靠谱的记下来,方便以后使用. 2.新建一个 .reg格式的脚本 Windows Registry Editor Version 5.00 [HKEY_CL ...
- USACO 6.3 章节 你对搜索和剪枝一无所知QAQ
emmm........很久很久以前 把6.2过了 所以emmmmmm 直接跳过 ,从6.1到6.3吧 Fence Rails 题目大意 N<=50个数A1,A2... 1023个数,每个数数值 ...
- vue中修改了数据但视图无法更新的情况(转)
原文地址:https://blog.csdn.net/qq_39985511/article/details/79778806
- python 装饰器 第三步:使用语法糖
# 第三步:使用语法糖(就是语法) # 用于扩展基本函数的函数 def kuozhan(func): # 扩展功能1 print('饭前要洗手') # 调用基本函数 func() # 扩展功能2 pr ...
- pyppeteer模块的基本使用
pyppeteer模块的基本使用 引言 Selenium 在被使用的时候有个麻烦事,就是环境的相关配置,得安装好相关浏览器,比如 Chrome.Firefox 等等,然后还要到官方网站去下载对应的驱动 ...
- Django token 学前小知识
1,base64 '防君子不防小人' 方法 作用 参数 返回值 b64encode 将输入的参数转化为base64规则的串 预加密的明文,类型为bytes:例:b‘guoxiaonao’ base64 ...
- .NET/VB.NET: solving the error “The system cannot find the file specified.” “\Temp\.NETFramework,Version=v4.0.AssemblyAttributes.vb”
Source Link Bumped into this error a while ago in Visual Studio 2010: Kind Error Number 80 Descripti ...
- 常见的3种Class级别的错误
ClassNotFoundException 很明显,这个错误是找不到类异常,即在当前classpath路径下找不到这个类. ClassNotFoundException继承了Exception,是必 ...
- Python之执行精确的浮点数运算
有时候:代码上数字计算可能会有如同下面的误差 原因: 这些错误是由底层CPU和IEEE 754标准通过自己的浮点单位去执行算术时的特征. 由于Python的浮点数据类型使用底层表示存储数据,因此你没办 ...
- windows10图形化连接CentOS7
前提:CentOS已经安装图形化,安装教程可以百度 [root@localhost ~]# cat /etc/redhat-release CentOS Linux release (Core) 安装 ...