十月份过的挺快的,这个月输入比较少,主要做了两件事情,一是刷了JavaScript 高级程序设计 五章 ;二是写了一个简单的JSP项目,实现了增删改查。庆幸的是这个月终于结课了,再也不用每天为了打卡而打卡而上课,一些课确实无聊,有的甚至以后用也不会上。我是喜欢留给自己大量的时间去做一件事情,并且没人打扰,这样才能静下心去学习。现在终于有大量的时间了,接下来的目标也很清晰了。
由于这学期课程学JSP,就不得不学这个了,这个在实际开发中应用的比较少了。至于为什么应用的少了,主要是因为它的开发方式有点落后了,前后端糅杂者一起写,在HTML中嵌入大量的Java代码,视图和业务逻辑不分离,以至后期项目不好维护。目前实际开发中采用的方式是 “ 前后分离”,前端只做渲染层, 后端只做接口服务 ,两者可同时进行开发,两者互不干扰,前端在做好页面的同时,可使用mock 创建假数据 模拟后端接口渲染。由于我是不喜欢听老师讲解,她讲课的时候,我总是干别的事情。下来自己研究去学习,看了书上的讲解,看了别人的写的源码就开始写 期末要 交的 JSP 小项目了,由于JSP 采用的JAVA 语言,Java 是 大一学习的,忘得差不多,一年没写java了,就这样踩坑的花了很多时间完成了。
下面我记录一下我学JSP遇到的坑:
开发环境
1.编译器: Eclipse
2.环 境: JSPStudy(一键配置环境tomcat,数据库) 学习时可采用,开发环境不建议使用
JSP(全称Java Server Pages)
1.定义
JSP 技术是以 Java 语言作为脚本语言的,JSP 网页为整个服务器端的 Java 库单元提供了一个接口来服务于HTTP的应用程序。
2. 如何创建一个 动态的JSP项目
3.关于JSP项目分层
实体类层 bean (对具体数据属性和方法的封装)
业务逻辑类层 server (具体业务的处理 java文件)
增删改查 DAO (对具体业务的增删改查封装)
数据库连接封装 DB (封装数据库的连接与关闭)
视图层 JSP (View 显示层)
#写代码时,可以按上面分层写,出现问题,可以很好定位,快速找到出错位置。
JSP小项目开始
第一步
创建分层在src目录下:
第二步
编写实体类,对数据属性和方法的封装(以便业务逻辑层和DAO层应用)
package com.bean;
public class Article {
private int id;
private String author;
private String title;
private String content;
private String articleID;
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getTitle() {
return title;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public String getArticleID() {
return articleID;
}
public void setArticleID(String articleID) {
this.articleID = articleID;
}
public void setContent(String content) {
this.content = content;
}
}
第三步
编写连接数据库文件 db.class
必须下载数据库依赖包并且放入Libraries目录的Web App Libraries目录下
下面是对数据库的简单封装:
package com.db;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DBConn {
static Connection conn = null;
//连接数据库,返回Connection conn;
public static Connection getConn () {
String driverClassName = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/article?useUnicode=true&characterEncoding=UTF-8";
String username = "root";
String password = "123456";
try {
Class.forName(driverClassName);
conn = DriverManager.getConnection(url, username, password);
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
}
第四步
开始编写DAO 层, 对具体表的 CURD操作封装
package com.dao;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import com.bean.Article;
import com.db.*;
import com.mysql.jdbc.PreparedStatement;
// 以上是用到的 依赖
public class ArticleDao {
private static Statement stat = null; // 声明sql
private static ResultSet rs = null; // 数据返回结果集
private static PreparedStatement ps = null; //动态SQL语句
private static String sql = null; //sql 语句
private static Connection conn = null; // 创建Connection 对象连接数据库
private static String info = null; // 提示信息
// 添加文章
public static String addArticle(Article art){
sql = "insert into book (author , title , content,userID) values (?,?,?,?)";
conn = new DBConn().getConn();
int i = 0;
try {
ps = (PreparedStatement) conn.prepareStatement(sql);
ps.setString(1,art.getAuthor());
ps.setString(2,art.getTitle());
ps.setString(3,art.getContent());
ps.setString(4,art.getArticleID());
i = ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (conn != null)
conn.close();
if (stat != null)
stat.close();
if (rs != null)
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(i == 1) {
info = "添加成功";
} else {
info = "添加失败";
}
return info;
}
// 获取所有文章
public static List<Article> getList() {
sql = " select * from book " ;
conn = new DBConn().getConn();
List< Article> list=new ArrayList< Article>();
try{
stat = conn.createStatement();
rs = stat.executeQuery(sql);
while(rs.next()){
Article atbean=new Article();
atbean.setTitle(rs.getString("title"));
atbean.setAuthor(rs.getString("author"));
atbean.setContent(rs.getString("content"));
list.add(atbean);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (conn != null)
conn.close();
if (stat != null)
stat.close();
if (rs != null)
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return list;
}
// 模糊查询
public static List<Article> fendDetails(String title){}
// 获取文章详情
public static List<Article> getDetails(int artID){}
// 删除文章
public static String deleteArticle(int id){}
第五步
编写业务层逻辑层
package com.server;
import java.util.List;
import com.bean.Article;
import com.dao.ArticleDao;
public class ArticleList {
private ArticleDao newArtcleDao;
// 获取所有文章
public List<Article> getList() {
return newArtcleDao.getList();
}
// 添加文章
public String addArticle(Article art) {
return newArtcleDao.addArticle( art);
}
// 模糊查询
public List<Article> fendDetails(String title){
return newArtcleDao.fendDetails(title);
}
// 获取详情页面
public List<Article> getDetails(String title){
return newArtcleDao.getDetails(title);
}
public String deleteArticle(int id) {
return newArtcleDao.deleteArticle(id);
}
}
第六步
编写视图层View
JSP页面必须引入以下格式,和需要的包
<%@ page language="java" import="java.util.* , com.action.* , com.bean.*, com.dao.*,com.serve.*" pageEncoding="UTF-8"%>
这块放主要的代码
首页:主要用来 显示从数据库拿到的所有文章数据显示出来
<div id="page-content" class="index-page">
<div id="container">
<!-- These are our grid blocks -->
<%
ArticleList newArt = new ArticleList();
List<Article> newList = newArt.getList();
for(int i = 0 ; i < newList.size(); i++){
Article contItem = newList.get(i);
%>
<div class="item">
<div class="content-item">
<h3 class="title-item"><a href="xiangqing.jsp?articleID=<%=contItem.getTitle()%>"><%=contItem.getTitle()%></a></h3>
</div>
</div>
<% }
%>
</div>
</div>
显示效果如下:
这样我们就实现了一个简单的JSP 小功能项目,其他功能依次类推,照猫画虎。JSP我就不做深究了,他还有其他的开发方式,servelet, EL 表达式和JSTL,采用前三者方式开发的优点:JSP页面不会大量的Java代码,而且是动态的插入值。
小结
JSP开发的方式按逻辑上和其它后台语言开发区别不大:
数据库的连接以及封装
编写接口服务时,先连接数据库,然后动态执行SQL语句,然后将结果集以JSON格式传递给前台
前台通过AJAX接受后台的接口,以及渲染数据填充页面
(这就是传统的 前后端 交互模式)
我会专门出一专栏来更新所学,精炼的总结出来。前端提升Js 水平是必须的,不能只能停留在会使用的层面上。
十月份,另我高兴的一件事情是,举行了一次 技术演技分享会, 那也是我第一次在大学中的演讲,讲出了自己的感悟,同学们热情也挺高。
半年多没有回家了,准备十一月初,回家里走几天,看看家人,然后在返回天津,继续努力。接下来目标也特别清晰,主要的事情是 准备 升本的事情,其余时间是继续提升技术水平,做项目来提高自己,备战明年的春招。
本文分享自微信公众号 - 前端自学社区(gh_ce69e7dba7b5)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
来源:oschina
链接:https://my.oschina.net/u/4974233/blog/4939813