IntelliJ IDEA 2016配置SpringMVC及简单开发


这里最好是用Download,试过Use library,觉得少些东西。如果下载不了。可以试试设置http proxy,选择auto-detect proxy settings。下载完成后,项目创建成功,需要配置Tomcat。点击右上角Edit Configurations,再点击+ Add New Configuration,选择Tomcat Server-Local,弹出对话框:


在新对话框中,点击Configure,点击+配置Tomcat路径。然后再点击右下角Fix或者Deployment的+添加Artifact。配置就完成了。点击运行,如果不成功,右键项目名,Open Module Settings,查看Problems,Fix即可。


我们可以在src中开发自己的主页,建个包名,再建个Java class:

package com.zhang.javaweb.controllers;

import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 

/**
 * Created by Administrator on 2016/1/8 0008.
 */
@Controller
public class MainController {

    @RequestMapping(value = "main.form", method = RequestMethod.GET)
    public String mainPage(ModelMap map, HttpServletRequest request, HttpServletResponse response) {

        map.addAttribute("title", "我的网站");

        return "main";
    }
}

同时在web/WEB-INFO/dispatcher-servlet.xml中配置:


base-package是包名,prefix的值是上文中返回的main页面所在的文件夹,suffix的值是main的后缀名,即返回的是web/pages/main.jsp。

在web/WEB-INFO/web.xml中,


由于这句话,我们的网页必须是以.form结尾,如iava文件中的@RequestMapping(value = "main.form", ...),网址是http://localhost:8080/main.form。不想以.form结尾,可以将*.form换成/,并在java文件开始@Controller下面加上@RequestMapping("/")。如果想将http://localhost:8080也换为自己的页面,只需删除web文件夹中的index.jsp,在java文件中:

@Controller
@RequestMapping("/")
public class HelloController {

    @RequestMapping(method = RequestMethod.GET)
    public String printWelcome(ModelMap map) {
        map.addAttribute("message", "Hello World");
        map.put("content", "This is my first spring mvc app");
        return "hello";
    }

}
hello.jsp在web/pages中,

<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2016/1/9 0009
  Time: 15:54
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" session="false" %>
<html>
<head>
    <title>${message}</title>
</head>
<body>
Hello IDEA Spring
 <h1>${message}</h1>

${content}
</body>
</html>
运行结果如下:



---------------------------------------------------------------------------------

路径参数:

请求参数写在路径中,实现伪静态。

//路径参数
@RequestMapping(value = "/page/{name}/{age}", method = RequestMethod.GET)
public String getName(ModelMap map, @PathVariable("name") String name, @PathVariable("age") int age) {

    map.addAttribute("name",name);
    map.addAttribute("age",age);
    return "name";
}
name.jsp

<%@ page contentType="text/html;charset=UTF-8"%>
<html>
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
 <div>
     名字:${name}<br>
     年龄:${age}
 </div>
</body>
</html>
在网址输入localhost:8080/page/xiaoming/20

显示如下:


----------------------------------------------------------------------------------------------------------------------------------------------

Url参数:

//URL参数
@RequestMapping(value = "/page",method = RequestMethod.GET)
public String result(ModelMap map, @RequestParam String name,@RequestParam int age){
    map.addAttribute("name",name);
    map.addAttribute("age",age);
    return "name";
}
和表单提交方式一样http://localhost:8080/page?name=xiao&age=20


我们可以用Html表单把数据传入,再建一个页面:

@RequestMapping(value = "/adduser",method = RequestMethod.GET)
    public String addUser(ModelMap map){
 

        return "add_user";
    }
add_user.jsp

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@page pageEncoding="utf-8" %>
<html>
<head>
    <meta charset="UTF-8">
    <title>添加用户</title>
</head>
<body>
<%--//HTML表单--%>
<form action="page" method="get">
    名字:<input type="text" name="name"><br>
    年龄:<input type="number" name="age"><br>
    <input type="submit">
</form>

</body>
</html>
表单中的method和Url的Metho方法要一致。



SpringMVC也为我们提供了表单,可以在创建时就为它提供一些默认值。

<%--//SpringMVC表单--%>
<form:form action="result" method="get" modelAttribute="user">
    名字:<form:input path="name"/><br>
    年龄:<form:input path="age"/><br>
    <input type="submit">
</form:form>
modeAttribute的属性是我们为其提供的值,这里是一个java bean:

public class User {

    private String name;
    private int age;

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
修改一下adduser页面:

@RequestMapping(value = "/adduser",method = RequestMethod.GET)
public String addUser(ModelMap map){

    User u = new User();
    u.setName("xiao");
    u.setAge(20);

    map.addAttribute("user",u);

    return "add_user";
}
打开http://localhost:8080/adduser,页面的input中就会有默认值存在。


---------------------------------------------------------------------------------------------------------------------

配置Hibernate:

用xampp模拟服务器,打开Apache和MySQL,在phpmyadmin中创建一个user数据库。点击IDEA右侧Database-+-Data Source - MySQL,在对话框填入Database、User、Password,成功后页面如下:


数据连接成功后配置Hibernate框架,右键项目-Add Frameworks Support 勾选Hibernate


点击OK:


OK之后会生成Entity实体:

 

import javax.persistence.*;

/**
 * Created by Administrator on 2016/1/10 0010.
 */
@Entity
@Table(name = "users", schema = "mydb", catalog = "")
public class UsersEntity {
    private long id;
    private String name;
    private byte age;

    @Id
    @Column(name = "id")
    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    @Basic
    @Column(name = "name")
    public String getName() {
        return name;
    }

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

    @Basic
    @Column(name = "age")
    public byte getAge() {
        return age;
    }

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

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        UsersEntity that = (UsersEntity) o;

        if (id != that.id) return false;
        if (age != that.age) return false;
        if (name != null ? !name.equals(that.name) : that.name != null) return false;

        return true;
    }

    @Override
    public int hashCode() {
        int result = (int) (id ^ (id >>> 32));
        result = 31 * result + (name != null ? name.hashCode() : 0);
        result = 31 * result + (int) age;
        return result;
    }
}
可能需要配置hibernate.cfg.xml,注意这个文件需要放在web/WEB-INFO/classes/里面。

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="connection.url">jdbc:mysql://localhost:3306/mydb</property>
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="connection.username">root</property>
        <property name="connection.password"></property>
        <mapping class="com.zhang.myjavaweb.db.entities.UsersEntity"/>
        <!-- DB schema will be updated if needed -->
        <!-- <property name="hbm2ddl.auto">update</property> -->
    </session-factory>
</hibernate-configuration>
org.hibernate.dialect.MySQLDialect可能没有,需要下载mysql-connector-java-5.1.38-bin.jar放在libs里面,并在项目添加一下。同时Hibernate为自动生成一个main java文件的数据库连接方法:

public class main {
    private static final SessionFactory ourSessionFactory;
    private static final ServiceRegistry serviceRegistry;

    static {
        try {
            Configuration configuration = new Configuration();
            configuration.configure();

            serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
            ourSessionFactory = configuration.buildSessionFactory(serviceRegistry);
        } catch (Throwable ex) {
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static Session getSession() throws HibernateException {
        return ourSessionFactory.openSession();
    }

//    public static void main(final String[] args) throws Exception {
//        final Session session = getSession();
//        try {
//            System.out.println("querying all the managed entities...");
//            final Map metadataMap = session.getSessionFactory().getAllClassMetadata();
//            for (Object key : metadataMap.keySet()) {
//                final ClassMetadata classMetadata = (ClassMetadata) metadataMap.get(key);
//                final String entityName = classMetadata.getEntityName();
//                final Query query = session.createQuery("from " + entityName);
//                System.out.println("executing: " + query.getQueryString());
//                for (Object o : query.list()) {
//                    System.out.println("  " + o);
//                }
//            }
//        } finally {
//            session.close();
//        }
//    }
}
下面注释的内容用不到,可以用来参考一下。为方便理解我将main修改为了DbConnection。

再在Controller里面建一个页面:

@RequestMapping(value = "users",method = RequestMethod.GET)
public String listUsers(ModelMap map){

    Session session = DbConnection.getSession();

    List<User> list = session.createCriteria(UsersEntity.class).addOrder(Order.asc("id")).list();//Order.asc("id")按照id的正序排列   Order.desc 反序
    map.addAttribute("users",list);

    session.close();

    return "users";
}
users.jsp如下:

<%@ page import="com.jikexueyuan.myjavawebfor14.db.entities.UsersEntity" %>
<%@ page import="java.util.List" %>
<%@page pageEncoding="utf-8" %>
<html>
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
<ol>
    <%for (UsersEntity e:(List<UsersEntity>)request.getAttribute("users")){%>
    <li>名字:<%out.print(e.getName());%>,年龄:<%out.print(e.getAge());%></li>
    <%}%>
</ol>

<a href="adduser">添加用户</a>
</body>
</html>
运行:


在此我添加了一个“添加用户”用来演示向数据库中加入数据,点击“添加用户”会跳转到adduser表单页面:

@RequestMapping(value = "/adduser",method = RequestMethod.GET)
public String addUser(ModelMap map){

    //可添加默认,也可不加
    User u = new User();
    u.setName("name");
    u.setAge(0);

    map.addAttribute("user",u);

    return "add_user";
}
add_user.jsp还是前面的表单

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@page pageEncoding="utf-8" %>
<html>
<head>
    <meta charset="UTF-8">
    <title>添加用户</title>
</head>
<body>
<%--//HTML表单--%>
<%--<form action="page" method="get">--%>
    <%--名字:<input type="text" name="name"><br>--%>
    <%--年龄:<input type="number" name="age"><br>--%>
    <%--<input type="submit">--%>
<%--</form>--%>

<%--//SpringMVC表单--%>
<form:form action="result" method="get" modelAttribute="user">
    名字:<form:input path="name"/><br>
    年龄:<form:input path="age"/><br>
    <input type="submit">
</form:form>

</body>
</html>
该表单将数据提交给result,我们在result中实现向数据库插入数据:

@RequestMapping(value = "/result",method = RequestMethod.GET)
public String result(ModelMap map, @RequestParam String name, @RequestParam int age, HttpServletRequest request, HttpServletResponse response){
    map.addAttribute("name",name);
    map.addAttribute("age",age);

    Session session = DbConnection.getSession();

    Transaction transaction = session.beginTransaction();

    UsersEntity ue = new UsersEntity();
    ue.setName(name);
    ue.setAge((byte) age);
    session.save(ue);

    transaction.commit();

    session.close();
    
    return "result";
}
result.jsp

<%@ page contentType="text/html;charset=UTF-8"%>
<html>
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
名字:${name}<br>
年龄:${age}

<%
response.sendRedirect("users");
%>
</body>
</html>
可以看到result页面直接跳转到了users页面,既不会显示result页面,只用于中间操作。

在http://localhost:8080/adduser页面添加用户,点击提交,会在http://localhost:8080/users页面看到新的users数据,同时查看phpmyadmin的数据库,也可看到加入了新数据。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值