学习笔记

IDEA使用与web案例

IDEA

IntelliJ IDEA 主要用于支持 Java、Scala、Groovy 等语言的开发工具,同时具备支持目前主流的技术和框架,擅长于企业级应用、移动应用和Web应用的开发。

强项:分布式,多模块开发(更适合Maven项目开发),强大的提示能力。

配置

字体大小

image-20200725133914833

代码补全

image-20200725133947256

去掉Match case勾,匹配大写/小写字母

自动导包

image-20200725134039665

Add unambiguous imports on the fly / Optimize imports on the fly 打钩

image-20200725134217973

快捷键

产生代码 [ Alt + Shift + s ]

计算机生成了可选文字: publicStudent()飞 public0《,;(int 1s“:d id, Stringname》

智能提示 [ Alt + enter ]

计算机生成了可选文字: newStudent0; ,NoIDEA0nn00000t0edtotheJDK1〖巛·

实现接口 [ Alt + Shift + p ]

查找类 [ Ctrl + Shift + t]

工程实例

传统 javaWeb工程

1. 配置tomcat

计算机生成了可选文字: ,ppe《n0&e《h《讼or Plugins 卜Version(On '№“u0缄眦@0尹涟nt ,BuildTools Re0怡」arRepor忙 Deployment Arquillian(0“0“、 卜Do“ 洳Execution.Deployment》ApplicationServers TomcatServer •unknom• OWarning:The“ctnot《home Tomcatba虻d戗t00; 0Tomcatbasedirectoryp引卜notspecified

2. 创建模块

image-20200725140227484

3. 配置

image-20200725140804076

4. 创建servlet

xml方式

计算机生成了可选文字: S0r0÷《0 <0亡一5。.。V过00。02过050rv过00</50VI@亡一Cass> <ser,'」et一巛0新ping丬 </s@rv」@t一0冒灧g>

5. jar包使用

建立目录(右键)

image-20200725141327771

image-20200725141337236

计算机生成了可选文字: CreateLib project刂“/ Project ModuleLibrary 全局库 工作空闫库 炔库〔一般i)

新复制进lib中的jar包后 需要重新引用lib文件

6. jdbc工具类

JdecUtils.java

public class JdbcUtils {
    //常量
    private static String DRIVER ;
    private static String URL ;
    private static String USERNAME ;
    private static String PWD ;

    static {
        // 1.读取Properties文件
        Properties props = new Properties();
        // 2.加载Properties文件
          // 获取properties文件的输入流
        InputStream is = JdbcUtils.class.getClassLoader().getResourceAsStream("jdbc.properties");
        try {
            props.load(is);
            //3.读取数据
            DRIVER = props.getProperty("jdbc.driver");
            URL = props.getProperty("jdbc.url");
            USERNAME = props.getProperty("jdbc.username");
            PWD = props.getProperty("jdbc.pwd");
        } catch (IOException e) {
            e.printStackTrace();
        }

        try {
            //4.加载驱动类
            Class.forName(DRIVER);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    //5.获取数据库连接
    public static Connection getConnection() {
        try {
            return DriverManager.getConnection(URL, USERNAME, PWD);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    //6.关闭资源
    public static void close(Connection conn, PreparedStatement pst, ResultSet rs) {
        try {
            if(rs != null) {
                rs.close();
            }
            if(pst != null) {
                pst.close();
            }
            if(conn != null) {
                conn.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
}   }   }

7. 数据库查询 (dao层)

UserDao.java

public class UserDao {

    //通过用户名查询用户列表
    public List<User> list(String username) {
        List<User> list = new ArrayList<>();

        // 1. 编写SQL
        String sql = "select * from t_user";

        // 若用户名不为null以及不是空串,就需要做查询; 否则就是查询所有
        if(username != null && !"".equals(username)) {
            // 此代码不执行,就没有where条件,也就没有查询
            sql += " where username like ?";
        }
        /**/System.out.println(sql);

        // 2. 获取数据库连接
        Connection conn = JdbcUtils.getConnection();

        // 3. 获取PreparedStatement
        PreparedStatement pst = null;
        ResultSet rs = null;
        try {
            pst = conn.prepareStatement(sql);
            // 4. 给占位符传递参数
            if(username != null && !"".equals(username)) {
                pst.setObject(1, "%" + username + "%");
            }

            // 5. 执行查询
            rs = pst.executeQuery();

            // 6. 处理数据
            while(rs.next()) {
                int id = rs.getInt("id");
                String name = rs.getString("name");
                int age = rs.getInt("age");
                String uname = rs.getString("username");
                String pwd = rs.getString("pwd");
                String sex = rs.getString("sex");

                User user = new User(id, name, age, sex, uname, pwd);
                list.add(user);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            // 7. 关闭资源
            JdbcUtils.close(conn, pst, rs);
        }
        return list;
}   }

8. service调用

IUserService.java

public interface IUserService {
    List<User> list(String username);
}

UserService.java

public class UserService implements IUserService {
    private UserDao userDao = new UserDao();

    @Override
    public List<User> list(String username) {
        return userDao.list(username);
    }
}

9. servlet调用

UserServlet.java

@WebServlet(name = "UserServlet", urlPatterns = "/list")
public class UserServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 接收参数
        String username = request.getParameter("username");

        // 调用Service 获取列表数据
        List<User> list = new UserService().list(username);
        // 将数据传递给JSP - 将数据放入请求域
        request.setAttribute("aaa", list);
        request.setAttribute("username", username);
        // 跳转到index.jsp两种方式:
        // 请求转发: 1次请求一次响应
        request.getRequestDispatcher("index.jsp").forward(request, response);
        // 重定向:重定向发了2次请求2次响应
        // response.sendRedirect("index.jsp");
    }
}

request 作用域: 从请求开始一直到结束

两次不同的请求,请求数据不是共享的

请求转发: 1次请求一次响应

重定向:重定向发了2次请求2次响应

计算机生成了可选文字: Name 」list 」index.jsp 302状态码要求再发 Status 2 Initiator 巧sp中的给浏览器 .个请求

10. jsp页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
  <head>
    <title>第一个应用页面</title>
  </head>
  <body>
    <h1>Hello Idea</h1>
    <form action="list" method="post">
      用户名: <input type="text" name="username" value="${username}">
      <button type="submit">查询</button>
    </form>
    <table border="1" cellpadding="5" cellspacing="0" width="90%">
      <tr>
        <td>编号</td>
        <td>姓名</td>
        <td>年龄</td>
        <td>性别</td>
        <td>用户名</td>
        <td>密码</td>
      </tr>
      <c:forEach items="${aaa}" var="item">
      <tr>
        <td>${item.id}</td>
        <td>${item.name}</td>
        <td>${item.age}</td>
        <td>${item.sex}</td>
        <td>${item.username}</td>
        <td>${item.pwd}</td>
      </tr>
      </c:forEach>
    </table>
  </body>
</html>

Tab补全:table>tr5>td6

’ >: 孩子 ‘


前者不能提交转发,后者可以

问题思考(引入)

基于MVC开发的javaweb项目存在的问题

1.从jar包角度

  1. 在WEB-INF/lib 下放第三方jar包;每个模块都需要添加各种相关jar包;很多项目中jar包重复,占据了很多空间,
  2. 第三方的jar包需要下载:一个项目中有成百上千的jar包,需要下载;费事费力。
  3. 第三方jar包之间事有依赖(关系)的:成败上千的jar包查找依赖比较繁琐
  4. 例:文件上传:Commons-upload 依赖于 Commons-io

2.从项目角度

  1. 分布式项目开发,讲一个项目分成多个子项目进行开发,多个项目之间进行交互
  2. 单项目无法满足高并发的情况,项目太大以后,难以做一些统筹规划
  3. 便于开发和部署

解决方式:引入Maven

Leave a Reply

邮箱地址不会被公开。 必填项已用*标注