java web 插件开发_javaweb-jsp开发模式+JSON插件

阅读这一篇文章,你至少需要掌握的技术有:servlet,jsp,javaban(java基础);

所需要的jar包:

1,封装表单的jar包:commons-beanutils-1.8.3.jar;

commons-logging-1.1.1.jar;

2,jdbc数据库的jar包(这里用的mysql数据库):mysql-connector-java-5.0.8-bin.jar;

3,jstl标签库的jst包:jstl.jar;

Standard.jar;

4,json的jar包:

commons-collections-3.2.1.jar;

commons-lang-2.5.jar;

ezmorph-1.0.6.jar;

json-lib-2.4-jdk15.jar;

(下面这两个jar包前面已经加载过,不需要重复加载,额外写一遍是因为有可能单独使用json的时候需要用到,故此在这里备注一下)

commons-logging-1.1.1.jar;

commons-beanutils-1.8.3.jar;

本文主要对jsp的开发模式,mvc模式进行学习

1 ,Jsp的开发模式;

1,1 主要开发模式:

1.1.1,模型一

使用的技术:jsp+javaBean

这种技术有一个很明显的缺点,jsp虽然能很方便的向页面输出内容,但是当我在一个jsp页面中嵌入了大量的java代码时候,页面结构非常混乱,java代码和html代码相互交替,在后期维护的时候十分麻烦(哭);

1.1.2模型二(主要用这个)

使用的技术:jsp+servlet+javaBean

主要特点:分工合作,负责自己的功能范围,

Jsp:用来显示数据;

Servlet:控制中心,管理操作,在javaBean和jsp中建立联系;

javaBean:封装数据,处理数据;

2, 使用模型二模拟登陆操作(就不写代码了,代码简单,好理解,逻辑步骤明确即可);

2.1 实现步骤

①创建一个jsp登陆页面,提交信息到控制中心servlet页面;

②创建控制中心servlet调用业务逻辑层,实现登陆功能的判断;

③创建Service实现功能(这里先不用持久层,直接在Service中处理结果);

④控制中心从业务逻辑层获取获取结果,反馈信息给登陆页面(失败),或其它页面;

mvc开发模式(这个模式思想很多地方都有用到,不要局限与web之中);

3.1 mvc:;

M:模型;

V:视图;

C:控制器;

特点:使用控制器,控制模型与视图之间的关系;

3.2 在javaweb开发中的具体分工;

3.1.1 M:使用javaBean技术,处理数据;

3.1.2 V:使用jsp技术,显示数据;

3.1.3 C:使用servlet技术,控制管理功能;

javaee的三层结构;

4.1 web 层(jsp,servlet);

4.2 商业逻辑层(业务逻辑层);

4.3 持久化层(jdbc数据库操作);

4.4 dao模式:用在持久化层的模式,专注于对数据操作的模式,数据封装成对象;

注意事项:①第一步,创建一个接口,定义要使用的功能(制定对外的规则);

②第二步,创建一个类,实现接口的所有方法(之后可以通过该类实现功能);

③第三步:参数用对象进行封装(方便传输);

//dao模式使用的参数传递,全部是用的封装过的对象传递

5, mvc+dao模式的练习:实现登陆功能的操作;

5.1 实现步骤(主要难点在于参数如何传递,步骤如何实现):

①创建一个jsp页面(V),from表单提交参数到servlet(C)中;

②创建一个servlet(C)来获取数据请求,并进行封装调用service(M)中的方法实现功能;

③创建一个servlet(M)来实现功能,调用dao模式中的方法;

④创建dao模式相关接口和类,与数据库挂接;

⑤servlet(M)返回结果给servlet(C),servlet(C)根据结果把信息反馈给jsp页面(V);

6,mvc+dao 模式的练习:实现注册功能的步骤:

6.1实现步骤:

①创建一个注册页面(V),表单数据提交到servlet(C)中

②创建一个servlet(C)来获取请求数据,并封装,然后调用service(M)的方法实现功能

③创建一个servlet(M)来实现功能,调用dao模式中的方法

④在dao模式的接口和实现类中创建方法,实现效果

⑤反馈结果,显示在jsp页面上(v);

6.2功能完善:ID值唯一

实现方法:

①创建表的时候设定id为主键并且自动增长:id int primary key atuo_increment,

②使用uuid类随机生成id

//生成一个随机的唯一的id值

String id = UUID.randomUUID().toString();

id = id.replace("-", "");

6.3 其它练习:增加,删除(挺简单的,就不一一累赘了,重点在于掌握mvc+dao这一种开发模式,同时对之前的知识点进行复习);

7 JSON插件的使用(好东西,可以把集合或者对象转换成JSON,算是间接的与js搭建了桥梁)

JSON是一个轻量级的数据储存格式,方便使用(在安卓开发中用的很多)

需要的jar包在本文开头已经提到了,就不再这里重复说明了

使用方式:

对象转JSON

JSONObject jsonobject =JSONObject.fromObject(对象);

集合转JSON

JSONArray jsonarray=JSONObjectfromArray(集合);

整理时间 2016.5.14

最后贴一下 mvc+dao模式代码,写的比较简单,见笑了.

MVC

控制中心(C)

packagecom.zzx.control;importjava.io.IOException;importjava.lang.reflect.InvocationTargetException;importjava.util.Map;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjavax.swing.text.StyledEditorKit.BoldAction;importorg.apache.commons.beanutils.BeanUtils;importcom.zzx.bean.Player;importcom.zzx.service.PlayerService;public class Control extendsHttpServlet {//这里是登陆控制中心

public voiddoGet(HttpServletRequest request, HttpServletResponse response)throwsServletException, IOException {//0,考虑到用户名会有中文的可能

request.setCharacterEncoding("utf-8");//1,封装数据

Player p =newPlayer();

Map map=request.getParameterMap();try{

BeanUtils.populate(p, map);

}catch(Exception e) {

e.printStackTrace();

}//2,调用商业逻辑层实现效果

boolean flag =PlayerService.Login(p);if(flag){

response.getWriter().write("Login sucess");

}else{

request.setAttribute("msg", "用户名或密码错误");

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

}

}public voiddoPost(HttpServletRequest request, HttpServletResponse response)throwsServletException, IOException {

doGet(request, response);

}

}

下面是 业务逻辑层

packagecom.zzx.service;importjava.util.List;importcom.zzx.bean.Player;importcom.zzx.dao.SQLControl;importcom.zzx.dao.SQLControlIn;public classPlayerService {//这里是业务综合处理处//1登陆功能

public static booleanLogin(Player p) {//调用 sql数据操作

SQLControl sc =newSQLControlIn();boolean flag =sc.Login(p);if(flag){return true;

}else{return false;

}

}//注册操作

public static booleanreg(Player p) {//调用 Dao模式下方法创建

SQLControl sc =newSQLControlIn();boolean flag=sc.reg(p);if(flag){return true;

}else{return false;

}

}//判断姓名是否重复

public static booleanOnlyName(Player p) {

SQLControl sc=newSQLControlIn();boolean flag=sc.OnlyName(p);if(flag){return true;

}else{return false;

}

}public static ListAllPlayer() {

SQLControl sc=newSQLControlIn();

Listlist =sc.AllPlayer();returnlist;

}

}

下面是持久层

packagecom.zzx.dao;importjava.util.List;importcom.zzx.bean.Player;public interfaceSQLControl {//这里是对外提供的数据库控制中心//登录操作

public booleanLogin(Player p);//注册操作

public booleanreg(Player p);public booleanOnlyName(Player p);public ListAllPlayer();

}

packagecom.zzx.dao;importjava.sql.Connection;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.util.LinkedList;importjava.util.List;importcom.zzx.bean.Player;importcom.zzx.utils.JdbcTools;public class SQLControlIn implementsSQLControl{privateConnection conn;privatePreparedStatement ps;privateResultSet rs;//1,这里是登陆操作

public booleanLogin(Player p) {

String username=p.getUsername();

String password=p.getPassword();try{//1,获取链接

conn =JdbcTools.loadDriver();//2,创建sql语句

String sql ="select * from player where username=? and password=?";//3,获取预编译对象并设置参数

ps =conn.prepareStatement(sql);

ps.setString(1, username);

ps.setString(2, password);//4,获取执行结果

rs =ps.executeQuery();if(rs.next()){return true;

}else{return false;

}

}catch(Exception e) {

e.printStackTrace();

}finally{

JdbcTools.clearAll(conn, ps, rs);

}return false;

}//注册功能

public booleanreg(Player p) {try{

conn=JdbcTools.loadDriver();//创建sql语句

String sql = "insert into player values(?,?,?,?)";//获取预编译对象

ps =conn.prepareStatement(sql);//设置参数

String id =p.getId();

String username=p.getUsername();

String password=p.getPassword();

String addr=p.getAddr();

ps.setString(1, id);

ps.setString(2, username);

ps.setString(3, password);

ps.setString(4, addr);//执行sql

ps.executeUpdate();//返回结果

return true;

}catch(Exception e) {

e.printStackTrace();

}finally{

JdbcTools.clearAll(conn, ps, rs);

}return false;

}//判断名字是否唯一

public booleanOnlyName(Player p) {

String username=p.getUsername();try{//1,获取链接

conn =JdbcTools.loadDriver();//2,创建sql语句

String sql ="select * from player where username=?";//3,获取预编译对象并设置参数

ps =conn.prepareStatement(sql);

ps.setString(1, username);//4,获取执行结果

rs =ps.executeQuery();if(rs.next()){return true;

}else{return false;

}

}catch(Exception e) {

e.printStackTrace();

}finally{

JdbcTools.clearAll(conn, ps, rs);

}return false;

}//获取所有用户

public ListAllPlayer() {

List list =new LinkedList();

Player p ;try{//1,获取链接

conn =JdbcTools.loadDriver();//2,创建sql语句

String sql ="select * from player";//3,获取预编译对象并设置参数

ps =conn.prepareStatement(sql);//4,获取执行结果

rs =ps.executeQuery();while(rs.next()){//创建对象,封装数据

p=newPlayer();

String id=rs.getString("id");

String username= rs.getString("username");

String password= rs.getString("password");

String addr= rs.getString("addr");

p.setId(id);

p.setUsername(username);

p.setPassword(password);

p.setAddr(addr);//添加到集合中去

list.add(p);

}returnlist;

}catch(Exception e) {

e.printStackTrace();

}finally{

JdbcTools.clearAll(conn, ps, rs);

}return null;

}

}

下面是JDBC工具类(手头上只有MySQL就用的MySQL了)

packagecom.zzx.utils;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.sql.Statement;importjava.util.ResourceBundle;//这里是操作数据库的工具类/** 工具类功能:1,加载驱动,获取链接

* 2,释放资源*/

public classJdbcTools {//定义参数获取配置文件中的信息

private staticString driverName;private staticString username;private staticString password;private staticString url;static{

driverName=ResourceBundle.getBundle("config").getString("driverName");

username=ResourceBundle.getBundle("config").getString("username");

password=ResourceBundle.getBundle("config").getString("password");

url=ResourceBundle.getBundle("config").getString("url");

}//功能1,加载驱动,获取链接

public staticConnection loadDriver(){//1,通过反射获取字节码文件加载驱动

try{

Class.forName(driverName);

Connection conn=DriverManager.getConnection(url,username,password);returnconn;

}catch(Exception e) {//TODO Auto-generated catch block

e.printStackTrace();

}return null;

}//功能2,释放资源

public static voidclearAll(Connection conn,Statement state,ResultSet rs){if(rs!=null){try{

rs.close();

}catch(SQLException e) {//TODO Auto-generated catch block

e.printStackTrace();

}

}

rs=null;if(state!=null){try{

state.close();

}catch(SQLException e) {//TODO Auto-generated catch block

e.printStackTrace();

}

}

state=null;if(conn!=null){try{

conn.close();

}catch(SQLException e) {//TODO Auto-generated catch block

e.printStackTrace();

}

}

conn=null;

}

}

下面是V web页面

Insert title here

请输入用户名跟密码登陆

${msg }

用户名:
密码:


点我显示所有用户

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java EE 项目的目录结构可以根据具体的需求进行灵活设计,但一般情况下,推荐使用以下的标准目录结构: ``` project ├── src │ ├── main │ │ ├── java │ │ │ └── com │ │ │ └── example │ │ │ ├── controller │ │ │ ├── dao │ │ │ ├── entity │ │ │ ├── service │ │ │ └── util │ │ ├── resources │ │ │ ├── mapper │ │ │ └── db.properties │ │ └── webapp │ │ ├── WEB-INF │ │ │ ├── classes │ │ │ ├── lib │ │ │ └── web.xml │ │ ├── css │ │ ├── js │ │ ├── images │ │ └── index.jsp │ └── test │ ├── java │ └── resources ├── target ├── pom.xml └── README.md ``` 其中,各个目录的作用如下: - `src/main/java`:存放项目的 Java 源代码,按照包名分层,一般包括 `controller`、`dao`、`entity`、`service` 和 `util` 等包; - `src/main/resources`:存放项目的配置文件和资源文件,一般包括数据库连接配置文件 `db.properties`、MyBatis 的 mapper 文件等; - `src/main/webapp`:存放 Web 应用的 Web 资源,包括 JSP 页面、CSS 样式表、JavaScript 脚本等; - `src/test/java`:存放项目的测试代码; - `src/test/resources`:存放测试代码所需要的资源文件; - `target`:存放编译后的 .class 文件、打包后的 .war 文件等; - `pom.xml`:Maven 项目管理工具的配置文件; - `README.md`:项目说明文件。 以上是一种常见的 Java EE 项目目录结构,但并不是唯一的标准。在实际开发中,可以根据项目的具体需求进行合理的调整和修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值