Spring企业课六,springmvc的使用和配置

8 篇文章 0 订阅
7 篇文章 0 订阅

随着不断增多且越来越复杂的需求产生,开发者不得不做很多重复的工作。在使用springmvc后,明显的减少了工作量。至于springmvc的各种优点,我暂时不列出来了,有很多很棒的博文做出了解释。接下来,我们看看如何配置和使用。

首先我们要知道,springmvc使用在web项目中的。所以,我们要建一个web项目。web项目的配置是从web.xml中读取,让我们看看web.xml该如何写。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>jq_springweb</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <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:SpringMVC-servlet.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>
  
  <filter>
    <filter-name>charEncoding</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>
    <init-param>
      <param-name>forceEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
  </filter>
  
  <filter-mapping>
    <filter-name>charEncoding</filter-name>
    <url-pattern>/</url-pattern>
  </filter-mapping>
  
</web-app>

可以看出,由于代码越写越多,我进行了很多配置。不要慌,让我们慢慢的分析。加粗部分是我们的核心部分,没有他我们就无法使用springmvc。这部分配置了springmvc提供给我们的dispatcherservlet,并且初始化了springmvc配置文件的位置。这个配置文件我们后面会来将。斜体字部分,我们配置了过滤器,解决了乱码问题。到这了,web.xml基本配置完毕,下面我们看看springmvc的配置文件。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
        http://www.springframework.org/schema/context 
		http://www.springframework.org/schema/context/spring-context-3.2.xsd">
		<!-- 使静态资源起作用,会导致拦截器不起作用-->
		<!-- <mvc:default-servlet-handler/>  -->
		
		<!-- <bean id="myInterceptor" class="com.briup.web.interceptor.MyInterceptor"></bean>
		<bean id="myInterceptor2" class="com.briup.web.interceptor.MyInterceptor2"></bean>
		<bean id="timeinterceptor" class="com.briup.web.interceptor.TimeInterceptor"></bean> -->
		
		<!-- handlermapping配置 -->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
  <!-- <property name="interceptors" >
    <list>
      <ref bean="myInterceptor"/>
      <ref bean="myInterceptor2"/>
      <ref bean="timeinterceptor"/>
      
    </list>
  </property> -->
</bean>

<!-- 让注解起作用 -->
<context:component-scan base-package="com.briup.web.controller"></context:component-scan>
<mvc:annotation-driven></mvc:annotation-driven>
<!-- 配置handleradapter -->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean>

<!-- 配置统一异常处理视图解析器 -->
<!-- <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="defaultErrorView" value="error"></property>
<property name="exceptionAttribute" value="except"></property>
</bean> -->
<!-- 用于上传文件 -->
<bean name="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="UTF-8"></property>
<property name="maxUploadSize" value="2000000000"></property>
</bean>

<!--  视图解析器--> 
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
  <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
  <property name="prefix" value="/WEB-INF/jsp/"></property>
  <property name="suffix" value=".jsp"></property>
</bean>
<bean name="/hello.action" class="com.briup.web.controller.HelloController"></bean>





</beans>

这里面,加粗部分是我们必须要配置的部分。其他的就是用于相关功能的配置。springmvc中,我们常用的是拦截器,控制器这两个组件。这些组件在配置的时候,可以用注解的方式,也可以使用xml配置的方式。如果使用注解的方式,需要在springmvc中进行如下配置

<!-- 让注解起作用 -->
<context:component-scan base-package="com.briup.web.controller"></context:component-scan>
<mvc:annotation-driven></mvc:annotation-driven>

下面我们先讲讲拦截器。拦截器,顾名思义,对服务器的访问进行一些拦截操作。使用拦截器需要进行如下配置。

<!-- <bean id="myInterceptor" class="com.briup.web.interceptor.MyInterceptor"></bean>
		<bean id="myInterceptor2" class="com.briup.web.interceptor.MyInterceptor2"></bean>
		<bean id="timeinterceptor" class="com.briup.web.interceptor.TimeInterceptor"></bean> -->
		
		<!-- handlermapping配置 -->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
  <!-- <property name="interceptors" >
    <list>
      <ref bean="myInterceptor"/>
      <ref bean="myInterceptor2"/>
      <ref bean="timeinterceptor"/>
      
    </list>
  </property> -->
</bean>

同时需要注释掉是静态资源起作用的配置

<!-- 使静态资源起作用,会导致拦截器不起作用-->
		<!-- <mvc:default-servlet-handler/>  -->

那么,在这种情况下需要是静态资源起作用该怎么办呢。那就得对其进行配置,这里就不拓展了。

控制器的使用就相当复杂了,我们今天就不详细说明。

上面配置中配置了一个控制器,这就是xml配置控制器的方法

<bean name="/hello.action" class="com.briup.web.controller.HelloController"></bean>

我将这个控制器挂出来,很简单的。

public class HelloController implements Controller{

	@Override
	public ModelAndView handleRequest(HttpServletRequest req,
			HttpServletResponse resp) throws Exception {
		System.out.println("hello controller");
		String name=req.getParameter("name");
		ModelAndView mv=new ModelAndView();
		mv.setViewName("index");
		mv.addObject("name",name);
		System.out.println(name);
		
//		String [] path={"com/briup/hibernate/dao/hibernate_dao.xml",
//		"com/briup/hibernate/service/hibernate_service3.xml"};
//        ApplicationContext containerApplicationContext=
//		new ClassPathXmlApplicationContext(path);
//        IAccountService service=(IAccountService)containerApplicationContext.getBean("accountService");
//        Account account=new Account("xuxiao7","xuxiao7",11.111,new Date());
//        service.openAccount(account);
		return mv;
	}

}

控制器我们可以理解为servlet。我们访问它,获取我们需要的信息。这里,他返回了index.jsp给我们。结合配置文件,意思就是我们可以访问/hello.action,到达index.jsp这个页面。当然,我们也可以通过注解的方式配置。

//跳转问题
@Controller

public class DispatherController {
	@RequestMapping("/disb")
	public String disB(){
		System.out.println("in dis b");
		return "index";
	}
	@RequestMapping("/disc")
	public void disC(HttpServletRequest req,HttpServletResponse Resp){
		//内部跳转
//		try {
//			System.out.println("in dis c");
//			req.getRequestDispatcher("/disb").forward(req, Resp);
//			//req.getRequestDispatcher("/WEB-INF/jsp/index.jsp").forward(req, Resp);
//		} catch (ServletException | IOException e1) {
//			// TODO Auto-generated catch block
//			e1.printStackTrace();
//		};
		//重定向   web-inf下面的资源重定向访问不到
		try {
			System.out.println("in dis c");
			Resp.sendRedirect("disb");
			//Resp.sendRedirect("/WEB-INF/jsp/index.jsp");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	@RequestMapping("/disA")
	public String disA(){
		System.out.println("in dis a...");
		//return "index";
		//return "forward:disb";
		return "redirect:disb";
	}
	@RequestMapping("/errortest")
	public String error(){
		int i=10/0;
		return "index";
	}
}
这里面列举了很多控制器的灵活运用。我们可以再在类上面配置requestmapping,给下面的URL增加一级条目。这里,我们可以通过控制器跳转到jsp,也可以访问其他控制器。控制器还有其他更多的注解方式,非常便捷,大家可以去了解,我这里就不一一讲解了。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值