方式一:实现controller接口
来变成控制类进行控制
这样写的缺点就是:
一个控制类,只能写一个控制方法,不能传递多个参数或者值。
好处:
不用去配置,注解开启和驱动支持也不用去管静态文件的处理和扫描包,即
<context:component-scan base-package="com.kuang.controller"></context:component-scan>
<mvc:default-servlet-handler></mvc:default-servlet-handler>
<mvc:annotation-driven></mvc:annotation-driven>
代码案例1:实现Controller接口
web.xml
<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>
springmvc-servlet.xml
<?xml version="1.0" encoding="UTF8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
">
<!--<context:component-scan base-package="com.kuang.controller"></context:component-scan>-->
<!-- <mvc:default-servlet-handler></mvc:default-servlet-handler>-->
<!-- <mvc:annotation-driven></mvc:annotation-driven>-->
<!--配置视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
<bean name="/t1" class="com.kuang.controller.ControllerDome1"></bean>
</beans>
实现Controller接口
//实现了Controller接口,就是一个控制器了
public class ControllerDome1 implements Controller {
public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("msg","你好呀,世界");
modelAndView.setViewName("test");
return modelAndView;
}
}
方式二,使用Controller注解(推荐使用)
其他文件都不变和方式一一样,web.xml不变,test.jsp不变,把spring-servlet.xml的bean去掉,加入扫描包的注解即可。
springmvc-servlet.xml
<?xml version="1.0" encoding="UTF8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
">
<context:component-scan base-package="com.kuang.controller"></context:component-scan>
<mvc:default-servlet-handler></mvc:default-servlet-handler>
<mvc:annotation-driven></mvc:annotation-driven>
<!--配置视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
<!-- <bean name="/t1" class="com.kuang.controller.ControllerDome1"></bean>-->
</beans>
ControllerDome2.java
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller//会被Spring接管,
public class ControllerDome2 {
//这里的类会被视图解析器接管
@RequestMapping("/t2")
public String test1(Model model){
model.addAttribute("msg","使用注解Controller");
return "test";
//这里的return就是要在视图解析器找到的地址文件。
// 比如这里是test,那它就会找/WEB-INF/jsp/test.jsp
}
@RequestMapping("/t3")
public String test3(Model model){
model.addAttribute("msg","test3");
return "test";
}
}
这里的return就是要在视图解析器找到的地址文件。
比如这里是test,那它就会找/WEB-INF/jsp/test.jsp
使用注解开发实现Controller,可实现一个控制类,实现多个页面视图。向案例中,我们输入/t2和/t3都跳入test.jsp,实现了软件开发过程中的低耦合。可以扩展的效果,是值得继续推荐使用的。实际写的代码也是最少的,只要通过注解支持即可。
public String是为了返回一个视图解析器。
@RequestMapping
是用于映射url到控制器,可以用于类或者方法上,用于类上表示类下面的所有方法都是以改地址作为父地地址。
比如,我们在设置管理员权限时,就可以在最上面的父类上加上admin,其下所有的子类或者子方法,都必须经过这个父类admin才能访问到。
@Controller
@RequestMapping("/admin")
public class ControllerDome3 {
@RequestMapping("/t2")
public String test1(Model model){
model.addAttribute("msg","使用/admin/t2");
return "test";
}
@RequestMapping("/t3")
public String test2(Model model){
model.addAttribute("msg","/admin/t3");
return "test";
}
}
这样在访问时,必须在/admin目录下,在输入/t2才能访问里面的内容。实现了封闭。
通常在开发中,使用较多也也有
在子类上加地址的,
@RequestMapping("/admin/t2")
public String test1(Model model){
model.addAttribute("msg","使用/admin/t2");
return "test";
}
错误整理:
检查Project Structure下的lib包,是不是缺失或者放置位置不对。
lib包要放在WEB-INF下,和classses同级别放置。