java web应用的三层架构_Javaweb开发中三层架构

今天决定拿一个JavaWeb开发中的三层架构作为开始,走起~~随着jsp的简单实用,model1和model2被大家所熟悉,但是这两种设计模式过于繁琐,前者在jsp页面中直接页面又写逻辑(我很喜欢在一个里面一顿狂写~),后者在servlet中既写页面又写逻辑业务,繁琐难以维护(页面和业务逻辑的确分开了,但是长长的代码写在servlet中过于臃肿),所以引出今天企业中大都用到的开发架构模式----三层架构,三层指的是web层  service层 dao层 它这种架构是我们在javaweb开发中经常使用的,个人感觉这三层架构大大减少了类之间的耦合性,大家各司其职,利于维护。

1. Web层:它包含了jsp servlet javaBean相关内容,当作业务流程的跳转,层中可写mvc设计模式,便于人机交互。

2. Service层:它也叫做bussiness层,类似中枢神经的存在关联其他两层,但它只处理业务逻辑操作。

3. Dao层 数据层 也叫做持久化层(持久化框架) 它的主要功能是负责对数据源(解析xml,数据库)访问,简单说,它就是包含对数据的CRUD 操作。

wA1LuzsuRVS9wAAAABJRU5ErkJggg==

流程图

wA3MjjD5UJvgQAAAABJRU5ErkJggg==

AAAAABJRU5ErkJggg==

搭建程序包结构

AAAAABJRU5ErkJggg==

jar包

GIgAVLAJQwSIAlX+eo2Chtqjq0gAAAABJRU5ErkJggg==

pageEncoding="UTF-8"%>

系统入口

第一天写博客

EQ63x7n4AAAAASUVORK5CYII=

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

系统注册

${entry.value}

${requestScope["regist.msg"]}

用户名:
密码:
再次密码:
生日:
介绍:

sdNsAdIGgeD+QdNsAdIGgeDyp3AECHnGWJMHl3AAD45Pc7AAB8yDsAoAbcAQA14A4AqIH9DgCo4X9i3Jc4mfc0cgAAAABJRU5ErkJggg==

pageEncoding="UTF-8"%>

Insert title here

${requestScope["login.msg"]}

请输入用户名:
请输入密码:
七天内记住密码

接着就是web层的servlet

/** 注册*/

public class servletregist extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

doPost(request,response);

}

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

//设置编码

request.setCharacterEncoding("utf-8");

//创建user对象

User user = new User();

try {

//设置时间

ConvertUtils.register(new MyDateConverter(),java.util.Date.class);

//内省

BeanUtils.populate(user, request.getParameterMap());

} catch (IllegalAccessException | InvocationTargetException e) {

e.printStackTrace();

}

//user类的validate,用来判断运行后的值是否为空,在后面

Map map = user.validate();

//如果大于0证明输入有问题

if (map.size()>0) {

//输入有误,在request域中存入map

request.setAttribute("map", map);

//请求转发到注册界面

request.getRequestDispatcher("/regist.jsp").forward(request, response);

return;

}

//创建service层的对象

UserService us = new  UserService();

try {

us.regist(user);

//重定向,到当前项目下的制定文件

response.sendRedirect(request.getContextPath()+"/login.jsp");

return;

} catch (Exception e) {

e.printStackTrace();

request.setAttribute("regist.msg", "注册失败");

//请求转发

request.getRequestDispatcher("/regist").forward(request, response);

return;

}

}

}

public class servletlogin extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

doPost(request, response);

}

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

//从页面拿到运行后的值

String username = request.getParameter("username");

String password = request.getParameter("password");

//

UserService us = new UserService();

try {

User user = us.login(username, password);

if (user == null) {

//登陆失败,设置错误信息

request.setAttribute("login.msg", "用户信息不能为空");

request.getRequestDispatcher("/login.jsp").forward(request, response);

}else {

String remember = request.getParameter("remember");

//如果点击了记住登陆按钮

if ("ok".equals(remember)) {

//cookie可以完成记者登陆

Cookie cookie = new Cookie("username", username);

//设置保留时间

cookie.setMaxAge(7*24*60*60);

cookie.setPath("/");

response.addCookie(cookie);

}

request.getSession().setAttribute("user", user);

response.sendRedirect(request.getContextPath()+"/hello.jsp");

}

} catch (DocumentException e) {

e.printStackTrace();

request.setAttribute("login.msg", "登陆失败");

request.getRequestDispatcher("/login.jsp").forward(request,

response);

return;

}

}

}

还是有一个销毁session的servlet

request.getSession().invalidate();

response.sendRedirect(request.getContextPath()+"/login.jsp");

service层的类中只有两个方法

public void regist(User user) throws DocumentException, IOException{

UserDao ud = new UserDao();

ud.add(user);

}

public User login(String username,String password) throws DocumentException{

UserDao ud = new UserDao();

return ud.read( username, password);

}

dao层完成业务

public class UserDao {

public void add(User user) throws DocumentException, IOException {

// 使用dom4j来完成对users.xml操作

// 1.获取Document对象

Document document = Dom4JUtils.getDocument("E:/Users.xml");

// 2.添加操作

StringBuilder builder = new StringBuilder();

builder.append("");

builder.append("").append(user.getUsername())

.append("");

builder.append("").append(user.getPassword())

.append("");

builder.append("")

.append(DateUtils.dateToString(user.getDate()))

.append("");

builder.append("").append(user.getResume()).append("");

builder.append("");

String xml = builder.toString();

Document doc = DocumentHelper.parseText(xml);

document.getRootElement().add(doc.getRootElement());

// 3.回写

Dom4JUtils.documentToXml(document, "E:/Users.xml");

}

public User read(String username, String password) throws DocumentException {

// 使用dom4j来完成对users.xml操作

// 1.获取Document对象

Document document = Dom4JUtils.getDocument("E:/Users.xml");

// 2.得到根元素

Element root = document.getRootElement();

// 3.得到根下所有user元素

List users = root.elements();

// 4.遍历users

for (Element user : users) {

// 5.判断每一个user下的username,password元素中的内容与传递的参数username,password是否相等。如果相等了将user对象信息封装,并返回。

String usernameElementText = user.elementText("username");

String passwordElementText = user.elementText("password");

if (username.equals(usernameElementText)

&& password.equals(passwordElementText)) {

User existUser = new User();

existUser.setUsername(username);

existUser.setPassword(password);

existUser.setResume(user.elementText("resume"));

existUser.setDate(DateUtils.stringToDate(user

.elementText("birthday")));

return existUser;

}

}

return null;

}

}

bean实体类

public class User {

private String username;

private String password;

private Date date;

private String resume;

public User() {

super();

// TODO Auto-generated constructor stub

}

public User(String username, String password, Date date, String resume) {

super();

this.username = username;

this.password = password;

this.date = date;

this.resume = resume;

}

public String getUsername() {

return username;

}

public void setUsername(String username) {

this.username = username;

}

public String getPassword() {

return password;

}

public void setPassword(String password) {

this.password = password;

}

public Date getDate() {

return date;

}

public void setDate(Date date) {

this.date = date;

}

public String getResume() {

return resume;

}

public void setResume(String resume) {

this.resume = resume;

}

public Map validate(){

Map m = new HashMap();

if (username == null || username.trim().length() == 0) {

m.put("username.msg", "用户不能为空");

}

if (password == null || password.trim().length() == 0) {

m.put("password.msg", "密码不能为空");

}

if (date == null) {

m.put("date.msg", "生日不能为空");

}

if (resume == null || resume.trim().length() == 0) {

m.put("resume.msg", "介绍不能为空");

}

return m;

}

}

工具类没写用的是dom4j的,感觉很low,先到这,夜深睡觉,分享手感,大神勿喷,

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值