用java做web开发_Java Web开发模式

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处理

c11f75b84388ccef34f0f737c105387c.png

用户登录案例来说明JSP1开发模式:

c8397f2eff37488108965aa803a92912.png

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.html

5

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 page

13

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 page

13

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)部分负责与用户的交互。

bdb857c0d44cda19d358063512880129.png

MVC示意图

2 MVC架构模式的Java Web实现

JSP开发模式2借鉴了MVC架构模式,采用了Servlet+JSP+JavaBean的技术实现JavaWeb的开发。

Servlet充当控制器额角色,负责处理请求和控制业务流程;

JSP充当视图的角色,负责输出响应结果;

JavaBean充当模型的角色,负责具体的业务逻辑和业务数据。

其结构如图:

fb19b7b42627f47e9ce580b51c695113.png

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 page

13

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 采用过滤器作为控制器,提供了一个清晰的方法来增加一个新视图

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值