训练大纲(第043天)

大家如果想快速有效的学习,思想核心是“以建立知识体系为核心”,具体方法是“守破离”。确保老师课堂上做的操作,反复练习直到熟练。

第89-90次(JSP和Servlet配合使用)

学习主题:JSP和Servlet配合使用

学习目标:

1 掌握 JSP访问原理

2 掌握JSP引擎

3 掌握JSP指令

对应视频:

http://www.itbaizhan.cn/course/id/85.html

对应文档:

对应作业

01登录页面创建和模版介绍和使用

1.1上机练习

1.1.1 根据视频讲解添加前段标签快捷插件

1.1.2 下载模板资源,熟悉模板中提供资源

02系统页面创建&系统需求分析

2.2 简答题

2.2.1 根据视频,请写出登录功能的实现思路?

第一步:在WebRoot目录下创建名为login.jsp的前端页面

第二步:在login.jsp页面中编辑一个form表单,指定action和method,action是将数据提交給servlet,method是数据提交的方式为post

第三步:我们填写完数据后,点击登录按钮,开始向指定的servlet提交数据,

第四步:servlet调用服务(service)层代码,服务(service)层代码调用Dao(数据访问层)层代码,Dao(数据访问层)层带着数据去数据库查询,并将查询到的数据与我们提交的数据进行比较。

最终:Dao层将结果返回给servlet,servlet再将结果返回到前端,前端根据结果做出相应的页面跳转或者提示信息

2.2.2 视频中要完成的三个功能需求分别是?、

1.用户登录

2.用户退出

3.用户注册

2.3 编程题

2.3.1 根据视频讲解,独立完成主页面模板的套用实现。

03登录Servlet创建和MVC思想

3.1 编程题

3.2.1 根据视频中的需求分析,使用MySQL完成用户信息表的创建,将表创建语句和测试数据SQL作为答案

1.创建表的sql语句

create table t_users(

uid int(12) not null auto_increment,

uname VARCHAR(20) not null,

pwd VARCHAR(20) not null,

sex char(20) not null,

age int(4) not null,

birthday date not null,

PRIMARY key(uid)

)

测试sql语句1-插入数据

insert into t_users values(default,'张三','123','男',15,'1991-01-02');

insert into t_users values(default,'李四','123','男',20,'1995-01-02');

测试sql语句1-检索数据

select * from t_users;

3.2.2 修改登录页面数据提交的action地址

截图作为答案

3.2.3 创建登录Servlet,并在Servlet完成编码设置,已经登录信息的获取的代码的编写,将实现代码粘贴作为答案

//设置请求编码格式

req.setCharacterEncoding("utf-8");

//设置响应编码格式

rep.setContentType("text/html;charset=utf-8");

//获取请求信息

String uname = req.getParameter("uname");

String pwd = req.getParameter("pwd");

System.out.println(uname+"---"+pwd);

3.2.4 修改登录页面中表单中用户名和密码提交的键名,,将修改后的表单代码粘贴作为答案

<input type="text" class="input input-big" name="uname" placeholder="登录账号" data-validate="required:请填写账号" />

<input type="password" class="input input-big" name="pwd" placeholder="登录密码" data-validate="required:请填写密码" />

3.2.5 简述MVC的编程思想及其好处

MVC编程是一种设计思想理念,MVC分为三部分,即为:

Model模型:具体指service层和Dao层

View视图层:即前端jsp和html等

Controller控制层:具体指controller和servlet等

它是用一种业务逻辑、数据与界面显示分离的方法来组织代码,将众多的业务逻辑聚集到一个部件里面,在需要改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑,达到减少编码的时间。

MVC的优点:

1.降低耦合度

视图层和业务层分离,这样就允许更改视图层代码而不用重新编译模型和控制器代码,同样,一个应用的业务流程或者业务规则的改变只需要改动MVC的模型层即可。因为模型与控制器和视图相分离,所以很容易改变应用程序的数据层和业务规则。

2.重用性高

MVC模式允许使用各种不同样式的视图来访问同一个服务器端的代码,因为多个视图能共享一个模型,它包括任何WEB(HTTP)浏览器或者无线浏览器(wap),比如,用户可以通过电脑也可通过手机来订购某样产品,虽然订购的方式不一样,但处理订购产品的方式是一样的。由于模型返回的数据没有进行格式化,所以同样的构件能被不同的界面使用。

3.部署快,生命周期成本低

MVC使开发和维护用户接口的技术含量降低。使用MVC模式使开发时间得到相当大的缩减,它使程序员(Java开发人员)集中精力于业务逻辑,界面程序员(HTML和JSP开发人员)集中精力于表现形式上。

4.可维护性高

分离视图层和业务逻辑层也使得WEB应用更易于维护和修改。

04MVC实现登录查询用户信息(A)

4.3编程题

4.3.1 根据视频讲解,在项目中完成MVC中service层和Dao的创建,只需要完成借口及其实现类的创建,先不声明功能方法。

Dao层接口及其实现类:

public interface UserDao {}

public class UserDaoImpl implements UserDao{}

Service层接口及其实现类:

public interface UserService {}

public class UserServiceImpl implements UserService{}

4.3.2 根据视频创建User实体类

public class User {

private int uid;

private String uname;

private String pwd;

private String sex;

private int age;

private String birthday;

public User() {

super();

// TODO Auto-generated constructor stub

}

public User(int uid, String uname, String pwd, String sex, int age,

String birthday) {

super();

this.uid = uid;

this.uname = uname;

this.pwd = pwd;

this.sex = sex;

this.age = age;

this.birthday = birthday;

}

public int getUid() {

return uid;

}

public void setUid(int uid) {

this.uid = uid;

}

public String getUname() {

return uname;

}

public void setUname(String uname) {

this.uname = uname;

}

public String getPwd() {

return pwd;

}

public void setPwd(String pwd) {

this.pwd = pwd;

}

public String getSex() {

return sex;

}

public void setSex(String sex) {

this.sex = sex;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public String getBirthday() {

return birthday;

}

public void setBirthday(String birthday) {

this.birthday = birthday;

}

@Override

public String toString() {

return "User [uid=" + uid + ", uname=" + uname + ", pwd=" + pwd

+ ", sex=" + sex + ", age=" + age + ", birthday=" + birthday

+ "]";

}

}

4.3.3 根据视频讲解导入MySQL的jar包,并导入数据库操作工具类以及db.properties的配置

driver=com.mysql.jdbc.Driver

url=jdbc:mysql://localhost:3310/project?useUnicode=true&characterEncoding=utf-8

username=root

password=123456

4.3.4 根据视频完成业务层和数据库层功能代码实现

Dao层接口代码:

public interface UserDao {

//根据姓名密码查询用户

User getUserInfo(String uname, String pwd);

}

Service层接口代码:

public interface UserService {

//根据姓名,密码查询用户

User getUserInfoService(String uname, String pwd);

}

Dao层实现类代码:

public User getUserInfo(String uname, String pwd) {

//声明变量

Connection conn =null;

PreparedStatement ps=null;

ResultSet rs= null;

User u=null;

try {

//创建连接

conn=DBUtil.getConnection();

//创建SQL命令

String sql="select * from t_users where uname=? and pwd=?";

//创建SQL命令对象

ps=conn.prepareStatement(sql);

//给占位符赋值

ps.setString(1,uname);

ps.setString(2, pwd);

//执行SQL命令

rs=ps.executeQuery();

//遍历

while(rs.next()){

//给变量赋值

u=new User();

u.setUid(rs.getInt("uid"));

u.setUname(rs.getString("uname"));

u.setPwd(rs.getString("pwd"));

u.setSex(rs.getString("sex"));

u.setAge(rs.getInt("age"));

u.setBirthday(rs.getString("birthday"));

/* u.setBirthday(rs.getString("birthday"));*/

}

} catch (Exception e) {

e.printStackTrace();

}finally{//关闭资源

DBUtil.closeAll(rs, ps, conn);

}

//返回结果

return u;

}

Service层实现类代码:

//创建dao层对象

UserDao ud=new UserDaoImpl();

//实现登录功能

@Override

public User getUserInfoService(String uname, String pwd) {

//处理业务数据

return ud.getUserInfo(uname,pwd);

}

4.3.5 根据视频讲解运行项目在后台打印查询到的用户信息。

05用户登录失败和成功处理

5.1 编程题

5.1.1 根据视频讲解,完成登录失败重定向登录页面,并在登录页面显示提示语 用户名或密码错误

if(u!=null){

//存储用户名信息

session.setAttribute("uname", uname);

rep.sendRedirect("/project/main.jsp");

}else{

//存储登陆失败信息

session.setAttribute("flag", "loginfalse");

rep.sendRedirect("/project/Login.jsp");

}

<%

Object obj=session.getAttribute("flag");

if(obj!=null)

{

if("loginfalse".equals((String)obj))

{

%>

<div style="text-align: center;color:red;">用户名或密码错误</div>

<%

}else if("regsucceed".equals((String)obj))

{%>

<div style="text-align: center;color:red;">注册成功</div>

<% }

}

session.invalidate();

%>

5.1.2 完成退出登录按钮的添加。

<div class="head-l" style="position: relative;left: 910px"><span style="font-size: 15px;color: white">当前用户:<%=session.getAttribute("uname") %></span> &nbsp;&nbsp;<a id="out" class="button button-little bg-red" href="out" ><span class="icon-power-off"></span> 退出登录</a> </div>

5.1.3 完成登录成功,重定向主页面代码实现。并在主页显示当前登录的用户。

<div class="head-l" style="position: relative;left: 910px"><span style="font-size: 15px;color: white">当前用户:<%=session.getAttribute("uname") %></span> &nbsp;&nbsp;<a id="out" class="button button-little bg-red" href="out" ><span class="icon-power-off"></span> 退出登录</a> </div>

06用户退出功能实现

6.2 上级练习

6.2.1 简述用户退出的实现思路

第一步:在main.jsp中添加退出登录按钮,为超链接<a></a>标签

第二步:我们点击退出登录按钮,超链接向OutServlet发送请求,servlet处理请求,销毁session对象,并重定向到登录页面。

6.2.2 声明并创建Servlet处理用户退出登录的请求。

public class OutServlet extends HttpServlet {

@Override

protected void service(HttpServletRequest req, HttpServletResponse rep)

throws ServletException, IOException {

//设置请求编码格式

req.setCharacterEncoding("utf-8");

//设置响应编码格式

rep.setContentType("text/html;charset=utf-8");

//获取请求信息

//处理请求数据

HttpSession session = req.getSession();

session.invalidate();

//响应处理结果

//重定向

rep.sendRedirect("/project/Login.jsp");

}

}

6.2.3 修改退出登录按钮的herf地址为退出登录的Servlet路径,然后运行项目,点击退出登录查看运行效果

6.2.3 修改代码给退出登录按钮添加退出提示语。

<script type="text/javascript">

$(function(){

$("#out").click(function(){

return window.confirm("你真的要退出");

})

})

</script>

07创建用户注册页面(1)

7.1 编程题

7.1.1 根据视频讲解,在登录页面中添加注册按钮。

7.1.2 根据视频讲解,创建注册页面并将套用模板内容。

7.1.3 根据视频讲解,修改注册页面原有模板内容,修改为我们自己的注册页面,并添加用户性别选项。

08创建用户注册页面(2)

8.1 编程题

8.1.1 根据视频讲解,完成用户性别选择功能。

8.1.2 完善注册页面,添加用户年龄和出生日期选项

8.1.3 修改注册页面中自带的基础表单校验。

09用户注册功能实现

9.1 编程题

9.1.1 根据视频讲解,继续完成注册页面,修改注册页面表单数据提交的键名。

9.1.2 创建并声明处理注册功能的Servlet

9.1.3 完成注册功能的业务层和数据库层的代码

9.1.4 在regServlet中完成注册成功和注册失败的代码逻辑,然后运行项目,点击注册观察运行效果。

10注册成功提示语&项目问题引入和解决方案

10.1 编程题

10.1.1 根据视频讲解,完成注册成功提示语功能

10.1.2 视频中目前项目存在的问题是什么?、

因为目前前端每发送一个请求都要求有一个对应的servlet来处理请求,随着项目的扩大,请求也就会越多,如果还是这种的话,就会导致servlet过多,导致资源浪费

10.1.3 视频中给出的解决方案是什么?

利用servlet中service方法来处理,将不同功能的请求封装成方法,由service方法来调用其对应的功能请求方法

11service中实现动态调用请求处理方法(1)

11.1 编程题

11.1.1 根据视频创建DataServlet,并声明登录,退出,注册三个方法。

11.1.2 根据视频讲解在DataServlet中的service方法中完成动态调用方法处理请求的反射代码的编写

12service中实现动态调用请求处理方法(2)

12.1 编程题

12.1.1 根据视频讲解完善DataServlet中登录,注册,退出方法的中的代码实现。

12.1.2 修改登录页面在表单中添加隐藏便签,添加请求数据中的方法名,完成登录功能

12.1.3 修改退出按钮,完成退出功能

12.1.4 修改注册页面,完成注册功能

12.1.5 视频中最后提出的问题是什么?

因在真实开发过程中,我们一般不会只有一个servlet,一般是一个相似模块对应一个servlet,但对于许多servlet,我们也不能在每个servlet中都声明一下反射代码。

13-向上抽取BaseServlet类

13.1 编程题

13.1.1 根据视频,完成BaseServlet的创建

13.1.2 根据视频,修改DataServlet继承BaseServlet

然后启动项目重新访问相关功能。

13.1.3 BaseServlet的使用流程是?

第一步:定义BaseServlet并继承HttpServlet,因不想被访问,所以无需在web.xml中配置映射路径,而且要定义有abstract修饰作为抽象类。

第二步:在BaseServlet重写service方法,service方法利用反射来调用我们自己写的方法,

第三步:创建servlet继承BaseServlet,

14-项目总结和缺陷

14.1 简答题

14.1.1 视频中项目总结的六个内容是?

答:1、套用模版进行页面快速构建

在自己的项目中创建jsp文件

然后将模版中的前端相关代码赋值到自己的jsp文件中

将静态资源复制到webRoot下

2、MVC的开发流程

M:model service dao pojo

v:view jsp js css html

c:controller Servlet

3、Servlet+jsp+jdbc的功能开发流程

1、浏览器发起页面请求直接给jsp

2、浏览器发起功能请求给servlet,servlet调用service,service进行业务逻辑处理,

service调用dao,dao层进行数据库操作(jdbc),dao层将处理结果返回给service

service再将结果返回给servlet,(或者继续请求转发或者重定向其他Servlet继续处理) ,

请求转发或者重定向给jsp,jsp做出页面响应。

4、request和session作用域的使用

request:请求转发的数据流转的载体

session:重定向的数据流转的载体(但是session可以解决同一个用户的不同请求的数据库共享问题)。

5、浏览器发起请求到服务器请求发起的方式(重点记忆)

非ajax请求

form表单提交:action数据提交地址,method:数据提交方式

超链接标签:href:为数据提交地址,可以直接使用?拼接请求数据,类似form表单的get请求方式。

js中的window.location.herf:为数据提交地址,可以直接使用?拼接请求数据,类似form表单的get请求方式。

注意:

使用以上请求方式发起的请求,浏览器在接收到响应内容后,会将原有内容覆盖,显示响应结果。

6、BaseServlet的抽取和使用

反射

抽象类

14.1.2 根据视频,项目目前仍然存在的缺陷是?

1.jsp获取servlet流转的数据比较麻烦

2.在jsp中利用java代码块书写和阅读不便

3.过分依赖session,以至于session失效,导致许多功能不能正常运行

分享/讲解/扩展思考

点名提问从第一节课到最后一节课分别学到了什么,直到同学们把所有的知识点都说出来并且保证无误。

jsp大作业_Servlet与JSP配合使用基本案例相关推荐

  1. JSP大作业数据库_本地MySQL【种种问题】

    JSP大作业数据库MySQL第1部分.zip: 链接:https://pan.baidu.com/s/1ZHwxAnATQSSjC-F6EpxeUw 提取码:30kw JSP大作业数据库MySQL第二 ...

  2. jsp大作业实现TOP粉丝俱乐部

    jsp大作业,题目:TOP粉丝俱乐部,实现功能:登陆,注册,主页信息查看,购买周边,留言板,喜爱程度测试,对粉丝俱乐部的意见调查. login.jsp 登录页面: <%@page content ...

  3. jsp servlet示例_Servlet和JSP中的文件上传示例

    jsp servlet示例 使用Servlet和JSP将文件上传到服务器是Java Web应用程序中的常见任务. 在对Servlet或JSP进行编码以处理文件上传请求之前,您需要了解一点有关HTML和 ...

  4. matlab数字图像处理大作业_线上教学优秀案例(16) | 数字图像处理基于蓝墨云+企业微信的线上教学经验分享...

    [前言]目前我校在线课堂教学如火如荼,老师们在各大教学平台化身"直播高手""网课达人"倾心打造精彩课堂,有效保证了在线学习与线下课堂教学质量实质等效.为进一步推 ...

  5. javaweb基于JSP+Servlet开发水费管理系统+论文 大作业 毕业设计

    基于JSP+Servlet开发水费管理系统+论文(大作业/毕业设计) 开发环境:   Windows操作系统 开发工具:MyEclipse+Jdk+Tomcat+SQLServer数据库 运行效果图: ...

  6. Web课程设计-仿当当网-增删改查-java+jsp+mysql-期末大作业

    仿当当网web课程设计-jsp+java+mysql-mvc-期末大作业 Web课程设计 一.系统简介 二.系统开发及运行环境 三.系统设计 四.系统实现 Web课程设计 这篇文章是为了记录自己在we ...

  7. javaweb基于JSP开发辛馨墙衣壁纸企业官网宣传网站系统+全套文档+PPT 毕业设计 课程设计 大作业源码

    基于JSP开发辛馨墙衣企业宣传网站系统+全套文档+PPT(大作业/毕业设计) 开发环境:   Windows操作系统 开发工具: Eclipse+Jdk+Tomcat+Mysql数据库 运行效果图: ...

  8. java大作业用jsp数据库java_JSP数据库大作业 - 不是太阳也要发光的个人页面 - OSCHINA - 中文开源技术交流社区...

    本人QQ:240814476  欢迎大家提问,共同学习,共同进步. 最近做了一个数据库大作业啊,想用JSP做,发现代码量好大,在做前台的时候感觉手忙脚乱,没时间. 可能是本人拖了太久的原因吧 . 做的 ...

  9. javaweb基于JSP开发Java在线学习平台 大作业 毕业设计源码

    基于JSP开发Java在线学习平台:(毕业设计/大作业) 开发环境:    Windows操作系统 开发工具: MyEclipse+Jdk+Tomcat+MYSQL数据库 运行效果图: 基于JSP开发 ...

最新文章

  1. 存内计算能否成为下一代AI芯片的关键
  2. 再谈 Linux下的nanosleep函数
  3. 『ACM C++』 PTA 天梯赛练习集L1 | 048-49
  4. mysql8.0.11-1 修改密码报错
  5. 8.621 - Secret Research
  6. activemq网页管理端使用_极周PC端(网页版)使用说明
  7. 第一次的数电作业-----数据选择,代码转换,译码
  8. android 打好的补丁位置,Android 6.0上打完第一个补丁后再打新补丁Crash
  9. windows XP虚拟机安装
  10. Numpy的终极备忘录
  11. 非阿里云域名如何设置DNS解析
  12. 突发奇想的分享一张Windows经典图片
  13. 路由器中的DMZ功能是什么?功能及设置方法详解
  14. 移动的 ipcam 视频无处不在
  15. 开发APP的java工具_程序猿必备的java的app开发工具有哪些
  16. get请求获得传递参数
  17. 简单易懂的汉明码(海明码)校验原理
  18. 【OC】Blocks模式
  19. AKG K420 耳机线的维修
  20. 简单明了的正则表达式汇总

热门文章

  1. 给软件工程师的学习参考
  2. 2010年经典语录,我们全OUT了
  3. MFC在其他类中访问主窗体的成员
  4. js通过jquery的jsonp跨域请求
  5. 一周学会Mootools 1.4中文教程:(4)类型
  6. 数据可视化(3)--Google Charts
  7. Tom邮箱注册机|注册辅助工具!!!
  8. Visual Assist X Options 注释设置-类
  9. 大数据之-Hadoop3.x_MapReduce_ReduceJoin案例Mapper---大数据之hadoop3.x工作笔记0130
  10. MyCat分布式数据库集群架构工作笔记0010---高可用_Mycat主--从复制配置下