java web 学习笔记 - servlet02
1.servlet的跳转
客户端跳转: 通过doget函数中的response参数调用resp.sendRedirect(url);
代码如下
protected void doGet(HttpServletRequest req,HttpServletResponse resp)
throws ServletException,IOException{
req.getSession().setAttribute("sessionid", "123456");
req.setAttribute("reqid", "123456");
resp. sendRedirect("redirect.jsp");
}
服务器跳转: 通过doget函数中的request参数获取RequestDispatcher()对象,然后再调用forward函数
代码如下:
protected void doGet(HttpServletRequest req,HttpServletResponse resp)
throws ServletException,IOException{
req.getSession().setAttribute("sessionid", "123456");
req.setAttribute("reqid", "123456");
req.getRequestDispatcher("redirect.jsp").forward(req,resp); //从HttpServletRequest的父类ServletRequest中找该函数
}
2.Web开发模式
Mode I : jsp + javabean 模式,DAO技术实现,一个Connection类, 一个DAO接口,一个impl实现类,一个代理类负责调用connection impl实现类,打开关闭数据库连接。
还有一个javabean类。 Mode I目前项目中不怎么使用,一般是写一些接单的示例程序用。

Mode II : jsp + servlet +javabean模式,简称MVC模式。

通过Servlet(C) 获取客户端的请求,调用javabean访问数据库,然后将取得的数据返回到jsp来显示。


MVC设计模式主要采用request的属性范围!!!!
3.MVC模式的设计与应用
需要编写的代码:
M javabean: vo 类,dbc类, IDAO接口 impl实现类 proxy代理类 Factory工厂类
C servlet: servlet类 ,web.xml中配置i相应的映射
V jsp : 表单.jsp
个人心得:
- vo类没说的,就是一个简单的javabean,包括成员变量,get,set方法。
- dbc类是数据库连接类,主要实现一个public connection getConnection(); public void close() 两个函数
- 关键两句话,Class.forName(DBDRIVER);//初始化数据库引擎
Connection conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWD)
- IDAO接口,其实是一个抽象接口类,要实现什么就直接写接单的抽象函数。
- public boolean findUser(User user) throws Exception;
- impl类 ,其实就是IDAO接口的一个实现类,它不关心异常处理,connection打开或者关闭,它只做具体sql相关的操作
关键语句有如下几个
class impl implements IDAO{
private Connection conn =null;
private PreparedStatement pstmt = null;
public impl(Connection conn){ //构造函数,不关心Connection的打开,直接获取Connection连接
this.conn = conn;
}
public boolean findUser(User user) throws Exception{ // 不关心异常处理,直接抛出
String sql =".......where userid=? and passwd =?"
pstmt = conn.prepareStatement(sql);
pstmt.setString(1,name);
pstmt.setString(2,passwd);
ResultSet rs = pstmt.executeQuery();
while(rs.next()){
.....rs.getString(1);
}
}
}
- proxy类 ,其实就是调用impl类,并处理异常的
关键语句如下
class proxy implements IDAO{
DatabaseConnection dbc = null;
IDAO dao= null;
public proxy(){ //构造函数中要生成dao对象
this.dbc = new DatabaseConnection();
this.dao = new Impl(dbc.getConnection())
}
public boolean findUser(User user) throws Exception{
try{
return this.dao.findUser(user);
}catch(Exception e){
throw e;
}finally{
this.dbc.close();
}
}
}
- Factory 类,主要是可以调用proxy类
关键语句
pulbic static IDAO getDAOInstance(){
return new proxy();
}
- Servlet类,主要是实现doGet方法,doPost通过调用doGet实现。
关键语句:
doGet(request,response){
List<String> info = new ArrayList<String>() ;
userid = request.getParameter("userid");
passwd = request.getParameter("passwd");
User user = new User();
user.setUserid(userid);
user.setpasswd(passwd);
if (Factory.getDAOInstance().findUser(user) == true){
info.add("登陆成功,欢迎 "+username);
}
request.setAttribute("info",info);
request.getRequestDispatcher(url).forward(request,response);
}
jsp文件,就好说了,很简单了
1.实现标准的html代码,form,input
2.在jsp代码中,关键语句如下
<%
Request.setCharacterEncoding("GBK");
%>
<%
List<String> info = (List<String>)Request.getAttribute("info");
Iterator<String> itr = info.iterator();
while(itr.hasNext()){
..............
itr.next();
...........
%>
手写代码如下:
==========================================================================
vo类:
package cn.liys.login.vo;
public class User{
private String userid;
private String username;
private String userpassword;
public void setUserId(String userid){
this.userid = userid;
}
public void setUsername(String username){
this.username=username;
}
public void setUserpassword(String userpassword){
this.userpassword=userpassword;
}
public String getUserid(){
return this.userid;
}
public String getUsername(){
return this.username;
}
public String getUserpassword(){
return this.userpassword;
}
}
dbc类:
package cn.liys.login.dbc;
import java.sql.*;
public class UserDBConnection{
private static final String DBDRIVER ="org.gjt.mm.mysql.Driver";
private static final String DBURL ="jdbc:mysql://localhost:3306/mldn";
private static final String DBUSER = "root";
private static final String DBPASSWORD ="123456";
private Connection conn = null;
public UserDBConnection() throws Exception{
Class.forName(DBDRIVER);
conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);
}
public Connection getConnection(){
return this.conn;
}
public void close()throws Exception{
if(this.conn != null){
try{
this.conn.close() ;
}catch(Exception e){
throw e ;
}
}
}
}
IDAO接口类
package cn.liys.login.dao;
import cn.liys.login.vo.*;
public interface IUserDAO{
public boolean findUser(User user) throws Exception;
}
impl实现类
package cn.liys.login.dao.impl;
import cn.liys.login.vo.*;
import cn.liys.login.dao.*;
import cn.liys.login.dbc.*;
import java.sql.*;
public class UserDAOImpl implements IUserDAO{
private Connection conn = null;
private PreparedStatement pstmt = null;
public UserDAOImpl(Connection conn){
this.conn = conn;
}
public boolean findUser(User user) throws Exception{
boolean flag = false;
String sql = "select name from user where userid =? and password=?";
this.pstmt = this.conn.prepareStatement(sql);
this.pstmt.setString(1,user.getUserid()) ;
this.pstmt.setString(2,user.getUserpassword()) ;
ResultSet rs = pstmt.executeQuery();
if(rs.next()){
user.setUsername(rs.getString(1)) ; // 取出一个用户的真实姓名
flag = true;
}else{
flag = false;
}
this.pstmt.close() ;
return flag;
}
}
proxy代理类
package cn.liys.login.dao.proxy;
import cn.liys.login.vo.*;
import cn.liys.login.dao.*;
import cn.liys.login.dao.impl.*;
import cn.liys.login.dbc.*;
import java.sql.*;
public class UserDAOProxy implements IUserDAO{
private UserDBConnection dbc = null;
private UserDAOImpl dao = null;
public UserDAOProxy(){
try{
this.dbc = new UserDBConnection();
}catch (Exception e){
e.printStackTrace();
}
this.dao = new UserDAOImpl(dbc.getConnection());
}
public boolean findUser(User user) throws Exception{
try{
return this.dao.findUser(user);
}catch(Exception e){
throw e;
}finally{
this.dbc.close();
}
}
}
Factory工厂类
package cn.liys.login.dao.factory;
import cn.liys.login.vo.*;
import cn.liys.login.dao.*;
import cn.liys.login.dao.proxy.*;
public class UserDAOFactory{
public static IUserDAO getUserDAOInstance(){
return new UserDAOProxy();
}
}
===============================================================
Servlet类:
package cn.liys.login.servlet;
import cn.liys.login.vo.*;
import cn.liys.login.dao.factory.*;
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class UserServlet extends HttpServlet{
private User user = new User();
List<String> info = new ArrayList<String>();
private String userid = null;
private String passwd = null;
protected void doGet(HttpServletRequest req,HttpServletResponse resp)
throws ServletException,IOException{
boolean flag = false;
userid = req.getParameter("userid");
passwd = req.getParameter("passwd");
if ((userid == null) ||("".equals(userid))){
info.add("用户id不能为空");
}
if ((passwd == null) || ("".equals(passwd))){
info.add("密码不能为空");
}
if (info.size() == 0){
user.setUserId(userid);
user.setUserpassword(passwd);
System.out.println(userid);
System.out.println(passwd);
try{
flag = UserDAOFactory.getUserDAOInstance().findUser(user);
if (flag == true){
info.add("登陆成功!");
}else{
info.add("登陆失败!");
}
}
catch(Exception e){
e.printStackTrace();
}
}
req.setAttribute("info",info);
req.getRequestDispatcher("login.jsp").forward(req,resp);
}
protected void doPost(HttpServletRequest req,HttpServletResponse resp)
throws ServletException,IOException{
this.doGet(req,resp);
}
}
====================================================================
JSP:
<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.util.*"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>
mvc的第一个实现用例,登陆窗口
</title>
</head>
<body>
<%
request.setCharacterEncoding("GBK");
%>
<%
List<String> info = (List<String>) request.getAttribute("info");
if (info!=null){
Iterator<String> itr = info.iterator();
while(itr.hasNext()){
%>
<%=itr.next()%>
<%
}
}
%>
<form action="UserServlet" method="post">
用户ID:<input type ="text" name="userid"> <br>
密 码:<input type="text" name="passwd">
<br>
<input type="submit" value="提交">
<input type="reset" value="重置">
</form>
</body>
</html>
java web 学习笔记 - servlet02的更多相关文章
- [原创]java WEB学习笔记95:Hibernate 目录
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- [原创]java WEB学习笔记75:Struts2 学习之路-- 总结 和 目录
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- [原创]java WEB学习笔记66:Struts2 学习之路--Struts的CRUD操作( 查看 / 删除/ 添加) 使用 paramsPrepareParamsStack 重构代码 ,PrepareInterceptor拦截器,paramsPrepareParamsStack 拦截器栈
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- java web 学习笔记 编码问题总结
java web 学习笔记 编码问题总结 1.非form表单中提交的中文参数---------------------------传递给Servlet服务器时,默认以iso-8859-1解码 ...
- Java Web 学习笔记 1
Java Web 学习笔记 1 一.Web开发基础 1-1 Java Web 应用开发概述 1.1.1 C/S C/S(Client/Server)服务器通常采用高性能的PC机或工作站,并采用大型数据 ...
- [原创]java WEB学习笔记11:HttpServlet(HttpServletRequest HttpServletRsponse) 以及关于 Servlet 小结
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- Java Web学习笔记之---EL和JSTL
Java Web学习笔记之---EL和JSTL (一)EL (1)EL作用 Expression Language(表达式语言),目的是代替JSP页面中复杂的代码 (2)EL表达式 ${变量名} ( ...
- Java Web学习笔记之---JSP
Java Web学习笔记之---JSP (一)JSP常用语法 (1)HTML注释 <!--所要注释的内容 --> 在客户端显示一个注释. (2)隐藏注释 <%--所要注释的内容--% ...
- JAVA Web学习笔记
JAVA Web学习笔记 1.JSP (java服务器页面) 锁定 本词条由“科普中国”百科科学词条编写与应用工作项目 审核 . JSP全名为Java Server Pages,中文名叫java服务器 ...
随机推荐
- C项目实践--贪吃蛇(2)
12.按键处理 函数名称:key_down 函数功能:按键处理函数,主要包括:1.刚开始或结束时的按键处理,游戏开始时,按任意键进入游戏,游戏运行过程中按回车键是游戏的暂停或开始的切换键:2.游戏运行 ...
- c# 32位机和64位机 读取Excel内容到DataSet
// ----------------------32位机 //注释说明 //ExclePath 为Excel路径 批号 是指Excel文件中某一列必填项 public static DataSet ...
- YTU 2982: 奔跑吧,小明!
2982: 奔跑吧,小明! 时间限制: 1 Sec 内存限制: 128 MB 提交: 36 解决: 2 题目描述 小明陷入一个充满陷阱的密道之中,现在他要逃脱这里!到达密道的出口即可离开这处绝境! ...
- HDU - 2066 一个人的旅行(最短路径)(模板)
d.每组的第一行是三个整数T,S和D,表示有T条路,和草儿家相邻的城市的有S个(草儿家到这个城市的距离设为0),草儿想去的地方有D个: 求D个城市中距离草儿家最近的距离. s.进行1次单源最短路,找出 ...
- 配置磁盘映射(在服务器和eclipse 中)
在eclipse中配置磁盘映射和项目名称访问省略:
- c语言和oc对比
1)源文件对比 思考&实现1: 1)在C语言中,我们遇到不同后缀的文件有哪些? .c .o .out .h 2.基本语法对比 1)数据类型对比学习 2)变量的定义对比 3)流程控制语句对比 1 ...
- BZOJ_5343_[Ctsc2018]混合果汁_二分答案+主席树
BZOJ_5343_[Ctsc2018]混合果汁_二分答案+主席树 题意:给出每个果汁的价格p,美味度d,最多能放的体积l.定义果汁混合后的美味度为果汁的美味度的最小值. m次询问,要求花费不大于g, ...
- 【转】python字符串/元组/列表/字典互转
#-*-coding:utf-8-*- #1.字典 dict = {'name': 'Zara', 'age': 7, 'class': 'First'} #字典转为字符串,返回:<type ' ...
- IJ:目录
ylbtech-IJ:目录 1.返回顶部 2.返回顶部 3.返回顶部 4.返回顶部 5.返回顶部 6.返回顶部 7.返回顶部 8.返回顶部 9.返回顶部 10. ...
- 【183】VMware + CentOS 安装教程等
目录: VMware 虚拟机安装 虚拟机上安装 CentOS VMware Tools 安装 为程序增加环境变量 其他 1. VMware 虚拟机安装 ※ 参考:VMware 虚拟机安装使用教程( ...