1 ----.jsp2
3
4
5
6 ----.html7 username:
8 pwd :
name: bean的名称
property:JavaBean相对应的属性
value设置属性的值
param将property指定的属性名的值设置为一个请求参数的值
property="*"用来设置所有与所得到的参数同名的属性值
三 JSP开发模式1
JSP模式1主要采用JSP和JavaBean技术
将页面显示与业务逻辑处理分开
JSP负责页面的显示,而业务逻辑则由JavaBean处理
用户登录案例来说明JSP1开发模式:
UserBean.java
1 packagecom.cy.bean;2
3 importjava.io.Serializable;4
5
6
7 public class UserBean implementsSerializable {8 private static final long serialVersionUID = 1L;9
10 privateString name;11 privateString pwd;12
13 publicUserBean () {14 super();15 }16
17
18 publicString getName() {19 returnname;20 }21
22 public voidsetName(String name) {23 this.name =name;24 }25
26 publicString getPwd() {27 returnpwd;28 }29
30 public voidsetPwd(String pwd) {31 this.pwd =pwd;32 }33
34
35 }
login.html
1
2
3
4
login.html5
6
7
8
9
10
11
12
13
14
15
16 username:
17 pwd :
18
19
20
21
CheckUserBean.java
1 packagecom.cy.bean;2
3 importjava.sql.Connection;4 importjava.sql.DriverManager;5 importjava.sql.ResultSet;6 importjava.sql.SQLException;7 importjava.sql.Statement;8
9 public classCheckUserBean {10
11 public booleancheckUser(User user) {12
13 String name =user.getName();14 String pwd =user.getPwd();15 Connection conn = null;16 Statement st = null;17 ResultSet rs = null;18 String url = "jdbc:mysql://localhost:3306/demo";19 String user1 = "root";20 String password = "1234";21 String sql = "select * from t_user where user_name='" +name22 + "' and user_password='" + pwd + "'";23 try{24 Class.forName("com.mysql.jdbc.Driver");25 conn =DriverManager.getConnection(url, user1, password);26 st =conn.createStatement();27 rs =st.executeQuery(sql);28
29 if(rs.next()) {30 return true;31 }32 } catch(Exception e) {33 e.printStackTrace();34 } finally{35 try{36 rs.close();37 st.close();38 conn.close();39 } catch(SQLException e) {40 e.printStackTrace();41 }42 }43
44 return false;45
46 }47 }
CheckUser.jsp
1
2
3 Stringpath=request.getContextPath();4 StringbasePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";5 %>
6
7
8
9
10 ">
11
12
My JSP 'CheckUser.jsp' starting page13
14
15
16
17
18
19
22
23
24
25
26
27
28
29
30
31
32
33
34
35
success.jsp
1
2
3 Stringpath=request.getContextPath();4 StringbasePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";5 %>
6
7
8
9
10 ">
11
12
My JSP 'success.jsp' starting page13
14
15
16
17
18
19
22
23
24
25
26
27
28 欢迎你:
29
30
四 JSP开发模式2
JSP开发模式2借鉴了MVC架构模式,采用了Servlet+JSP+JavaBean的技术实现JavaWeb的开发。
1 MVC架构
在MVC中,模型(model)部分负责管理系统业务数据,视图(view)部分负责显示界面,控制器(controller)部分负责与用户的交互。
MVC示意图
2 MVC架构模式的Java Web实现
JSP开发模式2借鉴了MVC架构模式,采用了Servlet+JSP+JavaBean的技术实现JavaWeb的开发。
Servlet充当控制器额角色,负责处理请求和控制业务流程;
JSP充当视图的角色,负责输出响应结果;
JavaBean充当模型的角色,负责具体的业务逻辑和业务数据。
其结构如图:
WebMVC
3 JSP模式2开发步骤
–1 定义一系列Bean来表示数据
–2 使用一个Servlet来处理请求
–3 在Servlet中填充Bean
–4 在Servlet中,将Bean存储到请求、会话或者Servlet上下文中
–5 将请求转发到JSP页面
–6 在JSP页面中,从Bean中提取数据
1)
由于在MVC中,都是有Servlet或者其他的JAVA程序中创建Bean,所以我们开发的JavaBean也就不再需要有空构造器方法。
1 packagecom.cy.bean;2
3 importjava.io.Serializable;4
5 public class User implementsSerializable {6
7 privateString name;8 privateString pwd;9
10 publicString getName() {11 returnname;12 }13
14 public voidsetName(String name) {15 this.name =name;16 }17
18 publicString getPwd() {19 returnpwd;20 }21
22 public voidsetPwd(String pwd) {23 this.pwd =pwd;24 }25
26 }
–2 ) 使用一个Servlet来处理请求
–3 )在Servlet中填充Bean
–4 )在Servlet中,将Bean存储到请求、会话或者Servlet上下文中
–5 )将请求转发到JSP页面
1 packagecom.cy.servlet;2
3 importjava.io.IOException;4 importjava.sql.Connection;5 importjava.sql.DriverManager;6 importjava.sql.ResultSet;7 importjava.sql.SQLException;8 importjava.sql.Statement;9
10 importjavax.servlet.ServletException;11 importjavax.servlet.http.HttpServlet;12 importjavax.servlet.http.HttpServletRequest;13 importjavax.servlet.http.HttpServletResponse;14
15 importcom.cy.bean.User;16 //需要连接数据库
17 public class LoginServlet extendsHttpServlet{18
19 @Override20 protected voiddoGet(HttpServletRequest req, HttpServletResponse resp)21 throwsServletException, IOException {22 req.setCharacterEncoding("utf-8");23 resp.setCharacterEncoding("utf-8");24 resp.setContentType("text/html;charset=utf-8");25
26 /*使用一个Servlet来处理请求*/
27 String name = req.getParameter("username");28 String pwd = req.getParameter("pwd");29
30
31
32 Connection conn = null;33 Statement st = null;34 ResultSet rs = null;35 String url="jdbc:mysql://localhost:3306/demo";36 String user = "root";37 String password ="1234";38 String sql = "select * from t_user where user_name='"+name+"' and user_password='"+pwd+"'";39
40 //System.out.println(sql);
41 try{42 Class.forName("com.mysql.jdbc.Driver");43 conn =DriverManager.getConnection(url,user,password);44 st =conn.createStatement();45 rs =st.executeQuery(sql);46 if(rs.next()){47
48 /*在Servlet中填充Bean*/
49 User u = newUser();50 u.setPwd(pwd);51 u.setUsername(name);52
53
54 /*在Servlet中,将Bean存储到请求、会话或者Servlet上下文中*/
55 req.getSession().setAttribute("user", u);56
57 /*将请求转发到JSP页面*/
58 req.getRequestDispatcher("/welcome.jsp").forward(req, resp);59 }else{60 req.getRequestDispatcher("/index.jsp").forward(req, resp);61 }62 } catch(Exception e) {63 e.printStackTrace();64 }finally{65 try{66 rs.close();67 st.close();68 conn.close();69 } catch(SQLException e) {70 e.printStackTrace();71 }72 }73
74 }75
76 @Override77 protected voiddoPost(HttpServletRequest req, HttpServletResponse resp)78 throwsServletException, IOException {79 doGet(req, resp);80 }81
82 }
这里还写了一个简单的util
1 packagecom.cy.util;2
3 importjava.sql.Connection;4 importjava.sql.DriverManager;5 importjava.sql.ResultSet;6 importjava.sql.SQLException;7 importjava.sql.Statement;8
9 public classDBUtil {10 private static String url = "jdbc:mysql://127.0.0.1:3306/demo?useUnicode=true&characterEncoding=utf-8";11 private static String user = "root";12 private static String pwd = "1234";13 privateDBUtil(){};14 static{15 try{16 Class.forName("com.mysql.jdbc.Driver");17 } catch(ClassNotFoundException e) {18 e.printStackTrace();19 }20
21 }22
23 public static Connection getConn() throwsSQLException{24 returnDriverManager.getConnection(url,user,pwd);25 }26
27 public static voidcloseRe(Connection conn,Statement st,ResultSet rs){28 if(rs!=null){29 try{30 rs.close();31 } catch(SQLException e) {32 e.printStackTrace();33 }finally{34 if(st!=null){35 try{36 st.close();37 } catch(SQLException e) {38 e.printStackTrace();39 }finally{40 if(conn!=null){41 try{42 conn.close();43 } catch(SQLException e) {44 e.printStackTrace();45 }46 }47 }48 }49 }50 }51 }52
53 public static voidcloseRe(Connection conn,Statement st) {54 if(st!=null){55 try{56 st.close();57 } catch(SQLException e) {58 e.printStackTrace();59 }finally{60 if(conn!=null){61 try{62 conn.close();63 } catch(SQLException e) {64 e.printStackTrace();65 }66 }67 }68 }69
70 }71
72 }
在web.xml配置Servlet
1 <?xml version="1.0" encoding="UTF-8"?>
2
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee5 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
6
7
8 index.jsp
9
10
11
12 login
13 com.cy.servlet.LoginServlet
14
15
16
17 login
18 /login
19
20
21
在JSP页面中,从Bean中提取数据
1
2
3 Stringpath=request.getContextPath();4 StringbasePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";5 %>
6
7
8
9
10 ">
11
12
My JSP 'welcome.jsp' starting page13
14
15
16
17
18
19
22
23
24
25
26 welcome页码显示数据27
28
欢迎你:
29
30
五 在MVC中使用过滤器
在创建Bean后,Servlet使用RequestDispatcher 对象将请求转发到恰当的JSP页面
Servlet
1 packagecom.cy.servlet;2
3 importjava.io.IOException;4
5 importjavax.servlet.ServletException;6 importjavax.servlet.http.HttpServlet;7 importjavax.servlet.http.HttpServletRequest;8 importjavax.servlet.http.HttpServletResponse;9
10 importcom.cy.bean.User;11
12 public class DemoServlet extendsHttpServlet {13
14 @Override15 protected voiddoGet(HttpServletRequest req, HttpServletResponse resp)16 throwsServletException, IOException {17 req.setCharacterEncoding("utf-8");18 String name = req.getParameter("username");19 String pwd = req.getParameter("pwd");20
21 User user = newUser();22 user.setPwd(pwd);23 user.setUsername(name);24 req.getSession().setAttribute("user1", user);25 String uri =req.getRequestURI();26 req.getRequestDispatcher(uri).forward(req, resp);27 }28
29 @Override30 protected voiddoPost(HttpServletRequest req, HttpServletResponse resp)31 throwsServletException, IOException {32 doGet(req, resp);33 }34
35 }
Filter
1 packagecom.cy.filter;2
3 importjava.io.IOException;4
5 importjavax.servlet.Filter;6 importjavax.servlet.FilterChain;7 importjavax.servlet.FilterConfig;8 importjavax.servlet.ServletException;9 importjavax.servlet.ServletRequest;10 importjavax.servlet.ServletResponse;11 importjavax.servlet.http.HttpServletRequest;12
13 importcom.lovo.bean.User;14
15 public class DemoFilter implementsFilter {16
17 public voiddestroy() {18 //TODO Auto-generated method stub
19
20 }21
22 public voiddoFilter(ServletRequest arg0, ServletResponse arg1,23 FilterChain arg2) throwsIOException, ServletException {24 HttpServletRequest req =(HttpServletRequest)arg0;25 User user = newUser();26 String name = req.getParameter("username");27 String pwd = req.getParameter("pwd");28 user.setPwd(pwd);29 user.setUsername(name);30 req.getSession().setAttribute("user", user);31 arg2.doFilter(req, arg1);32 }33
34 public void init(FilterConfig arg0) throwsServletException {35 //TODO Auto-generated method stub
36
37 }38
39 }
在web.xml中配置部署Filter,servlet
1 <?xml version="1.0" encoding="UTF-8"?>
2
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee5 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
6
7
8 index.jsp
9
10
11
12 jsp
13 com.cy.filter.DemoFilter
14
15
16 jsp
17 /*
18
19
30
31
小结:
1 JSP脚本使页面变得简单、直观,但可读性差而且没有将页面表现和业务逻辑实现分开,维护难度增加
2 JSP的主要任务是发送文本内容的响应,Servlet控制业务流程但是无法对业务功能进行复用
3 使用JavaBean把业务逻辑从Servlet中取出来
4 JavaBean本质上就是一个普通的Java类
5 MVC设计模式让Servlet负责处理请求和控制业务流程,JSP负责输出响应结果,JavaBean负责具体的业务逻辑和业务数据
6 在MVC模式处理中最后的显示结果是由Servlet代码来判断请求要转发到哪个JSP页面
7 采用过滤器作为控制器,提供了一个清晰的方法来增加一个新视图