首页 > 代码库 > 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):删除请求中的一个属性