首页 > 代码库 > javaEE MVC理解

javaEE MVC理解


MVC包括三个部分 :

①View:负责与用户交互,即在界面上展示数据对象给用户(html,jsp)

②Controller:Model与View之间沟通的桥梁,它可以分派用户的请求并选择恰当的视图以用于显示,同时它也可以解

释用户的输入并将它们映射为模型层可执行的操作(Servlet)

③Model:实现系统的业务逻辑(javaBean)

DAO:用于连接数据库,将resultset结果封装到DTO并返回

DTO:用于封装数据,包含一些列的get/set方法

VO(View Object) 视图对象

VO(Value Object)值对象,等同于DTO

BO(Business Object) 业务对象

PO(Persistent Object)持久对象



步骤解析:

1.浏览器把请求数据发送给容器。

2.容器根据URL找到正确的servlet,并把请求传递给一个servlet。

3.servlet调用BeerExpert寻求帮助。

4.这个“专家”类返回一个回答,servlet把这个回答增加到请求对象。

5.servlet把请求分派给JSP。

6.JSP从请求对象得到回答。

7.JSP为容器生成一个页面。

8. 容器把这个页面返回给心满意足的用户。


servlet总结:

servlet中最好只有以下几种代码:

·接受参数 ·调用javabean ·进行跳转 ·有一些简单的逻辑判断

----------------- mvc进一步掌握案例 ---------------- ·mvc登陆的进阶案例(3个)

·mvc实现的图书管理程序(SmartUpload)

·mvc实现的购物车

·mvc列表案例

·mvc中如何进行分页


servlet转发请求的两种方式:

forward方式:

String color = request.getParameter("color");//获取请求参数

BeerExpert be = new BeerExpert();//创建dao对象

List results = be.getBands(color);//调用dao访问数据库并返回dto集合

request.setAttribute("styles",results);//为请求对象增加一个属性,供jsp使用.jsp再去找‘styles‘

RequestDispatcher view = request.getRequestDispatcher("result.jsp")//为jsp实例化一个请求分派器

view.forward(request,response);//使用请求分配器要求容器准备好jsp,并向jsp发送请求和响应


redirect方式:

String name=request.getParameter("username");//获取请求参数

String password=request.getParameter("password");//获取请求参数

LoginDBO loginDBO=new LoginDBO();//创建dao对象

String message =loginDBO.login(name, password);//调用dao访问数据库并返回字符串

String url="returnMessage.jsp?message="+message;//构造转发url

url=new String(url.getBytes("GBK"),"ISO8859_1"); //转码,防止乱码

response.sendRedirect(url); //重定向请求


最简单的model层(一般需要和数据库打交道):

public class BeerExpert{

public List getBrands(String color){

List brands = new ArrayList();

if(color.equals("amber")){

brands.add("Jack Amber");

brands.add("Red Moose");

}else{

brands.add("Jail Pale Ale");

brands.add("Gout Stout");

}
}
}


JSP中动态INCLUDE与静态INCLUDE的区别?

动态INCLUDE用jsp:include动作实现 <jsp:include page="included.jsp" flush="true" />它总是会检查所含文件中的变

化,适合用于包含动态页面,并且可以带参数。

静态INCLUDE用include伪码实现,它不会检查所含文件的变化,适用于包含静态页面<%@ include file="included.htm" 

%>


Servlet执行时一般实现哪几个方法?

public void init(ServletConfig config)

public ServletConfig getServletConfig()

public String getServletInfo()

public void service(ServletRequest request,ServletResponse response)

public void destroy()

每个servlet只实例化一个对象,所以init()和destroy()整个声明周期只执行一次,但是对于每个请求web容器都会新建一个线程然后运行service()并在其中运行doGet()或doPost()方法.


如何现实servlet的单线程模式    

<%@ page isThreadSafe="false"%>


Request对象的主要方法:

setAttribute(String name,Object):设置名字为name的request的参数值

getAttribute(String name):返回由name指定的属性值

getAttributeNames():返回request对象所有属性的名字集合,结果是一个枚举的实例

getCookies():返回客户端的所有Cookie对象,结果是一个Cookie数组

getCharacterEncoding():返回请求中的字符编码方式getContentLength():返回请求的Body的长度

getHeader(String name):获得HTTP协议定义的文件头信息

getHeaders(String name):返回指定名字的request Header的所有值,结果是一个枚举的实例

getHeaderNames():返回所以request Header的名字,结果是一个枚举的实例

getInputStream():返回请求的输入流,用于获得请求中的数据

getMethod():获得客户端向服务器端传送数据的方法

getParameter(String name):获得客户端传送给服务器端的有name指定的参数值

getParameterNames():获得客户端传送给服务器端的所有参数的名字,结果是一个枚举的实例

getParameterValues(String name):获得有name指定的参数的所有值

getProtocol():获取客户端向服务器端传送数据所依据的协议名称

getQueryString():获得查询字符串

getRequestURI():获取发出请求字符串的客户端地址getRemoteAddr():获取客户端的IP地址

getRemoteHost():获取客户端的名字

getSession([Boolean create]):返回和请求相关Session

getServerName():获取服务器的名字

getServletPath():获取客户端所请求的脚本文件的路径

getServerPort():获取服务器的端口号

removeAttribute(String name):删除请求中的一个属性