javaWeb项目技术
实施java 的web项目需要掌握的技术如下:
1.java语言
2. 面向对象分析设计
- XML 语言
- 网页脚本语言
- 数据库
- 应用服务器
- 集成开发环境
.java语言:JSP、Servlet、JDBC、javaBean(Application)从这四部分开始创建web项目。
(一)java Database Connectivity(JBDC)技术
它是一种执行SQL语句的java API,由一组用java编程语言编写的类与接口组成,为开发人员提供了一个标准的API。
作用:1.与数据库建立连接
2.发送SQL语句
3.处理结果。
API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。API与系统调用的区别:系统调用代码都处于内核态,API是操作系统提供的一组函数,通常以库的形式存在,供用户调用。
(二)Servlet技术
Servlet是运行在服务器端的程序,可以认为是服务器端的applet,它被web服务器(Tomcat)加载和执行,然后从客户端接收该请求,执行某种操作,然后返回结果。
(三)JavaServer Pages(JSP)技术
从Servlet分离而来,简化了开发,加强界面设计。JSP容器收到客户端发出的请求时,首先执行其中的程序片段,然后将执行结果以HTML格式响应给客户端。程序片段可以是:操作数据库,重新定向网页。所有程序操作都在服务器端执行,网络上传送给客服端的仅是得到的结果,与客户端的浏览器无关。
JSP技术将许多功能封装起来,成为自定义标签,根据XML的标准制订,可以直接供开发人员使用。
(四)JavaBean应用组件技术
提供常用功能可以重复使用,可以让开发人员将某些功能和核心算法提取出来封装成为一个组件对象,这样就增加了代码的重用率和系统的安全性。
2. 面向对象分析设计思想
在分析项目业务关系的时候,应用一些UML图,例如用例图、类图、时序图等,这样可以尽快找出业务逻辑主要面对的对象,然后对每个对象进行行为划分,最后再实现对象间的集成通信。
3 .设计模式和框架结构
如果要是设计一个良好的框架结构,就需要在Java项目实施过程,
有一个设计模式,它决定着项目的应用、部署和实际开发设计。在普通的web项目中很多采用两层的开发结构,JSP+Servlet 或JSP+JavaBean。它能分有效的分离逻辑开发,使开发人员能专注于各自的开发,也可以使整个开发结构流程更清晰。
4. XML 语言
在服务器和设计模式结构中会应用到自定义文件,而且在应用高级设计时会定义自用的标签,现在流行的是用XML去定义配置,简化了数据交换、进程间消息交换这一类的事情,XML的应用大致分为三类:1.间单数据的表示和交换 2.用户界面相关、表示相关的上下文 3.面向消息的计算
5 .网页脚本语言
为了提高web项目的整体性能,提高人机交互的友好界面,网页的脚本语言就会起到一定作用。网页脚本语言的执行都是客户端执行的,速度很快,大多数操作与服务器无交互运算。
JavaScript是一种基于对象和事件驱动并具有安全性能的脚本语言。使用它的目的是与HTML超文本标记语言、Java脚本语言一起实现在一个web页面中链接多个对象,与web客户交互作用。它通过嵌入或调入在标准的HTML语言中实现。它是在程序运行过程中逐行解释。
6. 数据库
数据库(Database)是按照 数据结构来组织、 存储和管理数据的仓库
7. 应用服务器
在应用方面,web服务器主要是针对于配置和部署,对目录的配置,调试,对配置文件属性的修改;对访问权限和并发性的控制;java类的部署。
8. 集成开发环境
好的配置环境对项目的帮助也是如虎添翼的。 (这部分来源于网络)
javaWeb简单登录页面
1.程序配置的目录
2.链接数据库
1 package com.jaovo.msg.Util; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.PreparedStatement; 6 import java.sql.ResultSet; 7 import java.sql.SQLException; 8 9 public class DBUtil { 10 11 public static Connection getConnection() { 12 try { 13 //1 加载驱动 14 Class.forName("com.mysql.jdbc.Driver").newInstance(); 15 } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) { 16 // TODO Auto-generated catch block 17 e.printStackTrace(); 18 } 19 String user = "root"; 20 String password = "root"; 21 String url = "jdbc:mysql://localhost:3306/jaovo_msg"; 22 Connection connection = null; 23 try { 24 //2 创建链接对象connection 25 connection = DriverManager.getConnection(url,user,password); 26 } catch (SQLException e) { 27 // TODO Auto-generated catch block 28 e.printStackTrace(); 29 } 30 return connection; 31 } 32 33 //关闭资源的方法 34 public static void close(Connection connection ) { 35 try { 36 if (connection != null) { 37 connection.close(); 38 } 39 40 } catch (SQLException e) { 41 // TODO Auto-generated catch block 42 e.printStackTrace(); 43 } 44 } 45 public static void close(PreparedStatement preparedStatement ) { 46 try { 47 if (preparedStatement != null) { 48 preparedStatement.close(); 49 } 50 51 } catch (SQLException e) { 52 // TODO Auto-generated catch block 53 e.printStackTrace(); 54 } 55 } 56 public static void close(ResultSet resultSet ) { 57 try { 58 if (resultSet != null) { 59 resultSet.close(); 60 } 61 62 } catch (SQLException e) { 63 // TODO Auto-generated catch block 64 e.printStackTrace(); 65 } 66 } 67 68 }
错误总结:(1)原来不知道url语句的参数含义,所以直接复制了老师原来写的uml值,导致很长时间连接不上数据库。
url="jdbc:数据库://端口名/即将连接的database"
(2)DriverManager.getConnection(url,"数据库登录名","密码")。
(3)连接数据库步骤
1.导入java.sql包
import java.sql.*;
2.加载数据库的连接地址,用户名和密码。
Class.forName("com.mysql.jdbc.Driver") ;
3.定义数据库的链接地址,用户名和密码。
String user = "root";
String password = "root";
String url = "jdbc:mysql://localhost:3307/jaovo_msg";
4.得到与数据库的连接对象。
connection = DriverManager.getConnection(url,user,password);
5.声明sql语句。
String sql = "select * from user2 ";
6.得到语句对象。
preparedStatement = connection.prepareStatement(sql);
7.执行Sql语句。
resultSet = preparedStatement.executeQuery();
8.处理Sql语句的返回语句。
while(resultSet.next()) {
user = new User();
user.setName(resultSet.getString("user"));
user.setPassword(resultSet.getString("password"));
users.add(user);
}
9.关闭对象
DBUtil.close(resultSet);
DBUtil.close(preparedStatement);
DBUtil.close(connection);
3.登录用户类
1 package com.jaovo.msg.model; 2 3 public class User { 4 private int id; 5 private String username; 6 private String nickname; 7 private String password; 8 public int getId() { 9 return id; 10 } 11 public void setId(int id) { 12 this.id = id; 13 } 14 public String getUsername() { 15 return username; 16 } 17 public void setUsername(String username) { 18 this.username = username; 19 } 20 public String getNickname() { 21 return nickname; 22 } 23 public void setNickname(String nickname) { 24 this.nickname = nickname; 25 } 26 public String getPassword() { 27 return password; 28 } 29 public void setPassword(String password) { 30 this.password = password; 31 } 32 33 }
由于这只是做一个简单的用户登录页面,所以只用填入登录名和密码。所以用户类中只有name和password.
4.程序功能方法的接口。
1 package com.jaovo.msg.dao; 2 import com.jaovo.msg.model.User; 3 import java.util.List; 4 public interface IUserDao { 5 public void add(User user); 6 public void delete(int id); 7 public void update(User user); 8 public User load(int id); 9 public User load(String username); 10 public List<User> load(); 11 }
5.实现功能方法的类。
1 package com.jaovo.msg.dao; 2 3 import java.sql.Connection; 4 import java.sql.PreparedStatement; 5 import java.sql.ResultSet; 6 import java.sql.SQLException; 7 import java.util.ArrayList; 8 import java.util.List; 9 10 11 import com.jaovo.msg.Util.DBUtil; 12 import com.jaovo.msg.Util.UserException; 13 import com.jaovo.msg.model.User; 14 15 import sun.net.www.content.text.plain; 16 17 public class UserDaoImpl implements IUserDao { 18 19 @Override 20 public void add(User user) { 21 //获得链接对象 22 System.out.println("bbbbbbbbbaaaaaa"+user); 23 Connection connection = DBUtil.getConnection(); 24 //准备sql语句 25 String sql = "select count(*) from t_user where username = ?"; 26 //创建语句传输对象 27 PreparedStatement preparedStatement = null; 28 ResultSet resultSet = null; 29 try { 30 preparedStatement = connection.prepareStatement(sql); 31 preparedStatement.setString(1, user.getUsername()); 32 //接收结果集 33 resultSet = preparedStatement.executeQuery(); 34 //遍历结果集 35 while(resultSet.next()) { 36 if (resultSet.getInt(1) > 0) { 37 throw new UserException("用户已存在") ; 38 } 39 } 40 41 sql = "insert into t_user(username,password,nickname) value (?,?,?)"; 42 preparedStatement = connection.prepareStatement(sql); 43 preparedStatement.setString(1, user.getUsername()); 44 preparedStatement.setString(2, user.getPassword()); 45 preparedStatement.setString(3, user.getNickname()); 46 preparedStatement.executeUpdate(); 47 } catch (SQLException e) { 48 // TODO Auto-generated catch block 49 e.printStackTrace(); 50 }finally { 51 //关闭资源 52 DBUtil.close(resultSet); 53 DBUtil.close(preparedStatement); 54 DBUtil.close(connection); 55 } 56 57 } 58 59 @Override 60 public void delete(int id) { 61 Connection connection = DBUtil.getConnection(); 62 String sql = "delete from t_user where id = ?"; 63 PreparedStatement preparedStatement = null; 64 65 try { 66 preparedStatement = connection.prepareStatement(sql); 67 preparedStatement.setInt(1, id); 68 preparedStatement.executeUpdate(); 69 } catch (SQLException e) { 70 // TODO Auto-generated catch block 71 e.printStackTrace(); 72 }finally { 73 DBUtil.close(preparedStatement); 74 DBUtil.close(connection); 75 } 76 77 } 78 79 @Override 80 public void update(User user) { 81 Connection connection = DBUtil.getConnection(); 82 //准备sql语句 83 String sql = "update t_user set password = ? , nickname=? where id = ?"; 84 //创建语句传输对象 85 PreparedStatement preparedStatement = null; 86 try { 87 preparedStatement = connection.prepareStatement(sql); 88 preparedStatement.setString(1, user.getPassword()); 89 preparedStatement.setString(2, user.getNickname()); 90 preparedStatement.setInt(3, user.getId()); 91 preparedStatement.executeUpdate(); 92 } catch (SQLException e) { 93 // TODO Auto-generated catch block 94 e.printStackTrace(); 95 }finally { 96 DBUtil.close(preparedStatement); 97 DBUtil.close(connection); 98 } 99 } 100 101 @Override 102 public User load(int id) { 103 Connection connection = DBUtil.getConnection(); 104 //准备sql语句 105 String sql = "select * from t_user where id = ?"; 106 //创建语句传输对象 107 PreparedStatement preparedStatement = null; 108 ResultSet resultSet = null; 109 User user = null; 110 try { 111 preparedStatement = connection.prepareStatement(sql); 112 preparedStatement.setInt(1, id); 113 resultSet = preparedStatement.executeQuery(); 114 while(resultSet.next()) { 115 user = new User(); 116 user.setId(id); 117 user.setUsername(resultSet.getString("username")); 118 user.setPassword(resultSet.getString("password")); 119 user.setNickname(resultSet.getString("nickname")); 120 } 121 } catch (SQLException e) { 122 // TODO Auto-generated catch block 123 e.printStackTrace(); 124 }finally { 125 DBUtil.close(resultSet); 126 DBUtil.close(preparedStatement); 127 DBUtil.close(connection); 128 } 129 return user; 130 } 131 132 @Override 133 public User load(String username) { 134 // TODO Auto-generated method stub 135 return null; 136 } 137 138 @Override 139 public List<User> load() { 140 Connection connection = DBUtil.getConnection(); 141 //准备sql语句 142 String sql = "select * from user2"; 143 //创建语句传输对象 144 PreparedStatement preparedStatement = null; 145 ResultSet resultSet = null; 146 //集合中只能放入user对象 147 List<User> users = new ArrayList<User>(); 148 User user = null; 149 try { 150 preparedStatement = connection.prepareStatement(sql); 151 resultSet = preparedStatement.executeQuery(); 152 while(resultSet.next()) { 153 user = new User(); 154 user.setId(resultSet.getInt("id")); 155 user.setUsername(resultSet.getString("username")); 156 user.setPassword(resultSet.getString("password")); 157 user.setNickname(resultSet.getString("nickname")); 158 users.add(user); 159 } 160 } catch (SQLException e) { 161 // TODO Auto-generated catch block 162 e.printStackTrace(); 163 }finally { 164 DBUtil.close(resultSet); 165 DBUtil.close(preparedStatement); 166 DBUtil.close(connection); 167 } 168 return users; 169 } 170 171 }
6.用户登录界面
1 <%@page import="com.jaovo.msg.Util.UserException"%>
2 <%@page import="com.jaovo.msg.dao.UserDaoImpl"%>
3 <%@page import="com.jaovo.msg.model.User"%>
4 <%@ page language="java" contentType="text/html; charset=UTF-8"
5 pageEncoding="UTF-8"%>
6 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
7 <html>
8 <%
9 //接收客户端传递过来的参数
10 String username = request.getParameter("username");
11 String password = request.getParameter("password");
12 String nickname = request.getParameter("nickname");
13 if(username == null || "".equals(username.trim())){
14 request.setAttribute("error", "用户名不能为空");
15 }
16 %>
17 <jsp:forward page="addInput.jsp"></jsp:forward>
18 <%
19
20 System.out.println("222222"+username);
21 User user = new User();
22 user.setUsername(username);
23 user.setPassword(password);
24 user.setNickname(nickname);
25
26 UserDaoImpl userDao = new UserDaoImpl();
27 System.out.println("aabbccdd"+user.getUsername());
28 try{
29 userDao.add(user);
30 %>
31
32
33 用户保存成功!!<br>
34 <a href="addInput.jsp">继续添加</a><br>
35 <a href="#">用户列表</a>
36 <%
37 }catch(UserException e){
38 %>
39 <h2 style="color:red ; font-size:50px">发生错误 : <%=e.getMessage() %></h2>
40 <%
41 }
42 %>
43 </html>
44 <%@ page language="java" contentType="text/html; charset=UTF-8"
45 pageEncoding="UTF-8"%>
46 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
47 <html>
48 <head>
49 <title>用户添加页面</title>
50 </head>
51 <body>
52 <%=request.getAttribute("error") %>
53 <form action="add.jsp" method="get">
54 <table align="center" border="1" width="500">
55 <tr>
56 <td>用户名称 : </td>
57 <td>
58 <input type="text" name="username" />
59 </td>
60 </tr>
61 <tr>
62 <td>用户密码:</td>
63 <td>
64 <input type="password" name="password" />
65 </td>
66 </tr>
67 <tr>
68 <td>用户昵称:</td>
69 <td>
70 <input type="text" name="nickname" />
71 </td>
72 </tr>
73 <tr align="center">
74 <td colspan="2">
75 <input type="submit" value="提交" />
76 <input type="reset" value="重置" />
77 </td>
78 </tr>
79 </table>
80 </form>
81 </body>
82 </html>
错误总结: (1)因为之前jsp的基本语法知识掌握较少,所以编写的登录界面较简单。实现登录界面的jsp文件的名为doLogin.jsp,但由于之前 <form >标签中一直写成dologin.jsp,所以一直不能呈贡跳转页面。
7.实现用户登录。
1 <%@page import="com.jaovo.msg.dao.UserDaoImpl" %> 2 <%@page import="com.jaovo.msg.model.User" %> 3 <%@page import="java.util.List"%> 4 <%@ page language="java" contentType="text/html; charset=UTF-8" 5 pageEncoding="UTF-8"%> 6 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 7 <html> 8 9 <% 10 //接收客户端传递过来的参数 11 String username = request.getParameter("username"); 12 String password = request.getParameter("password"); 13 UserDaoImpl a=new UserDaoImpl(); 14 15 User user=a.load(username); 16 String password1=user.getPassword();//登录窗口传递过来的密码与数据库中查询到的密码相比较 17 if(password.equals(password1)){ 18 out.println("登录成功"); 19 } 20 else 21 out.println("输入密码或登录名有错!"); 22 23 24 %> 25 26 </html>
错误分析:在这个文件中要调用其他文件中的内容,由于其他文件中的错误很多,所以在登录界面跳转之后,总是会报这个文件中语句的错误。
结果截图:
通过这次学习发现做一个简单的JavaWeb登录界面就很吃力,中间遇到了很多的问题,也有编译上的错误,也有很多借鉴百度上的东西,但是虽然到最后完成了,但是还是花了很大的时间,还不符合一个真正编程者,以后需要大量的锻炼和思考,以后要更加耐得住寂寞,好好学习。只有耐得中寂寞,方可看的到繁华