1.servlet技术:
•需求: 访问一个地址,通过java语言返回该地址对应的网页
请求: http://服务器的IP地址:tomcat端口号/项目工程名/访问路径
响应: java通过流反回的html代码
Get请求: doget方法接收请求
地址栏改变 通过脚本动作打开的页面 表单get请求
理论上最多传递255个字节, 传递中文时易出现乱码
速度快 安全性不高
Post请求: dopost方法接收请求
表单post请求
理论上传递数据无上限
安全性高
编码方式: utf-8 中文字符集
Gbk 中文字符集
Gb2312 中文字符集
ISO8859-1 不支持中文的字符集
使用servlet开发动态网页技术:
1.创建类继承httpservlet
2.重写doget或dopost方法
3.在web.xml中注册自定创建的类(将地址栏访问信息和java类关联)
Xml文件的构成:
1.头文件
2.约束文件
3.功能标记
一个类对应一个访问地址
<servlet>
<servlet-name>自定义名字</servlet-name>
<servlet-class>类路径(包名.类名)</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>自定义名字</servlet-name>
<url-pattern>从根目录开始的相对路径</url-pattern>
</servlet-mapping>
访问过程:
1.地址栏访问 http://localhost:8088/testServlet/s
2.关联到web.xml中的url-pattern标记
3.关联到web.xml中的servlet-class标记
4.关联到相关的类
5.根据请求方式执行doget或者dopost方法
客户端发送数据到服务器上方法:
转发:让页面跳转,服务端跳转,不会将跳转后的路径显示在地址栏上,安全
request.getRequestDispatcher("index.jsp?a=1&b=2").forward(request, response);
重定向:让页面跳转,客户端跳转,会将跳转后的路径显示在地址栏上,不安全
response.sendRedirect("http://localhost:8088/testServlet/index.jsp?a=1&b=2");
Servlet的生命周期-----受服务器调动支配
1.在客户端第一次访问该servlet时,服务器调用了 servlet的构造方法
2.再调用init方法初始化该servlet
3.然后调用doget或dopost来实现功能(反复调用)
4.当服务器停止工作时,该servlet被销毁 destroy方法
Servlet是接收请求和返回响应功能的java类
Servlet容器能够运行servlet类的容器(服务器tomcat)
•需求:模拟客户端网页---- 注册用户
1
1 User类 2 3 package factory; 4 5 public class User { //标准的javaBean 6 7 8 private String id; //主键自增 9 private String name; 10 private String psw; 11 12 13 public String getId() { 14 return id; 15 } 16 public void setId(String id) { 17 this.id = id; 18 } 19 public String getName() { 20 return name; 21 } 22 public void setName(String name) { 23 this.name = name; 24 } 25 public String getPsw() { 26 return psw; 27 } 28 public void setPsw(String psw) { 29 this.psw = psw; 30 } 31 public User(String name, String psw) { 32 33 this.name = name; 34 this.psw = psw; 35 } 36 public User() { 37 38 } 39 40 }
2
1 CRUD 接口 2 3 package factory; 4 5 import java.util.List; 6 7 public interface CRUD { //用户管理 8 9 // 增加 10 public int addUser(User u); 11 12 //修改 13 public int updateUser(String id); 14 15 //删除 16 public int deleteUser(String id); 17 18 //查询 19 public List getUser(); 20 21 22 }
3
1 UserCRUD实现类 2 3 package factory; 4 5 import java.sql.Connection; 6 import java.sql.PreparedStatement; 7 import java.sql.SQLException; 8 import java.util.List; 9 10 public class UserCRUD implements CRUD { 11 12 13 public int addUser(User u) { 14 int x=0; 15 DB db=new DB(); 16 Connection con=db.getCon(); 17 String sql="insert into usercrud values(?,?,?)"; 18 try { 19 PreparedStatement pst=con.prepareStatement(sql); 20 pst.setString(1, "1"); 21 pst.setString(2, u.getName()); 22 pst.setString(3, u.getPsw()); 23 x=pst.executeUpdate(); 24 } catch (SQLException e) { 25 // TODO Auto-generated catch block 26 e.printStackTrace(); 27 }finally{ 28 29 db.conClose(); 30 } 31 32 return x; 33 } 34 35 36 public int deleteUser(String id) { 37 // TODO Auto-generated method stub 38 return 0; 39 } 40 41 42 public List getUser() { 43 // TODO Auto-generated method stub 44 return null; 45 } 46 47 48 public int updateUser(String id) { 49 // TODO Auto-generated method stub 50 return 0; 51 } 52 53 }
4
1 DB类 2 3 package factory; 4 5 import java.sql.Connection; 6 import java.sql.DriverManager; 7 import java.sql.SQLException; 8 9 public class DB { //负责数据库的连接和关闭 10 11 Connection con; 12 //连接 13 14 public Connection getCon(){ 15 try { 16 Class.forName("oracle.jdbc.driver.OracleDriver"); 17 con = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:XE","lihengyu","lihengyu"); 18 System.out.println("数据库已连接"); 19 20 } catch (ClassNotFoundException e) { 21 // TODO Auto-generated catch block 22 e.printStackTrace(); 23 } catch (SQLException e) { 24 // TODO Auto-generated catch block 25 e.printStackTrace(); 26 }finally{ 27 28 return con; 29 } 30 31 } 32 33 //关闭 34 public void conClose(){ 35 try { 36 con.close(); 37 } catch (SQLException e) { 38 // TODO Auto-generated catch block 39 e.printStackTrace(); 40 } 41 42 } 43 44 }
5
1 UserFactory工厂类 2 3 package factory; 4 5 public class UserFactory { 6 7 //生产产品---生产具有产品共性的某个具体产品 8 public static CRUD getCRUD(){ 9 10 //CRUD c1=new UserCRUD(); //向上转型 11 //return c1; 12 return new UserCRUD(); 13 14 } 15 16 }
6
1 主方法中模拟客户端网页----注册用户 2 3 package factory; 4 5 public class Main { 6 7 public static void main(String[] args) { 8 //模拟用户在表单中填写用户名和密码 9 User user=new User(); 10 user.setName("Pioneer.HengYu"); 11 user.setPsw("123"); 12 13 //将生成的用户对象存入数据库中 14 UserFactory.getCRUD().addUser(user); 15 16 System.out.println("用户注册成功"); 17 18 } 19 20 }
7
1 UserServlet要继承HttpServlet 2 3 package factory; 4 5 import java.io.IOException; 6 7 import javax.servlet.ServletException; 8 import javax.servlet.http.HttpServlet; 9 import javax.servlet.http.HttpServletRequest; 10 import javax.servlet.http.HttpServletResponse; 11 12 public class UserServlet extends HttpServlet { 13 14 // 承上启下: 接收用户名和密码 调用工厂模式 15 public void doPost(HttpServletRequest request, HttpServletResponse response) 16 throws ServletException, IOException { 17 // 设置字符集 18 request.setCharacterEncoding("utf-8"); 19 response.setContentType("text/html;charset=utf-8"); 20 // 接收用户名和密码 21 String name = request.getParameter("name"); 22 String psw = request.getParameter("psw"); 23 // 将接收的变量封装到对象中 24 User u = new User(name, psw); 25 // 调用工厂 26 int x = UserFactory.getCRUD().addUser(u); 27 // 页面的响应 --跳转到不同页面 28 if (x > 0) { 29 request.getRequestDispatcher("success.html").forward(request, 30 response); 31 } else { 32 response.sendRedirect("fail.html"); 33 } 34 } 35 36 public void doGet(HttpServletRequest request, HttpServletResponse response) 37 throws ServletException, IOException { 38 this.doPost(request, response); 39 } 40 }