SpringMVC-03

SpringMVC-03

1. @RequestParam注解

解决了客户端和服务端因参数名称不一致的问题,在处理请求的方法的参数前加上该注解。

 @RequestParam("username")uname

username为客户端提交的名称,uanme为服务端的参数名称,可以对应起来。一旦使用该注解,则必须进行提交,否则会报错(400错位)

原因:该注解有以下属性:

boolean required () default true

默认需要提交参数,可以设置为false;

@RequestParam(value="username",required=false)uname

如果客户端没提交数据,可以指定默认的参数的值(必须显式的required=false):

@RequestParam(value="username",required=false,defaultValue="指定的值")uname

2. 拦截器(Interceptor)

2.1 作用:

拦截器可以在处理几乎所有请求之前,对请求进行拦截,并尝试进行判断或验证,决定阻止处理或放行。

2.2 使用

  1. 实现拦截器接口HandlerInterceptor:preHandle方法起拦截作用,返回true时标识放行。

```java
 public class LoginInterceptor implements HandlerInterceptor {

	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		System.out.println("Sorry,You can not require this web!");
		return false;
	}

	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {
		// TODO Auto-generated method stub

	}

	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
			throws Exception {
		// TODO Auto-generated method stub

	 }
 
    }

2. 在配置文件中配置拦截器链:

    <!-- 拦截器链 -->
		<mvc:interceptors>
		    <mvc:interceptor>
		        <!-- 拦截的请求路径 -->
		        <mvc:mapping path="/index.do"/>
		        <!-- 拦截类,处理拦截的结果 -->
		        <bean class = "cn.spring.interceptor.LoginInterceptor"></bean>
		    </mvc:interceptor>
		</mvc:interceptors>

实现效果:index.jsp网页显示不了。

3. 配置拦截器的拦截路径,分为拦截路径和不拦截路径:<mvc:mapping path="/**"/>为拦截所有请求,<mvc:exclude-mapping path="/login.do"/>可以任意配置请求,该请求不经过拦截器处理。

    <!-- 拦截器链 -->
		<mvc:interceptors>
		    <mvc:interceptor>
		        <!-- 拦截的请求路径 -->
		        <mvc:mapping path="/**"/>
		        <mvc:exclude-mapping path="/login.do"/>
		        <mvc:exclude-mapping path="/handle_login.do"/>
		        <!-- 拦截类,处理拦截的结果 -->
		        <bean class = "cn.spring.interceptor.LoginInterceptor"></bean>
		    </mvc:interceptor>
		</mvc:interceptors>

## 3. 拦截器(Interceptor)与过滤器(Filter)的区别

1. 拦截器是SpringMVC的组件,且仅在被DispatcherServlet处理之后的请求才能处理;过滤器是javaee的组件。

2. 拦截器且仅在被DispatcherServlet处理之后的请求才能处理;过滤器的执行是在所有Servlet之前。

3. 拦截器配置灵活,可以配置拦截路径和多个不拦截路径;过滤器通过**<url-pattern>**节点配置1个需要过滤的路径,并且只能在过滤器的类中进行判断分析。

4. 过滤器是在web.xml文件中配置,而拦截器链在spring的配置文件中。

## 4.乱码问题

存储和读取使用一致的编码不会出现乱码的问题。

指定编码的地方有:数据传输过程、项目源代码、显示数据的界面、存储数据的地方。

###4.1 解决乱码问题:SpringMVC中的CharacterEncodingFilter过滤器类,声明了encoding属性,在方法doFilter()中设置我们响应的字符编码。在web.xml文件中配置过滤器:

    <filter>
		<filter-name>CharactorEncodingFilter</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>utf-8</param-value>
		</init-param>
	</filter>

	<filter-mapping>
		<filter-name>CharactorEncodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

## 5.SpringMVC的异常处理

@ExceptionHandler(value={异常的类型数组})

自定义一个公共处理异常的类BaseExceptionHnadlerController,然后让所有控制器都继承该类,就可以实现异常的统一处理。
    public class BaseExceptionHnadlerController {

	//ExceptionHandler可以指定要处理的异常类型
	//这个公共处理异常的类可以不被扫描
	//当其他被扫描的组件的父类为该类时,会先创建该类的实例
	@ExceptionHandler(value = Throwable.class)
	public String handlerException(Throwable e, HttpServletRequest request) {

		String erromessageString = null;
		if (e instanceof NullPointerException) {
			erromessageString = "您请求的参数为空!操作失败!";
		} else if (e instanceof IndexOutOfBoundsException) {
			erromessageString = "您访问的数据已经越界!请求失败!";
		} else {
			erromessageString = "操作失败!请联系系统管理员!";
		}

		request.setAttribute("err_message", erromessageString);

		return "erro";
	 }
    }

- 用于统一处理异常的方法有以下特点:

1. public访问权限,保证每个继承自它的子类都可以使用
2. 要包含所有可能要处理的异常类型
3. 该方法的参数可以包含Servlet相关的一些参数
4. 方法之前要加上注释:@ExceptionHandler





根据您提供的引用内容,您遇到的问题是无法删除工程目录下的access_log文件,提示另一个程序正在使用此文件,进程无法访问。这通常是因为该文件正在被其他程序占用,导致您无法对其进行删除操作。 要解决这个问题,您可以尝试以下几种方法: 1. 首先,您可以尝试关闭正在使用该文件的程序。可以通过任务管理器或系统监控工具查找到正在使用该文件的进程,并将其关闭,然后再尝试删除该文件。 2. 如果关闭其他程序后仍然无法删除该文件,您可以尝试重启您的计算机。重启后,所有占用该文件的进程都会被终止,然后您可以尝试删除该文件。 3. 如果以上方法都无法解决问题,您可以通过使用命令行工具来删除该文件。打开命令提示符窗口,进入到该文件所在的目录,然后使用del命令加上文件名来删除该文件。例如,您可以输入以下命令来删除文件: del D:\IDEA\新Spring\springMvc\springmvc03-requestMapping\target\tomcat\logs\access_log.2023-08-22 请注意,使用命令行删除文件时,请确保您有足够的权限来执行该操作。 希望以上方法可以帮助您解决问题。如果问题仍然存在,请检查是否还有其他程序在使用该文件,或者尝试联系技术支持人员寻求帮助。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [SSM 框架 (Spring+SpringMVC+MyBatis) --学习笔记](https://blog.csdn.net/qq_22465297/article/details/83793440)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [idea创建spring-springmvc-mybatis-maven](https://blog.csdn.net/Baldprogrammer/article/details/103211243)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

J.K.Roling

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值