java web开发入门十二(idea创建maven SSM项目需要解决的问题)基于intellig idea(2019-11-09 11:23)


一、spring mvc action返回string带双引号问题

解决方法:

在springmvc.xml中添加字符串解析器

    
    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
        <property name="messageConverters">
            <list>

                <bean class="org.springframework.http.converter.StringHttpMessageConverter"/>
                <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
            list>
        property>
    bean>

二、css文件中引用的img url写法

暂未解决

三、action请求去掉.action

 1.web.xml配置

 
    <servlet>
        
        <servlet-name>springmvcservlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
        <init-param>
            
            <param-name>contextConfigLocationparam-name>
            <param-value>classpath:springmvc.xmlparam-value>
        init-param>
        <load-on-startup>1load-on-startup>
    servlet>
    <servlet-mapping>
        <servlet-name>springmvcservlet-name>
        
        
        
        <url-pattern>/url-pattern>
    servlet-mapping>

2.修改spring.xml文件,让静态文件交给servlet处理 

参考:https://www.cnblogs.com/jdbn/p/11020374.html


    
    
    <mvc:annotation-driven/>

    
    <mvc:default-servlet-handler/>

四、登录拦截器

1.编写LoginInterceptor

package com.eggtwo.euq.interceptor;

import com.eggtwo.euq.dto.CurrentSysUser;
import com.eggtwo.euq.utils.CacheUtil;
import com.eggtwo.euq.utils.ConfigUtil;
import com.eggtwo.euq.utils.CookieUtil;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

public class LoginInterceptor implements HandlerInterceptor {
    private boolean isAjaxRequest(HttpServletRequest request) {
        if (request.getHeader("x-requested-with") != null && request.getHeader("x-requested-with").equalsIgnoreCase("XMLHttpRequest")) {
            //如果是ajax请求响应头会有,x-requested-with
            System.out.print("发生ajax请求...");
            return true;

        }
        return false;
    }


    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

        String requestUri = request.getRequestURI(); //请求完整路径,可用于登陆后跳转
        String contextPath = request.getContextPath();  //项目下完整路径
        String url = requestUri.substring(contextPath.length()); //请求页面
        System.out.print("发生拦截...");
        System.out.println("来自:" + requestUri + "的请求");

        //拿到cookie
        //也就是获取session里的登录状态值
        String cookieKey = ConfigUtil.getBossCookieKey();
        String cookieValue = CookieUtil.getByName(request, cookieKey);
        CurrentSysUser currentSysUser =null;
        String errorMsg=null;
        if (cookieValue == null) {
            errorMsg="no login,please login";
        }else{
            currentSysUser = CacheUtil.getT(cookieValue);
            if (currentSysUser == null) {
                errorMsg="no login,please login";
            }
        }
        if (errorMsg!=null){
            if (isAjaxRequest(request)) {
                response.setContentType("application/json; charset=utf-8");
                PrintWriter writer = response.getWriter();
                writer.print("{type:0,msg:'"+errorMsg+"'}");
                writer.close();
                response.flushBuffer();
            } else {
                String basePath= request.getContextPath();
                response.sendRedirect(basePath+"/account/login?error="+errorMsg);
            }
            return false;//返回false不走下面的方法
        }
        //更新缓存过期时间
        CacheUtil.remove(cookieValue);
        CacheUtil.set(cookieValue, currentSysUser, ConfigUtil.getBossCookieTimeoutSecond());
        //更新cookie过期时间--覆盖原有的cookie
        CookieUtil.deleteCookie(response, cookieKey);
        //写入cookie
        CookieUtil.addCookie(response, cookieKey, cookieValue, ConfigUtil.getBossCookieTimeoutSecond());



        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

    }
}

2.spring mvc中配置要拦截的action

 
    <mvc:interceptors>
        <mvc:interceptor>
            
            <mvc:mapping path="/**"/>


            
            <mvc:exclude-mapping path="/account/login"/>
            <mvc:exclude-mapping path="/account/logout"/>

            
            <mvc:exclude-mapping path="/"/>
            
            <mvc:exclude-mapping path="/content/**" />
            <mvc:exclude-mapping path="/images/**" />
            <mvc:exclude-mapping path="/js/**" />
            <mvc:exclude-mapping path="/css/**" />
            <mvc:exclude-mapping path="/upload/**" />
            <mvc:exclude-mapping path="/download/**" />

            
            <bean class="com.eggtwo.euq.interceptor.LoginInterceptor">bean>
        mvc:interceptor>
        
    mvc:interceptors>

五:异常拦截器

LoginInterceptor