IDEA创建SpringMVC项目并部署(含Controller和View互相传值,以及406,415状态码的处理)

1.创建项目


勾选SpringMVC 及 web Application(自动勾选),然后下一步

2.项目命名

命名
命名后点finish

3. 在WEB-INF目录下建classes等目录

建议建一样的目录
在这里插入图片描述

4. 配置Tomcat

在这里插入图片描述

在这里插入图片描述
点击Configure设置,选择Tomcat
在这里插入图片描述
点击 + 号添加Tomcat
在这里插入图片描述
点击1号位选择Tomcat目录,2号位自动生成,点击OK保存
在这里插入图片描述
出来,选择刚添加的Tomcat,点击OK保存
在这里插入图片描述

创建Artifact完之后点OK保存

5. 添加类库

file》Project Structure,选择Artifact,底部有黄色警告,点击所选位置,添加类库
在这里插入图片描述
添加完如图:
在这里插入图片描述
点击OK保存

6. 运行项目

打开index.jsp 点击右上角在这里插入图片描述运行项目
如图,成功运行项目
在这里插入图片描述

7.创建文件并配置

项目已经成功运行了,接下来开始MVC的东西

  1. Controller
    在src目录下建包(必须要有包名,默认包运行不了),然后创建 HelloWorldController.java 文件,如图:
    在这里插入图片描述 @Controller 说明这个类是一个控制器
    @RequestMapping("/hello") 表示整个控制器的地址是/hello
    @RequestMapping("/hw") 表示 helloWorld()方法的地址是/hw
    return "hw" 表示进入helloWord之后会转到hw.jsp页面(需要配置视图解析器)

  2. 配置前端控制器DispatcherServlet
    实际上项目创建好之后,IDEA已经自动帮我们在web.xml文件中配置好DispatcherServlet了,如图:
    在这里插入图片描述
    <url-pattern>*.from</url-pattern> 表示已 .from 结尾的URL地址,将会请求转发只相应的控制器处理
    一般情况下本人会将.from改成/

  3. 配置 component-scan
    在dispatcher-servlet.xml文件中配置component-scan,让系统能找到你所创建好的控制器

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

  4. 配置视图解析器 ViewResolver

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
       <!-- 视图的路径 -->
       <property name="prefix" value="/WEB-INF/jsp/"/>
       <!-- 视图名称后缀  -->
       <property name="suffix" value=".jsp"/>
    </bean>
    
    

    上面控制器 return "hw" 经过视图解析器的解析会到 /WEB-INF/jsp/ 目录下找名字为 hw 后缀名为 .jsp 的文件

以上全部配置好之后运行项目,输入 http://localhost:8080/pictureupdate/hello/hw 即可看到如下页面
在这里插入图片描述
url中的pictureupdate 是上面配置Tomcat时设置的项目名,如图
在这里插入图片描述
hellohw 则为控制器中两个 @RequestMapping 注解中的地址

  1. 通过返回ModelAndView,跳转至jsp页面
@RequestMapping("/hw1")
public ModelAndView helloWorld1() {
    ModelAndView mv = new ModelAndView();
    mv.setViewName("hw1");
    return mv;
}

在浏览器中输入http://localhost:8080/pictureupdate/hello/hw1,即可进入hw1.jsp页面

8. Controller和View互相传值

(1)view和Controller互传简单类型

hw.jsp 向 controller 传值,controller 转向 hw1.jsp(与上面的V向C传值结合)
controller

	@RequestMapping("hw")
    public String hw(Model model) {

        return "hw";
    }

    @RequestMapping(value = "hw1", method = {RequestMethod.GET, RequestMethod.POST})
    public ModelAndView hw1(String name, String sex, Integer age) {
        ModelAndView mv = new ModelAndView();
        mv.addObject("name", name);
        mv.addObject("sex", sex);
        mv.addObject("age", age);
        mv.setViewName("hw1");
       return mv;
    }

    @RequestMapping(value = "hw2", method = {RequestMethod.GET, RequestMethod.POST})
    public String hw2(String name, String sex, Integer age, Model model) {
        model.addAttribute("name", name);
        model.addAttribute("sex", sex);
        model.addAttribute("age", age);
        return "hw1";
    }

view
hw.jsp

<body>
    <%--<form method="post" action="${pageContext.request.contextPath}/hello/hw1">--%>
    <form method="post" action="${pageContext.request.contextPath}/hello/hw2">
        name:<input type="text" name="name"/>
        sex:<input type="text" name="sex"/>
        age:<input type="text" name="age"/>
        <input type="submit" value="submit">
    </form>
</body>

hw1.jsp

<body>
    name:${name}, sex:${sex}, age:${age}
</body>

###(2)View和Controller互传对象(Controller用对象接收数据,用对象将数据传给View)
pojo

:对象必须要有默认构造器,否则会报错:No default constructor found; nested exception is java.lang.NoSuchMethodExce

public class User {
    private String name;
    private String sex;
    private int age;

    public User() {
        super();
    }

    public User(String name, String sex, int age) {
        this.name = name;
        this.sex = sex;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                ", age=" + age +
                '}';
    }
}

Controller

@Controller
@RequestMapping("/hello")
public class HelloWorldController {

    @RequestMapping("/hw")
    public String helloWorld(){

        return "hw";
    }

    @RequestMapping("/hw1")
    public String helloWorld1(User user, Model model) {
        model.addAttribute("user", user);
        return "hw1";
    }
}

hw.jsp

<body>
    <form method="post" action="${pageContext.request.contextPath}/hello/hw1">
        name:<input type="text" name="user.name"/>
        sex:<input type="text" name="user.sex"/>
        age:<input type="text" name="user.age"/>
        <input type="submit" value="submit">
    </form>
</body>

hw1.jsp

<body>
name: ${user.name}, sex: ${user.sex}, age: ${user.age}
</body>

以上是Controller和View互传简单类型和对象的实例

(3)Controller接收json数据并传回前端

Controller接收json字符串,自动转换成对象;返回对象,自动转换成json字符串传给前端
添加 Jackson.jar 包
Jackson.jar下载地址:http://repo1.maven.org/maven2/com/fasterxml/jackson/core/
在这里插入图片描述
在项目中添加jar包:Project Structure》Module
在这里插入图片描述
点击 + ,找到对应的位置将jar包添加进来
点击 Artifacts ,像上面添加spring的jar包一样,将Jackson.jar 包添加进项目
在这里插入图片描述
Controller

	@RequestMapping("/hw2")
	@ResponseBody
	public User helloWorld(@RequestBody User user) {
		return user;
	}

注:@ResponseBody和@RequestBody分别放不同的位置,不能乱了

运行项目,使用Google浏览器插件Restlet进行访问测试(配置还未完成,访问 http://localhost:8080/pictureupdate/hello/hw2 将会报错,并返回406状态码)
在这里插入图片描述
注:Content-Type 必须是 application/json
填充好数据之后发送请求,将会返回406状态码,访问失败。需要在spring配置文件(applicationContext.xml)中配置

    <!-- 避免IE执行AJAX时,返回JSON出现下载文件
        spring3为:MappingJacksonHttpMessageConverter
        spring4为:MappingJackson2HttpMessageConverter
     -->
    <bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
        <property name="supportedMediaTypes">
            <list>
                <value>text/html;charset=UTF-8</value>
            </list>
        </property>
    </bean>

    <!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 -->
    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
        <property name="messageConverters">
            <list>
                <ref bean="mappingJacksonHttpMessageConverter" /><!-- json转换器 -->
            </list>
        </property>
    </bean>

此时如果重启项目,测试。将会返回 415 状态码,访问还是失败,还需要在 dispatcher-servlet.xml文件中添加<mvc:annotation-driven />配置。若添加是报错,则需要在beans标签中添加配置:
添加属性:

xmlns:mvc=“http://www.springframework.org/schema/mvc”

xsi:schemaLocation 中添加

http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd

至此完成所有配置,重启项目,再次测试访问情况,返回200状态码,访问成功,并成功拿到json数据
在这里插入图片描述

IDEA创建SpringMVC项目并部署,C和V传值(简单类型,对象,json数据)演示到此结束。
笔者能力有限,有什么错误的或不足之处,可在下方留言或私信探讨,互相学习,谢谢!

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值