springmvc配置文件

springmvc.xml配置文件

扫描组件:
不想在xml文件中配置bean,我们可以给我们的类加上spring组件注解,只需再配置下spring的扫描器就可以实现bean的自动载入

<context:component-scan base-package="com.**.controller" />

@ReponseBody乱码问题:

	<mvc:annotation-driven>
		<mvc:message-converters>
			<bean class="org.springframework.http.converter.StringHttpMessageConverter">
				<!-- @ReponseBody乱码问题 -->
				<property name="supportedMediaTypes">
					<list>
						<value>text/plain;charset=utf-8</value>
						<value>text/html;charset=utf-8</value>
						<value>text/xml;charset=utf-8</value>
						<value>application/json;charset=UTF-8</value>
					</list>
				</property>
			</bean>
		</mvc:message-converters>
	</mvc:annotation-driven>

异常处理类:

<bean id="exceptionHandler" class="com.mp.isrp.exception.handler.MyExceptionHandler" />
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;

public class MyExceptionHandler implements HandlerExceptionResolver {

    public ModelAndView resolveException(HttpServletRequest request,
            HttpServletResponse response, Object handler, Exception ex) {
        ModelAndView modelAndView = new ModelAndView("../error");
        ex.printStackTrace();
        return modelAndView;
    }
}

spring内容协商:
同一资源,可以有多种表现形式,比如xml、json等,具体使用哪种表现形式,是可以协商的

<bean id="contentNegotiationManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
		<property name="favorPathExtension" value="true" />
		<property name="favorParameter" value="true" />
		<property name="parameterName" value="format" />
		<property name="ignoreAcceptHeader" value="false" />
		<property name="defaultContentType" value="text/html" />
		<property name="mediaTypes">
			<value>
				json=application/json
				xml=application/xml
				html=text/html
			</value>
		</property>
	</bean>

视图解析器和json解析器:

<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
		<property name="contentNegotiationManager" ref="contentNegotiationManager" />
		<property name="defaultViews">
			<list>
				<bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView" />
			</list>
		</property>
	</bean>

定义视图文件解析:

<bean id="defaultViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
		<property name="contentType" value="text/html" />
		<property name="prefix" value="/jsp/" />
		<property name="suffix" value=".jsp" />
	</bean>

文件上传:

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<property name="maxUploadSize" value="10485760000" />
		<property name="maxInMemorySize" value="40960" />
	</bean>

静态资源处理:

    <servlet>
		<servlet-name>springmvc</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath*:spring-mvc.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
	
	<servlet-mapping>
		<servlet-name>springmvc</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>

DispatcherServlet使用 / 拦截了所有的请求,会影响到静态资源文件的获取,这样就需要用mvc:default-servlet-handler和mvc:resources来帮住分类完成获取静态资源的责任

<mvc:resources mapping="/images/**" location="/WEB-INF/images/" cache-period="31556926"/>
<mvc:resources mapping="/js/**" location="/WEB-INF/js/" cache-period="31556926"/>
<mvc:resources mapping="/css/**" location="/WEB-INF/css/" cache-period="31556926"/>

拦截器:
mvc:mapping 拦截器路径配置
mvc:exclude-mapping 拦截器不需要拦截的路径

   <mvc:interceptors>
		<mvc:interceptor>
			<mvc:mapping path="/**" />
			<mvc:exclude-mapping path="/resour/**" />
			<mvc:exclude-mapping path="/local/resour/**" />
			<bean class="com.WebInterceptor" />
		</mvc:interceptor>
		<mvc:interceptor>
			<mvc:mapping path="/**" />
			<mvc:exclude-mapping path="/login/**" />
			<mvc:exclude-mapping path="/logout/**" />
			<bean class="com.AuthenticationInterceptor " />
		</mvc:interceptor>
	</mvc:interceptors>

com.WebInterceptor

public class WebInterceptor extends HandlerInterceptorAdapter {

	@Override
	public boolean preHandle(HttpServletRequest request,
			HttpServletResponse response, Object handler) throws Exception {
		WebUtil.setRequest(request);
		WebUtil.setResponse(response);
		
		return true;
	}

}

WebUtil

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class WebUtil {

	private static ThreadLocal<HttpServletRequest> request_threadLocal = new ThreadLocal<HttpServletRequest>();
	private static ThreadLocal<HttpServletResponse> reponse_threadLocal = new ThreadLocal<HttpServletResponse>();

	public static void setRequest(HttpServletRequest request) {
		request_threadLocal.set(request);
	}

	public static HttpServletRequest getRequest() {
		return request_threadLocal.get();
	}

	public static void removeRequest() {
		request_threadLocal.remove();
	}

	public static void setResponse(HttpServletResponse response) {
		reponse_threadLocal.set(response);
	}

	public static HttpServletResponse getResponse() {
		return reponse_threadLocal.get();
	}

	public static void removeResponse() {
		reponse_threadLocal.remove();
	}

	public static void sessionPut(String name, Object value) {
		getRequest().getSession().setAttribute(name, value);
	}

	public static Object sessionGet(String name) {
		return getRequest().getSession()
				.getAttribute(name);
	}

	public static void requestPut(String name, Object value) {
		getRequest().setAttribute(name, value);
	}

	public static Object requestGet(String name) {
		return getRequest().getAttribute(name);
	}

	public static void applicationPut(String name, Object value) {
		getRequest().getSession().getServletContext()
				.setAttribute(name, value);
	}

	public static Object applicationGet(String name) {
		return getRequest().getSession()
				.getServletContext().getAttribute(name);
	}

	public static HttpSession getSession() {
		return getRequest().getSession();
	}

}

AuthenticationInterceptor 身份验证

public class AuthenticationInterceptor extends HandlerInterceptorAdapter {

	@Override
	public boolean preHandle(HttpServletRequest request,
			HttpServletResponse response, Object handler) throws Exception {
		UserModel user = (UserModel) WebUtil.getSession().getAttribute(LoginConst.LOGIN_USER_MODEL);
		//不直接跳转到登录界面,解决直接在tab页中显示的问题。
		if (user == null || user.getId() == null || user.getId().trim().equals("")) {
			//重定向到登录界面
			//response.sendRedirect("http://96.2.38.162:8888/isrp/jsp/global/login/go.jsp");
			//转发请求
			request.getRequestDispatcher("login.jsp").forward(request, response);//Login
			return false;
		}
		//暂时关闭 FIXME
		return true;
	}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值