jsp大作业_Servlet与JSP配合使用基本案例
训练大纲(第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> <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> <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配合使用基本案例相关推荐
- JSP大作业数据库_本地MySQL【种种问题】
JSP大作业数据库MySQL第1部分.zip: 链接:https://pan.baidu.com/s/1ZHwxAnATQSSjC-F6EpxeUw 提取码:30kw JSP大作业数据库MySQL第二 ...
- jsp大作业实现TOP粉丝俱乐部
jsp大作业,题目:TOP粉丝俱乐部,实现功能:登陆,注册,主页信息查看,购买周边,留言板,喜爱程度测试,对粉丝俱乐部的意见调查. login.jsp 登录页面: <%@page content ...
- jsp servlet示例_Servlet和JSP中的文件上传示例
jsp servlet示例 使用Servlet和JSP将文件上传到服务器是Java Web应用程序中的常见任务. 在对Servlet或JSP进行编码以处理文件上传请求之前,您需要了解一点有关HTML和 ...
- matlab数字图像处理大作业_线上教学优秀案例(16) | 数字图像处理基于蓝墨云+企业微信的线上教学经验分享...
[前言]目前我校在线课堂教学如火如荼,老师们在各大教学平台化身"直播高手""网课达人"倾心打造精彩课堂,有效保证了在线学习与线下课堂教学质量实质等效.为进一步推 ...
- javaweb基于JSP+Servlet开发水费管理系统+论文 大作业 毕业设计
基于JSP+Servlet开发水费管理系统+论文(大作业/毕业设计) 开发环境: Windows操作系统 开发工具:MyEclipse+Jdk+Tomcat+SQLServer数据库 运行效果图: ...
- Web课程设计-仿当当网-增删改查-java+jsp+mysql-期末大作业
仿当当网web课程设计-jsp+java+mysql-mvc-期末大作业 Web课程设计 一.系统简介 二.系统开发及运行环境 三.系统设计 四.系统实现 Web课程设计 这篇文章是为了记录自己在we ...
- javaweb基于JSP开发辛馨墙衣壁纸企业官网宣传网站系统+全套文档+PPT 毕业设计 课程设计 大作业源码
基于JSP开发辛馨墙衣企业宣传网站系统+全套文档+PPT(大作业/毕业设计) 开发环境: Windows操作系统 开发工具: Eclipse+Jdk+Tomcat+Mysql数据库 运行效果图: ...
- java大作业用jsp数据库java_JSP数据库大作业 - 不是太阳也要发光的个人页面 - OSCHINA - 中文开源技术交流社区...
本人QQ:240814476 欢迎大家提问,共同学习,共同进步. 最近做了一个数据库大作业啊,想用JSP做,发现代码量好大,在做前台的时候感觉手忙脚乱,没时间. 可能是本人拖了太久的原因吧 . 做的 ...
- javaweb基于JSP开发Java在线学习平台 大作业 毕业设计源码
基于JSP开发Java在线学习平台:(毕业设计/大作业) 开发环境: Windows操作系统 开发工具: MyEclipse+Jdk+Tomcat+MYSQL数据库 运行效果图: 基于JSP开发 ...
最新文章
- 存内计算能否成为下一代AI芯片的关键
- 再谈 Linux下的nanosleep函数
- 『ACM C++』 PTA 天梯赛练习集L1 | 048-49
- mysql8.0.11-1 修改密码报错
- 8.621 - Secret Research
- activemq网页管理端使用_极周PC端(网页版)使用说明
- 第一次的数电作业-----数据选择,代码转换,译码
- android 打好的补丁位置,Android 6.0上打完第一个补丁后再打新补丁Crash
- windows XP虚拟机安装
- Numpy的终极备忘录
- 非阿里云域名如何设置DNS解析
- 突发奇想的分享一张Windows经典图片
- 路由器中的DMZ功能是什么?功能及设置方法详解
- 移动的 ipcam 视频无处不在
- 开发APP的java工具_程序猿必备的java的app开发工具有哪些
- get请求获得传递参数
- 简单易懂的汉明码(海明码)校验原理
- 【OC】Blocks模式
- AKG K420 耳机线的维修
- 简单明了的正则表达式汇总
热门文章
- 给软件工程师的学习参考
- 2010年经典语录,我们全OUT了
- MFC在其他类中访问主窗体的成员
- js通过jquery的jsonp跨域请求
- 一周学会Mootools 1.4中文教程:(4)类型
- 数据可视化(3)--Google Charts
- Tom邮箱注册机|注册辅助工具!!!
- Visual Assist X Options 注释设置-类
- 大数据之-Hadoop3.x_MapReduce_ReduceJoin案例Mapper---大数据之hadoop3.x工作笔记0130
- MyCat分布式数据库集群架构工作笔记0010---高可用_Mycat主--从复制配置下