SpringMVC和JSP 登录实例 相关配置

SpringMVC + Jsp

 

需要的jar包:

 

web.xml配置文件

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <servlet>
      <servlet-name>dispatcher</servlet-name>
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
      <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/myConfig.xml</param-value>
      </init-param>
    </servlet>
  
    <servlet-mapping>
       <servlet-name>dispatcher</servlet-name>
       <url-pattern>*.do</url-pattern>
    </servlet-mapping>
</web-app>

 

 

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

 

myConfig.xml配置

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:drools="http://drools.org/schema/drools-spring"
       xmlns:camel="http://camel.apache.org/schema/spring"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
                           http://drools.org/schema/drools-spring classpath:org/drools/container/spring/drools-spring-1.0.0.xsd">
       
       <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="viewClass">
                <value>org.springframework.web.servlet.view.JstlView</value>
            </property>
            <property name="prefix">
                <value>/WEB-INF/view/</value>
            </property>
            <property name="suffix">
                <value>.jsp</value>
            </property>
       </bean>
       
       <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
            <property name="mappings">
                <props>
                  <prop key="/login.do">LoginAction</prop>
                </props>
            </property>
       </bean>
       
       <bean id="LoginAction" class="com.hammer.login.LoginAction">
            <property name="commandClass">
               <value>com.hammer.login.LoginInfo</value>
            </property>
            <property name="fail_view">
               <value>loginFail</value>
            </property>
          	<property name="success_view">
               <value>main</value>
            </property>
       </bean>
</beans>

 

 

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<String,Object> result = new HashMap<String,Object>();
			result.put("loginInfo", loginInfo);
			
			List<String> list = new ArrayList<String>();
			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

 

  <body>
    <h1>login success!</h1>
    <p>Current User:<c:out value="${loginInfo.username}"/></p>

    <p>Your current messages:</p>
    <c:forEach items="${messages}" var="item" begin="0" end="9" step="1" varStatus="var">
        <c:if test="${var.index % 2 == 0}">*</c:if>${item}<br/>
    </c:forEach>
  </body>

 注意: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

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

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定义

       <bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
            <property name="defaultErrorView">
                <value>showFailure</value>
            </property>
            
            <property name="exceptionMappings">
                <props>
                   <prop key="com.hammer.exception.HammerException">showHammerError</prop>
                   <prop key="com.hammer.exception.SQLException">showSQLError</prop>
                </props>
            </property>
       </bean>

 

处理单元抛出异常代码:

	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配置

       <!-- 国际化 -->
       <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
       		<property name="basename"><value>messages</value></property>
       </bean>

使用时候:<spring:message code="username" />使用在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配置,即是:

 

       <bean id="localeResolver" class="org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver">
       </bean>

 

 

 

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

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

待解决


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值