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>
密&nbsp;&nbsp;码:<input type="text" name="passwd">
<br>
<input type="submit" value="提交">
<input type="reset" value="重置">
</form>

</body>

</html>

  

java web 学习笔记 - servlet02的更多相关文章

  1. [原创]java WEB学习笔记95:Hibernate 目录

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  2. [原创]java WEB学习笔记75:Struts2 学习之路-- 总结 和 目录

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  3. [原创]java WEB学习笔记66:Struts2 学习之路--Struts的CRUD操作( 查看 / 删除/ 添加) 使用 paramsPrepareParamsStack 重构代码 ,PrepareInterceptor拦截器,paramsPrepareParamsStack 拦截器栈

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  4. java web 学习笔记 编码问题总结

       java web 学习笔记 编码问题总结 1.非form表单中提交的中文参数---------------------------传递给Servlet服务器时,默认以iso-8859-1解码 ...

  5. Java Web 学习笔记 1

    Java Web 学习笔记 1 一.Web开发基础 1-1 Java Web 应用开发概述 1.1.1 C/S C/S(Client/Server)服务器通常采用高性能的PC机或工作站,并采用大型数据 ...

  6. [原创]java WEB学习笔记11:HttpServlet(HttpServletRequest HttpServletRsponse) 以及关于 Servlet 小结

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  7. Java Web学习笔记之---EL和JSTL

    Java Web学习笔记之---EL和JSTL (一)EL (1)EL作用 Expression  Language(表达式语言),目的是代替JSP页面中复杂的代码 (2)EL表达式 ${变量名} ( ...

  8. Java Web学习笔记之---JSP

    Java Web学习笔记之---JSP (一)JSP常用语法 (1)HTML注释 <!--所要注释的内容 --> 在客户端显示一个注释. (2)隐藏注释 <%--所要注释的内容--% ...

  9. JAVA Web学习笔记

    JAVA Web学习笔记 1.JSP (java服务器页面) 锁定 本词条由“科普中国”百科科学词条编写与应用工作项目 审核 . JSP全名为Java Server Pages,中文名叫java服务器 ...

随机推荐

  1. Spring Security调研记录【七】--核心模型与实现

    网上有非常多关于Spring Security文章中,都觉得Spring Security(相对于shiro)过于复杂,个人觉得复杂的是Spring Security的官方文档而不是Spring Se ...

  2. UESTC 982质因子分解

    读入一个自然数,将nn分解为质因子连乘的形式输出. Input 有多组测试数据.输入的第一行是整数TT(0<T≤10000),表示测试数据的组数.每一组测试数据只有一行,包含待分解的自然数nn. ...

  3. wpa_supplicant介绍【转】

    本文转载自:https://zhuanlan.zhihu.com/p/24246712 一.什么是wpa_spplicant wpa_supplicant本是开源项目源码,被谷歌修改后加入Androi ...

  4. 区块链共识算法 PBFT(拜占庭容错)、PAXOS、RAFT简述

    共识算法 区块链中最重要的便是共识算法,比特币使用的是POS(Proof of Work,工作量证明),以太币使用的是POS(Proof of Stake,股权证明)使得算理便的不怎么重要了,而今PO ...

  5. Java-Runoob-高级教程-实例-字符串:14. Java 实例 - 连接字符串

    ylbtech-Java-Runoob-高级教程-实例-字符串:14. Java 实例 - 连接字符串 1.返回顶部 1. Java 实例 - 连接字符串  Java 实例 以下实例演示了通过 &qu ...

  6. 关于centOS7的一些笔记

    使用systemctl查看 开启 关闭服务: 查看: systemctl status arcgis.server 开启: systemctl start arcgis.server 关闭: syst ...

  7. bzoj 5277: [Usaco2018 Open]Out of Sorts【冒泡排序瞎搞】

    首先考虑快排的递归什么时候停下,显然是当前段只剩下一个数了,也就是一个数两边出现分隔符 然后再考虑计算冒泡长度这个操作,因为有分割,所以我们可以把这些放到一起冒泡,这和递归每个区间冒泡是等价的 所以答 ...

  8. bzoj 3751: [NOIP2014]解方程【数学】

    --我真是太非了,自己搞了7个质数都WA,从别人那粘5个质数就A了-- 就是直接枚举解,用裴蜀定理计算是否符合要求,因为这里显然结果很大,所以我们对多个质数取模看最后是不是都为0 #include&l ...

  9. JavaScript 数组相关基础方法

    文章来源于:https://www.cnblogs.com/dolphinX/p/3353590.html 创建数组 构造函数 1.无参构造函数,创建一空数组 var a1=new Array(); ...

  10. Linux基本命令—mkfs/mount/umount/wget/yes/make/passwd

    mkfs:用来在特定的分区建立Linux文件系统,是make filesystem的缩写. 例子:mkfs .ext3 /dev/mmcblk0p1      //把该设备格式化成ext3文件系统 m ...