一、用idea创建maven项目
首先,打开idea,点击“create new project“,在左边一栏找到maven,右边把“create from archetype“钩上,根据模版来创建项目,注意在选择模版的时候一定要选择org.apache.maven.archetype下的webapp项目。
第二步,在groupid输入com.csdn,即GroupId一般分为多个段,一般第一段为域,第二段为公司名称。artifactid里输入StudentInfoManage,即ArtifactId一般为项目名。
第三步,选择你自己配置的maven的settings.xml和respository,如果你的本地仓库是在C:\Users\Dell\.m2这个默认位置,那就不用改了
第四步,选择项目文件夹,一般默认就行,注意把路径的 // 的改成 / ,虽然都没错,但看着舒服
第五步,等idea加载模版和maven本地仓库,电脑差的话,差不多要5分钟
第六步,配置jboss/tomcat服务器,首先要在project structure中的Artifacts和Modules上把项目先添加进去(绿色小加号),一定要添加成explored开发形式https://blog.csdn.net/small_mouse0/article/details/77506060,然后在工具栏绿色三角按钮旁边,点开下拉菜单,选择edit configuration,然后绿色小加号添加服务器,我用的是jboss local,也可以选别的,然后在服务器标签选择deployment,在里边用绿色小加号,添加项目war包explored形式。
第七步,在目录src\main创建两个文件夹java和resources,然后用ctrl+shift+ctrl+s快捷键打开project structure(也可以在工具栏打开,位置就在小扳手的旁边),Modules→点击项目文件→分别选择java和resources文件夹,分别Mark As成Sources和Resources。
也可以直接在java和resources文件夹上右键,选择mark directory as,选择Sources Root和Resources Root。
第八步,在刚才建的java文件夹的基础上疯狂建包,\src\main\java\com\csdn\StudentInfoManage\dao\,
\src\main\java\com\csdn\StudentInfoManage\util\ 等等,想用啥建啥,\src\main\java\com\csdn\StudentInfoManage\这个包路径是必须有的,是规范,跟在后边的组件包也是必须的,util,dao,model等等随便建
第九步,修改C:\Users\Dell\.m2\settings.xml,使用阿里云的镜像仓库,比中央仓库快一万倍。web.xml添加完依赖,在项目文件上右键选择maven,选择reimport。
大功告成,可以开始敲代码了!!!!!!!!!!!!!!
二、Maven
必备:junit,commons-logging
servlt:servlet,jstl,taglib
dbcp:mysql-connector-java,dbcp2,pool2
工具类:jodatime,Apache的commons-lang3和commons-collections4,fastjson
log4j:slf4j-api,log4j-api,log4j-core,log4j-slf4j-impl,log4j-jcl
注意:
三、DBCP
dbcputil工具类的写法:
public class DBCPUtil {
private static DataSource ds;//定义一个连接池对象
static{
try {
Properties pro = new Properties();
pro.load(DBCPUtil.class.getClassLoader().getResourceAsStream("dbcp.properties"));
ds = BasicDataSourceFactory.createDataSource(pro);//得到一个连接池对象
} catch (Exception e) {
throw new ExceptionInInitializerError("初始化连接错误,请检查配置文件!");
}
}
//从池中获取一个连接
public static Connection getConn() throws SQLException {
return ds.getConnection();
}
public static void close(ResultSet rs, Statement stmt, Connection conn){
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(stmt!=null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn!=null){
try {
conn.close();//关闭
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
直接复制上去用就行,不知道为什么,数据库连接池只能写成静态工具类形式,用百度上那些非静态形式的DBCPUtils会出现一堆莫名其妙的错误,比如提交sql语句,还没提交,连接就断开,导致返回的结果正确,但数据库没有变化,只有用commit方法数据库才会发生变化,不用的话,数据库就相当于无限回滚。
StringBuffer sb=new StringBuffer("select * from t_student s,t_grade g where s.gradeId=g.id");
if(StringUtils.isNotEmpty(student.getStuNo())){
sb.append(" and s.stuNo like '%"+student.getStuNo()+"%'");
}
JDBC用Stringbuffer和if语句模拟mybatis里的动态sql语句。
JSONArray jsonArray=new JSONArray();
Connection connection=DBCPUtil.getConn();
StringBuffer sb=new StringBuffer("select * from t_student s,t_grade g where s.gradeId=g.id");
if(StringUtils.isNotEmpty(student.getStuNo())){
sb.append(" and s.stuNo like '%"+student.getStuNo()+"%'");
}
if(StringUtils.isNotEmpty(student.getStuName())){
sb.append(" and s.stuName like '%"+student.getStuName()+"%'");
}
if(StringUtils.isNotEmpty(student.getSex())){
sb.append(" and s.sex ='"+student.getSex()+"'");
}
if(student.getGradeId()!=-1){
sb.append(" and s.gradeId ='"+student.getGradeId()+"'");
}
if(StringUtils.isNotEmpty(bbirthday)){
sb.append(" and TO_DAYS(s.birthday)>=TO_DAYS('"+bbirthday+"')");
}
if(StringUtils.isNotEmpty(ebirthday)){
sb.append(" and TO_DAYS(s.birthday)<=TO_DAYS('"+ebirthday+"')");
}
if(pageBean!=null){
sb.append(" limit "+pageBean.getStart()+","+pageBean.getRows());
}
System.out.println(sb.toString());
PreparedStatement preparedStatement=connection.prepareStatement(sb.toString());
ResultSet resultSet= preparedStatement.executeQuery();
ResultSetMetaData resultSetMetaData=resultSet.getMetaData();
while (resultSet.next()){
JSONObject jsonObject=new JSONObject();
for (int i=1;i<=resultSetMetaData.getColumnCount();i++){
Object object=resultSet.getObject(i);
if (resultSetMetaData.getColumnTypeName(i).equalsIgnoreCase("DATE")){
DateTime dateTime=new DateTime(object);
jsonObject.put(resultSetMetaData.getColumnName(i), dateTime.toString("yyyy-MM-dd"));
}else {
jsonObject.put(resultSetMetaData.getColumnName(i),object);
}
}
jsonArray.add(jsonObject);
}
DBCPUtil.close(resultSet,preparedStatement,connection);
1. 正常的JDBC套路
Connection connection=DBCPUtil.getConn(); 建立连接
PreparedStatement preparedStatement=connection.prepareStatement(String); 建立SQL语句
ResultSet resultSet= preparedStatement.executeQuery(); 不同方式提交并执行SQL语句,返回ResultSet,boolean或int
ResultSetMetaData resultSetMetaData=resultSet.getMetaData(); 获取数据库表的元数据,即表的列名,列数据类型等
DBCPUtil.close(resultSet,preparedStatement,connection); 关闭连接,释放资源
2. ResultSet的使用
resultSet.next() 会遍历每一行
Object object=resultSet.getObject(i); 只能从ResultSet获取表数据,但列的下标都是从1开始。
四、Log4j
一定要在Resources目录下加个log4j2.xml,不然会报错!
五、Servlet
1 正常的Servlet套路
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
request.setAttribute("", "");
request.getRequestDispatcher("index.jsp").forward(request, response);
HttpSession session = request.getSession();
session.setAttribute("currentUser", currentUser);
response.sendRedirect("main.jsp");
}
1.首先是格式转码问题,很蛋疼,get,post等有不同的转码方法。
2.业务逻辑处理完之后,把数据塞到请求或响应中,用请求分发器发给jsp继续加工;或者不想处理了,用重定向直接跳转到其他页面。