美文网首页
新建项目

新建项目

作者: 林深雾雨 | 来源:发表于2019-11-07 18:06 被阅读0次

文章引用:https://www.jianshu.com/p/15364a360251
新建maven-web项目步骤:

选择maven-web模板 新建项目结构出现问题 上图有web-info是对的 但是在java Resources中没有 应该有的目录结构 解决办法:
在新建工程要文件目录缺失 需要buildpath 在项目上右键Build-Path
选中Missing的文件夹点击edit 点击下一步 添加* 有几个missing edit几次 新建的moven-web项目会报错 因为在web.xml文件中需要配置servlet web.xml文件中配置servlet spring-MVC-Maven项目中pom.xml文件中需要配置的jar包:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.wk</groupId>
    <artifactId>TestSpringMVC</artifactId>
    <packaging>war</packaging>
    <version>0.0.1-SNAPSHOT</version>
    <name>TestSpringMVC Maven Webapp</name>
    <url>http://maven.apache.org</url>
    <dependencies>

        <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-web -->
        <!-- web jar和相关依赖 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.2.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.58</version>
        </dependency>

    </dependencies>
    <build>
        <finalName>TestSpringMVC</finalName>
    </build>
</project>

在pom.xml引入Spring-webmvc jar包和依赖 处理器映射器 处理器适配器

新建项目的时候需要注意:web版本:

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_3_1.dtd" >
<!--只能改变web-app后面的版本号-->

处理器映射器:

如果在web.xml中<url-pattern>/</url-pattern> 如果为/表明 在jsp文件如果没有对应的Spring中的xml配置 会自动交给tomcat常规方式来找 但是html等其他类型的文件就不行了
可以web.xml中<url-pattern>/*</url-pattern> 表明所有类型的文件都需要在Spring的xml中必须要有对应的配置

有多个处理器映射器 同样也有多个处理器适配器 是一一对应的
(最常用的)注解式的处理器映射器和处理器适配器

三种返回值类型 String ModelAndView void

ModelAndView 和String是同步类型 form表单类型的
如果是返回String类型的 默认是请求转发 如果要使用重定向 要在代码的最后return "redirect:"; //是指返回String类型的字符串的名字
void是借助于ajax的返回值
处理器适配器中的依赖注入的参数(方法中可以传入的参数类型):
* Modal
* HttpServletRequest
* HttpSession
* ServletContext
* HttpResponse

在处理器适配器中需要注意的点:

/*
 * 非侵入式设计:代码和框架的耦合性比较低 不过分依赖框架 可以达到复用的目的
 * 
 * 
 */
@Controller
@RequestMapping("/test")
public class TestController {
    
//  @RequestMapping("/test")//这个不限接受请求类型  可以后面加限制类型  可以进行两级设置
    @RequestMapping(value="/test",method=RequestMethod.GET)
//  @GetMapping("test")//直接指定是接受get请求的
//  @PostMapping("test")//直接指定是接受post请求的
    
    public ModelAndView test() {
        List<Employee> list = new ArrayList<>();

        Employee e = new Employee();
        e.setEmpno(1);
        e.setEmpname("jack");
        e.setHiredate(new Date());

        Employee e2 = new Employee();
        e2.setEmpno(2);
        e2.setEmpname("james");
        e2.setHiredate(java.sql.Date.valueOf("1990-1-1"));

        list.add(e);
        list.add(e2);

        ModelAndView mav = new ModelAndView();
        mav.setViewName("index");
        mav.addObject("list", list);
        /**
         * 当返回值是ModalAndView的时候,跳转方式是:请求转发
         * 
         */

        return mav;
    }
    
    /*
     * 请求转发和重定向的区别
     * 请求转发是一次性的 前端页面向servet或者controller服务器端发送请求时 tomcat会自动生成doget dopost方法 
     *          服务器端会以jsp的形式 通过浏览器渲染成前端页面  jsp是服务器端语言 产生一次servlet 前端->servlet->jsp 
     * 重定向是两次 前端发送请求给服务器端 服务器发回前端  由前端来找到jsp 浏览器把jsp渲染成前端页面 产生两次servlet 前端->servlet->前端->jsp
     * 
     * 请求转发和重定向的用法:
     * 如果在servlet中有值进行传递 就用请求转发
     * 如果没有值传递 就用重定向
     */
    
    /*
     * 当返回值是String, 默认跳转方式是:请求转发 如果想用响应重定向 return redirect:
     * 
     * 可以依赖注入的参数(5个):
     *         Modal
     *         HttpServletRequest
     *         HttpSession
     *         ServletContext
     *         HttpResponse
     * 
     */
    //一下的方法的返回值是String
    @GetMapping("test2")
    public String test2(Model m) {
        List<Employee> list = new ArrayList<>();

        Employee e = new Employee();
        e.setEmpno(1);
        e.setEmpname("jack");
        e.setHiredate(new Date());

        Employee e2 = new Employee();
        e2.setEmpno(2);
        e2.setEmpname("james");
        e2.setHiredate(java.sql.Date.valueOf("1990-1-1"));

        list.add(e);
        list.add(e2);
        m.addAttribute("list", list);

        return "index";
    }
    @GetMapping("test3")
    public String test3(HttpServletRequest httpServletRequest) {
        //java1.7 转实运算符 
        List<Employee> list = new ArrayList<>();

        Employee e = new Employee();
        e.setEmpno(1);
        e.setEmpname("jack");
        e.setHiredate(new Date());

        Employee e2 = new Employee();
        e2.setEmpno(2);
        e2.setEmpname("james");
        e2.setHiredate(java.sql.Date.valueOf("1990-1-1"));

        list.add(e);
        list.add(e2);
        httpServletRequest.setAttribute("list", list);
        return "index";
    }
    
    //test4 是重定向
    @GetMapping("test4")
    public String test4(HttpSession session) {
        List<Employee> list = new ArrayList<>();

        Employee e = new Employee();
        e.setEmpno(1);
        e.setEmpname("jack");
        e.setHiredate(new Date());

        Employee e2 = new Employee();
        e2.setEmpno(2);
        e2.setEmpname("james");
        e2.setHiredate(java.sql.Date.valueOf("1990-1-1"));

        list.add(e);
        list.add(e2);
        session.setAttribute("list", list);
        //return "redirect:/WEB-INF/index.jsp";//请求重定向 redirect 不会自动添加前缀和后缀 还不能访问安全目录
        return "redirect:transfer";
    }
    
    @GetMapping("/transfer")
    public String transfer() {
        return "index";
    }
    
    
    /*
     * 对象{"empno":1,"empname":"feiyy","hiredate":"2019-11=07"}
     * 
     * 数组[{},{},{}]
     * 
     *   第三方工具:fastjson(阿里巴巴)
     *              gson(谷歌)
     *              jackson 
     * 
     */
    
    @GetMapping("/emps")
    public void getEmps(HttpServletResponse resp) {
        List<Employee> list = new ArrayList<>();

        Employee e = new Employee();
        e.setEmpno(1);
        e.setEmpname("jack");
        e.setHiredate(new Date());

        Employee e2 = new Employee();
        e2.setEmpno(2);
        e2.setEmpname("james");
        e2.setHiredate(java.sql.Date.valueOf("1990-1-1"));

        list.add(e);
        list.add(e2);
        //阿里巴巴的fastJSON
        String str=JSON.toJSONString(list);
        //通过rsponse对象将json字符串传回客户端
        try {
            resp.getWriter().append(str);
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        
    }

其中getEmps方法中fastJSON是以后会用到的api 可以将集合等数据转为字符串 传输给前端 由前端解析取值
JSON的特点:前后端分离的项目常用:一个数据库可以对应多个前端页面
JSON 是纯文本
JSON 具有“自我描述性”(人类可读)
JSON 具有层级结构(值中存在值)
JSON 可通过 JavaScript 进行解析
JSON 数据可使用 AJAX 进行传输
JSON数据类型:数组 字符串 布尔
AJAX请求:
第三方AJAX框架axios:http://www.axios-js.com/ 用来接收JSON发送过来的数据

参数绑定:

绑定单个值
绑定对象
绑定符合类型对象
日期类型绑定(spring不能给Date类型自动进行绑定)//需要自己定义日期转换器
数组绑定
集合绑定

相关文章

网友评论

      本文标题:新建项目

      本文链接:https://www.haomeiwen.com/subject/vxgybctx.html