在上篇写的用户登录验证案例的基础上进一步改进。

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——登录案例的改进的更多相关文章

  1. Android first---文件读取(登录案例编写为主)

    以android登录案例来介绍文件的读取与androidAPI给予的方法 第一步:绘制界面 绘制方法:在线性布局下面设置相对布局 代码部分: <LinearLayout xmlns:androi ...

  2. ADO.NET学习系列(三)----做一个登录案例

    总体思路.根据用户输入的用户名和密码,来判断,和数据库里面存的是不是一样,如果一样就表明登录成功,否则就登录失败. 方案一: 1.select* from 表名 where username=&quo ...

  3. 基于Struts2框架实现登录案例 之 使用Struts2标签库简化表单+继承ActionSupport完成输入交验

    一,使用Struts2标签库简化表单 在文章[基于Struts2框架实现登录案例]的基础上,通过使用Struts标签库可以简化登录页面login2.jsp <%@ page language=& ...

  4. 简单登录案例(SharedPreferences存储账户信息)&联网请求图片并下载到SD卡(文件外部存储)

    新人刚学习Android两周,写一个随笔算是对两周学习成果的巩固,不足之处欢迎各位建议和完善. 这次写的是一个简单登录案例,大概功能如下: 注册的账户信息用SharedPreferences存储: 登 ...

  5. Android(java)学习笔记213:开源框架post和get方式提交数据(qq登录案例)

    1.前面提到Http的get/post方式  . HttpClient方式,实际工作的时候不常用到,因为这些方式编写代码是很麻烦的 2.Android应用会经常使用http协议进行传输,网上会有很完善 ...

  6. Android(java)学习笔记212:中文乱码的问题处理(qq登录案例)

    1.我们在之前的笔记中LoginServlet.java中,我们Tomcat服务器回复给客户端的数据是英文的"Login Success","Login Failed&q ...

  7. C#学习笔记(35)——事件做的登录案例

    说明(2018-4-9 20:11:42): 1. 先自定义了一个登录控件,可以输入账号.密码,点击登录.然后在Form1里面拖入这个控件,要求输入账号密码正确时,点击登录,控件显示绿色,否则显示红色 ...

  8. Spring Security Oauth2 单点登录案例实现和执行流程剖析

    Spring Security Oauth2 OAuth是一个关于授权的开放网络标准,在全世界得到的广泛的应用,目前是2.0的版本.OAuth2在“客户端”与“服务提供商”之间,设置了一个授权层(au ...

  9. Android(java)学习笔记156:开源框架post和get方式提交数据(qq登录案例)

    1. 前面提到Http的get/post方式  . HttpClient方式,实际工作的时候不常用到,因为这些方式编写代码是很麻烦的 2. Android应用会经常使用http协议进行传输,网上会有很 ...

随机推荐

  1. 禁止修改input内容

    有什么问题请到<a href='/bbs/index.asp?boardid=2'>论坛</a>中发表<br> <!--# 特效来源:http://www.o ...

  2. Note1

    1.关于数据库主从备份与读写分离 主服务器数据库的每次操作都会记录在二进制日志文件mysql-bin.xxx中.从服务器的I/O线程使用专用帐号登陆到主服务器中读取该二进制文件,并将文件内容写入到自己 ...

  3. Reciteing(first)

      it is sybmbolically portrayed in this cartoon,when a teacher assigns her student to read a literat ...

  4. Bootstrap 学习笔记2 栅格系统 辅助类下拉框

    辅助类和响应式工具: 颜色和字体相同 响应式工具: 图标菜单按钮组件: btn-group 按钮式下拉菜单

  5. vue 中 element-ui 引入方式

    目录 前言 全部引用 单个引用 前言 有时候只会使用到 Element-ui 的部分功能,为了减少文件体积建议使用分开引用,即只引用使用的功能. 注意:在main.js中使用部分引用的时候是 impo ...

  6. intellij中maven不能导入pom文件中指定的jar包

    pom文件配置依赖的jar包版本,可以有默认的版本,如下 <profiles> <profile> <id>default_version</id> & ...

  7. [fw]GDT是在分段中為了相容real mode 跟 protected mode的產物

    在Protected Mode下,一个重要的必不可少的数据结构就是GDT(Global Descriptor Table). 为什么要有GDT?我们首先考虑一下在Real Mode下的编程模型: 在R ...

  8. 银行贷款(dp)

    链接:https://www.nowcoder.com/acm/contest/79/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32768K,其他语言65536KS ...

  9. 配置进程外Session 同时解决一个奇怪的BUG 因为SQLserver 服务器名不是默认的.或者localhost而引发的一系列问题

    用公司的电脑学习如鹏网的视频,开发一个项目,用到了进程外session,因为公司电脑SQLServer 是2008 服务器名称是.  然后参考这篇文章进行设置进程外session 很顺利 完成了设置. ...

  10. 【记录】mysql中建表utf8和utf8mb4区别?timestamp和datetime区别?

    mysql中建表utf8和utf8mb4区别? 1:utf8 是 Mysql 中的一种字符集,只支持最长三个字节的 UTF-8字符,也就是 Unicode 中的基本多文本平面 2:要在 Mysql 中 ...