Javaweb项目经验(一)

一、用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

注意:provided类似这样的标签不要乱加,一般项目找不到包或包冲突,都是这个标签的原因。

 

三、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继续加工;或者不想处理了,用重定向直接跳转到其他页面。

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(jdbc,java)