西安邮电大学JavaWeb考试复习
论述
MVC设计模式
MVC(model,view,controller)
,一种将业务逻辑、数据、界面分离的方法组织代码的框架。在改进界面及用户交互的同时,不用重写业务逻辑。MVC将传统的输入、处理和输出分离。
- Model:模型,逻辑部分,也是表示应用程序的核心,比如说数据库的表和记录
- View:视图,数据显示,也是表示界面,是用于显示的,比如说显示数据库的记录
- Controller:控制器,用户交互,也是表示处理的,比如说处理/增删查改数据库的记录
MVC = JSP + Servlet + JavaBean(DAO)
为了实现显示与数据的分离在M和V中间加了一个C,用户在V上只能通过C来实现对M的操作,一旦M(数据)有更新,,模型就会通知V(视图)更新。用户通过对事件的操作,可以触发视图的各种事件;通过控制器,以达到更新模型或数据的目的
MVC设计模式的优点
MVC将视图层和业务层分离,很容易改变应用程序的数据层和业务规则,耦合性低且可维护性高。
MVC中的模型可以被不同的视图使用,重用性高。
Spring MVC
基于JAVA实现MVC设计模式的请求驱动类型的轻量型WEB框架,即使用了MVC思想,将WEB层进行解耦。
执行流程:浏览器发送请求给控制器,控制器接收请求将请求委托给业务对象进行处理,然后将结果使用视图渲染返回到浏览器.
MVC设计模式代码分层
-
Controller
——Servlet
——控制器 -
Pojo
——所有创建表的对象——JavaBean
-
DAO
——用与数据库的关联与对数据库进行的操作 -
Service
——业务逻辑层 -
Web
页面——jsp/html
——前端界面和表单之类的
框架论述
JavaWeb
现在常用的框架:SSM / SSH
SSH(Struts/SpringMVC+Spring+Hibernate),SSM(Struts/springMVC+Spring+Mybaits)
为什么要用框架
软件系统发展到今天已经很复杂了,特别是服务器端软件,涉及到的知识,内容,非常广泛。这样开发出完善健壮的软件,对程序员的要求将会非常高。如果采用成熟,稳健的框架,那么一些基础的通用工作,比如,事物处理,安全性,数据流控制等都可以交给框架处理,那么程序员只需要集中精力完成系统的业务逻辑设计,可以降低开发难度。
从程序员角度看,使用框架最显著的好处是重用,由于框架能重用代码,因此从一已有构件库中建立应用变得非常容易,因为构件都采用框架统一定义的接口,从而使构件间的通信简单。框架能重用设计。它提供可重用的抽象算法及高层设计,并能将大系统分解成更小的构件,而且能描述构件间的内部接口。这些标准接口使在已有的构件基础上通过组装建立各种各样的系统成为可能。只要符合接口定义,新的构件就能插入框架中,构件设计者就能重用构架的设计。框架还能重用分析。所有的人员若按照框架的思想来分析事物,那么就能将它划分为同样的构件,采用相似的解决方法,从而使采用同一框架的分析人员之间能进行沟通。
一种技术,最终都是为业务发展而服务的。从业务的角度来讲。首先,框架的是为了企业的业务发展和战略规划而服务的,他服从于企业的愿景(vision);其次,框架最重要的目标是提高企业的竞争能力,包括降低成本、提高质量、改善客户满意程度,控制进度等方面。最后,框架实现这一目标的方式是进行有效的知识积累。软件开发是一种知识活动,因此知识的聚集和积累是至关重要的。框架能够采用一种结构化的方式对某个特定的业务领域进行描述,也就是将这个领域相关的技术以代码、文档、模型等方式固化下来。
合理的使用框架可以带来的好处
重用代码大大增加,软件生产效率和质量也得到了提高;
代码结构的规范化,降低程序员之间沟通以及日后维护的成本;
知识的积累,可以让那些经验丰富的人员去设计框架和领域构件,而不必限于低层编程;
软件设计人员要专注于对领域的了解,使需求分析更充分;
允许采用快速原型技术; 有利于在一个项目内多人协同工作;
大粒度的重用使得平均开发费用降低,开发速度加快,开发人员减少,维护费用降低,而参数化框架使得适应性、灵活性增强。
JSP
优缺点
缺点
- JSP技术极大的增加了产品的复杂性,JSP的部署有一定难度
- java的高效率运行需要占用大量的内存和硬盘空间. 占用大量资源对硬件要求较高
- JSP程序调试困难,JSP页面执行时, 首先被转换为 .java文件(Servlet), 然后将.java文件编译为字节码文件. 这样,出错信息实际上指向的 是转换后的那个.java文件(Servlet), 而不是JSP本身.
优点
- JSP代码跨平台, 即一次编写,处处运行
- JSP组件跨平台,JSP组件都是跨平台可重用的,企业JavaBeans组件可以访问传统的数据库,并能以分布式系统模式工作于各大平台
- 支持多种网页格式,JSP技术既可以支持HTML/DHTML格式,又可以支持PDA等设备的WML文件格式,还可以支持XML格式.
- JSP标签可扩充性,使网页制作者降低了制作网页的复杂度
- 健壮性与安全性,由于JSP页面使用的脚本语言是java语言, 因此,它就具有java技术的所有好处, 包括健壮的存储管理和安全性.
数据库ER
图
长方形是实体(即表),椭圆形是属性(即字段),菱形是关系
关系分类:
1—1 、 1—多(外键) 、 多—多(多个外键)
可以在ER图的主键上加下划线
代码
常用正则
1、匹配所有的正数:^[0-9]+$
2、匹配所有的小数:^\-?[0-9]*\.?[0-9]*$
3、匹配所有的整数:^\-?[0-9]+$
4、提取信息中的中文字符串: [\u4e00-\u9fa5]* ;
5、提取信息中的邮件地址:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
6、提取信息中的中国手机号码:(86)*0*13\d{9}
7、提取信息中的中国固定电话号码:(\(\d{3,4}\)|\d{3,4}-|\s)?\d{8}
8、提取信息中的中国邮政编码:[1-9]{1}(\d+){5}
9、提取信息中的中国身份证号码:\d{18}|\d{15}
10、提取信息中的任何数字:(-?\d*)(\.\d+)?
11、匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*) \/>/
12、匹配邮箱:/^([a-zA-Z0-9_-])[email protected]([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/
^[1-9]\d*$ //匹配正整数
^-[1-9]\d*$ //匹配负整数
^-?[1-9]\d*$ //匹配整数
^[1-9]\d*|0$ //匹配非负整数(正整数 + 0)
^-[1-9]\d*|0$ //匹配非正整数(负整数 + 0)
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ //匹配正浮点数
^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ //匹配负浮点数
^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$ //匹配浮点数
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$ //匹配非负浮点数(正浮点 数 + 0)
^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$ //匹配非正浮点数(负浮点 数 + 0)
^[A-Za-z]+$ //匹配由26 个英文字母组成的字符串
^[A-Z]+$ //匹配由26个英文字母的大写组成的字符串
^[a-z]+$ //匹配由26个英文字母 的小写组成的字符串
^[A-Za-z0-9]+$ //匹配由数字和26个英文字母组成的字符串
^\w+$ //匹配由数字、26个 英文字母或者下划线组成的字符串
JSP
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form id="Login" name="Login" method="post" action="input.do">
<li class="login-item">
<span>用户名:</span>
<input type="text" id="username" name="username" >
</li>
<li class="login-item">
<span>密 码:</span>
<input type="password" id="password" name="password">
<input type="submit" name="Submit" value="登录" />
</li>
</form>
</body>
</html>
Filter
public class MyFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");
chain.doFilter(request, response);//向下传递过滤器
}
}
Servlet
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintStream;
import java.io.PrintWriter;
public class InputServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");
String username = request.getParameter("username");
String password = request.getParameter("password");
PrintWriter out = response.getWriter(); //获取向页面写的对象
if(username == null || password == null)
out.println("用户名或者密码为空");
//res.sendRedirect(/login.jsp)
if(!username.equals("abc") || !password.equals("123"))
out.println("用户名或者密码不正确");
else
out.println("登陆成功!");
request.getRequestDispatcher("/welcome.jsp").forward(request,response); //请求转发至welcome.jsp
}
public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
doGet(request,response);
}
}