SpringMVC和JSP 登录实例 相关配置

SpringMVC + Jsp

 

需要的jar包:

SpringMVC和JSP 登录实例 相关配置_第1张图片

 

web.xml配置文件

 



    
      dispatcher
      org.springframework.web.servlet.DispatcherServlet
      
            contextConfigLocation
            /WEB-INF/myConfig.xml
      
    
  
    
       dispatcher
       *.do
    

 

 

如果没有指定 init-param参数,默认为src路径下dispatcher-servlet.xml文件,即(servlet-name)-servlet.xml配置。

 

myConfig.xml配置

 



       
       
            
                org.springframework.web.servlet.view.JstlView
            
            
                /WEB-INF/view/
            
            
                .jsp
            
       
       
       
            
                
                  LoginAction
                
            
       
       
       
            
               com.hammer.login.LoginInfo
            
            
               loginFail
            
          	
               main
            
       

 

 

LoginAction.java

 

package com.hammer.login;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import org.springframework.validation.BindException;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.SimpleFormController;

@SuppressWarnings("deprecation")
public class LoginAction extends SimpleFormController{
       private String fail_view;
       private String success_view;
	@Override
	protected ModelAndView onSubmit(Object command, BindException errors)
			throws Exception {
		LoginInfo loginInfo = (LoginInfo)command;
		
		if(login(loginInfo) == 0){
			HashMap result = new HashMap();
			result.put("loginInfo", loginInfo);
			
			List list = new ArrayList();
			list.add("msg1");
			list.add("msg2");
			list.add("msg3");
			result.put("messages", list);
			
			return new ModelAndView(this.getSuccess_view(),result);
		}
		
		return new ModelAndView(this.getFail_view());
	}
	
	
	private int login(LoginInfo info){
		if("hammer".equals(info.getUsername()) && "hammer".equals(info.getPassword())){
			return 0;
		}
		return 1;
	}
	
	
	public String getFail_view() {
		return fail_view;
	}
	public void setFail_view(String fail_view) {
		this.fail_view = fail_view;
	}
	public String getSuccess_view() {
		return success_view;
	}
	public void setSuccess_view(String success_view) {
		this.success_view = success_view;
	}

}

 

 

LoginInfo.java

 

package com.hammer.login;

public class LoginInfo {
	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;
	}
	
	
}

 

 

Main.jsp

 

  
    

login success!

Current User:

Your current messages:

*${item}

 注意:JSTL的使用 Spring3.0以上的SimpleFormController 过时

 

 

1、Resolver设定

   Resolver将输出结果和输出界面相融合,为表现层提供呈现资源。

2、View Resolver的viewClass参数

   使用JSP页面作为输出,因此,设定为:

org.springframework.web.servlet.view.JstlView

  如果是FreeMarker模板表现层:

org.springframework.web.servlet.view.freemarker.FreeMarkerView

  如果是Velocity模板表现层

org.springframework.web.servlet.view.velocity.VelocityView

3、View Resolver的prefix前缀参数

  运行时,Spring将为指定的页面资源自动追加前缀

4、View Resolver的suffi前缀x参数

  运行时,Spring将为指定的页面资源自动追加后缀

5、“请求/处理单元”关系映射

  将“login.do”映射到处理单元 LoginAction

  节点下可以有多个映射关系存在

6、LoginAction定义具体实现类

7、LoginAction的请求数据参数

   commandClass参数源于LoginAction的基类BaseCommandController包含了请求数据的封装和验证方法BaseCommandController.bindAndValidate,将传入的HttpServletRequest构造请求数据对象,LoginInfo这是一个简单的JavaBean,对Http请求的参数进行遍历,于LoginInfo存在相同名称的属性,如果找到,则将此参数复制到LoginInfo对象的同名属性中,后作为参数传递给LoginAction.

8、返回视图定义

  返回结果对应我们配置了fail_view、success_view两个自定义参数。参数值将由Resolver进行处理,为其加上前缀后缀,如对于fail_view对应的页面路径/WEB-INF/view/loginFail.jsp之后,Resolver会将LoginAction的返回数据与视图相融合,返回最终的显示界面。

 

探讨: BindException 的数据绑定错误的跟踪机制,错误描述的工具,用于向上层反馈的错误信息。

 

统一异常处理

修改myConfig.xml增加exceptionResolver定义

       
            
                showFailure
            
            
            
                
                   showHammerError
                   showSQLError
                
            
       

 

处理单元抛出异常代码:

	public void throwException(LoginInfo info) throws Exception{
		if("sql".equals(info.getUsername())){
			throw new SQLException();
		}else if("ham".equals(info.getUsername())){
			throw new HammerException();
		}
		throw new Exception();
	} 

 

映射到对应的处理页面,抛出SQLException,跳转到showSQLError.jsp(页面可以展示Exception的message信息等)页面 根据exceptionMappings关系。

 

思考针对业务异常分类,以弹出框的形式展示 业务信息需求,后台怎么统一搞(编写异常处理工具类,信息通过Ajax异步结果集传递)

 

国际化支持

 

在myConfig.xml增加messageSource配置

       
       
       		messages
       

使用时候:使用在JSP页面中

 

注意:

属性文件名的写法:

           messages_zh_CN.properties  (中文) 部署的时候使用JDK的native2ascii转码

           messages_en_US.properties  (英文)
配置messageSource这个bean(注意:一定是messageSource不是messageResource ,这是Spring规定的)

 

Locale的切换:

1、根据语言种类,部署时候手动替换*.properties文件

2、根据当前系统的Locale设置,自动匹配(上列默认)

3、根据客户浏览器语言设定,自动切换界面语种,最灵活

注意:AcceptHeaderLocaleResolver、SessionLocaleResolver、CookieLocaleResolver使用

在myConfig.xml中增加localeResolver配置,即是:

 

       
       

 

 

 

本国际化实例中 报严重: No WebApplicationContext found: no ContextLoaderListener registered?

java.lang.IllegalStateException: No WebApplicationContext found: no ContextLoaderListener registered?

待解决

 
  

你可能感兴趣的:(Spring)