`

09 12 15 JavaWeb 学习笔记

阅读更多

我们来细细分析一下上面的实例


package com.cric.servlet; //把类放入包(自定义包),并导入相关量的包(sun提供给我们的 API)

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

//实现Servlet接口
public class FirstServlet extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {

public FirstServlet() {
super();
}

//处理get方式提交的响应方法
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

String userName=request.getParameter("userName"); //获取input标签中的 userName
response.getWriter().write("do get:"+userName); //将获取的userName输出的前台页面以响应用户
}



//处理post方式提交的响应方法
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

String userName=request.getParameter("userName"); //获取input标签中的值 userName
response.getWriter().write("do post:"+userName); //将获取的userName输出的前台页面以响应用户
}
}

在这里get 和post 的比较既不做分析了,您可以自己试试,
能否看出点门道?(注意看浏览器中的url字符串 )

上面的方式只能获取 input 标签中 type="text"的字符,
下面来看看其他type中字符的获取:

1.<input type="radio" name="radiobuttonName" value=""/>:

String radiobuttonName=request.getParameter("radioButtonName");
获得名字为radioButtonName的值(这里的值是value中的字符)

2.<input type="checkbox" name="checkboxName" value="1"/>:
<input type="checkbox" name="checkboxName" value="2"/>

String[] checkboxName=request.getParameter("checkboxName");

3.<select name="selectName">
<option value="">XXX</option>
<option value="">YYY</option>
</select>

String selectName=request.getParameter("select");

4.<textarea name="textareaName"></textarea>
String testareaName=request.getParameter("textareaName");


ok,常见的的几种type都在这了,要想了解的清楚,建议自己去练.(一定要注意编码方式)
[在Servlet中可以更改请求来的编码,也可以更改响应的编码]
[request.setCharacterEncoding("utf-8"); ]
[response.setCharacterEncoding("utf-8"); ]

----JavaBean----
什么是JavaBean及其作用:
一种可以应用于JavaWeb逻辑编程的普通Java类,经常与Servlet和JSP配合使用用来处理业务逻辑和数据处理。
JavaBean的特性:
1、类是公共的,有一个不带有参数的公共构造器。
2、如果有属性应该是私有的,属性的类型可以是简单类型也可以是任何复杂类型。
3、对于每个需要处理的数据属性值,应该匹配公用 getter 和 setter 方法。
4、可被序列化,可视JavaBeans可以处理事件编程(Java Web编程使用不到)

JavaBean其实也很一般:
没有实现特殊的接口[至于JavaBean中的第四点特性中用到的Serializable和Externalizable借口暂不考虑]
代码编写者自己定义的Java类


---到了这里JavaWeb的编程变得有点复杂化了更逻辑了,有时会牵扯到了设计模式的问题
从而引导程序员对模式的思考[本人感觉设计模式不是某某人三言两语就能把读者说会的,
最重要的是程序设计者对问题本身的思考及其逻辑思维和审视能力]。所以不会长篇大论。
而把模式问题带到实际编程中。

在这里不重点提模式,感觉设计模式是:只可意会不可言传的.呵呵。

一般在设计时本着逻辑处理和数据表示分离的的原则,一般用JavaBean来做数据表示
其他类来做逻辑处理。[业务逻辑层]

一般来说一个JavaBean的类代表了数据库中的一张表,JavaBean中的成员变量(类的属性)
代表了表中的关系型数据的列.[JavaBean有时给我的感觉像是数据库中一张虚拟的表]
,JavaBean中的一个对象代表了表中的行。

好了我们赶快来看实例:
向数据库中添加用户信息

//添加用户页面,提交信息到UserServelt

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>ADD USER</title>
</head>
<body>
<form action="UserTestServlet" method="post">
<font color="red" size="+2">UserId: </font><input type="text" name="userId"/>
<br>
<font color="red" size="+2">Password: </font><input type="password" name="pw"/>
<br>
<font color="red" size="+2">UserName: </font><input type="text" name="userName"/>
<br>
<font color="blue" size="+2">Sex: </font><input type="radio" name="sex" value="男">男
<input type="radio" name="sex" value="女"/>女
<br>
<font color="blue" size="+2">Hobby: </font><input type="checkbox" name="hobby" value="篮球"/>篮球
<input type="checkbox" name="hobby" value="足球"/>足球
<input type="checkbox" name="hobby" value="跑步"/>跑步
<input type="checkbox" name="bobby" value="上网"/>上网
<br>
<font color="blue" size="+2">Job: </font>
<select name="job">
<option value="教师">教师</option>
<option value="程序员">程序员</option>
<option value="律师">律师</option>
</select>
<br>
<input type="submit" value="Add"/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="reset" value="重填"/>
<input type="hidden" name="message" value="add"/> <!--设置隐藏域的目的只是要告诉Servlet要做的是添加数据-->
</form>
</body>
</html>



//处理逻辑的类

import javax.servlet.http.HttpServletRequest;

public class Option {
public UserTest getUsers(HttpServletRequest request) //接受前台来的数据并把数据放置到JavaBean中
{
//接受数据
String userId=request.getParameter("userId");
if(userId==null||userId.length()==0)
{
return null;
}

String pw=request.getParameter("pw");
String userName=request.getParameter("userName");
String sex=request.getParameter("sex");
String[] hobby=request.getParameterValues("bobby");
String job=request.getParameter("job");

//把数据放到User这个JavaBean中[把数据当做一个对象的属性(面对对象的思想)]
User u=new User();
u.setUserId(userId);
u.setPw(pw);
u.setUserName(userName);
u.setSex(sex);
for(int i=0;i<hobby.length;i++)
{
u.setHobby(hobby[i]);
}
u.setJob(job);

return u;
}

//添加用户信息到数据库
public boolean AddUsers(UserTest u)//命名不规范-方法名小写!!
{
if(u==null)
{
return false;
}
String userId=u.getUserId();
String pw=u.getPw();
String userName=u.getUserName();
String sex=u.getSex();
String hobby=u.getHobby();
String job=u.getJob();

String sqlStr="insert into User_Test values('"+userId+"','"+pw+"','"+userName+"','"+sex+"','"+job+"','"+hobby+"')";
utils.DBUtils db=new utils.DBUtils();
boolean isOk=db.executeUpdate(sqlStr);
return isOk;
}

}


//处理数据表示的JavaBean
package com.lele.javabeans //Java2.0以后JavaBean的类别必须加包

public class User {
private String userId;
private String userName;
private String pw;
private String sex;
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPw() {
return pw;
}
public void setPw(String pw) {
this.pw = pw;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getHobby() {
return hobby;
}
public void setHobby(String hobby) {
this.hobby = hobby;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
private String hobby;
private String job;
}


//UserServlet

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class UserServlet extends HttpServlet {


public UserServlet()
{
super();
}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

}


protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

String message=request.getParameter("message");
request.setCharacterEncoding("gb2312");

if(message==null)
{
response.getWriter().write("The page is Error");
}
else if(message.equals("add")) //添加用户信息
{
javabeans.Option op=new javabeans.Option();
javabeans.User u=op.getUsers(request);
boolean isOk=op.AddUsers(u);
if(isOk)
{
response.getWriter().write("Add is successfully!");
}
else
{
response.getWriter().write("Add is error!!!");
}
}
}

}

对于前面实例的说明:
前面实例可能有不足之处,还请各位指教。

整个业务实现的逻辑:
首先由用户提交用户信息并告诉Servlet要做的添加(不知道大家注意没有
在第一个实例中我用了<input type="hidden" name="message" value="add"/> 其作用就是告诉Servlet
我要做的是添加,这样做的好处是不用创建多个Servlet,一个Servlet可以做很多事,提高了代码的重用性)
,Servlet接收到信息(message)后去做add处理,并告诉Option这个类,要求它先获得用户的添加信息,Option
这个类会把用户的信息设置成User这个JavaBean的实例的属性,那么User的一个对象(实例)[一个用户]就包含了
要添加的所有信息.然后把整条信息添加到数据库(在Servlet中用Option的对象调用AddUsers()方法),如果
添加成功会告诉用户添加成功(Add is successfully!),反之添加失败(Add is error!!!)。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics