登录功能的完善 请求行(有七个) 浏览器下载指定图片 上传文件到 out 目录 两个响应体的写方法
登录功能的完善
数据库插入数据
servlet
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
public class UploadServlet extends HttpServlet {
// 上传文件 到 out 目录
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
try {
String path = req.getServletContext().getRealPath("WEB-INF/upload"); // 获取到保存的路径
File file = new File(path);
if (!file.exists()){
file.mkdirs(); //如果不存在,则创建
} //file.mkdirs(); 可以创建子父目录
boolean flag = ServletFileUpload.isMultipartContent(req);
//如果 返回值是true 表示是文件的格式进行上传
//如果返回值是false 表示不是文件的格式进行上传 返回错误
if (flag){
FileItemFactory factory = new DiskFileItemFactory(); //得到核心工厂对象
ServletFileUpload sfu = new ServletFileUpload(factory); //得到文件上传的核心对象
List<FileItem> fileItemslist = sfu.parseRequest(req); //得到form表单中 input 标签中的所有的条目
Iterator<FileItem> iterator = fileItemslist.iterator(); //转换迭代器来进行遍历
while (iterator.hasNext()){
FileItem fileItem = iterator.next(); //获取具体的条目 FileItem
if(fileItem.isFormField()) //true 是普通的文本 false 是文件
{
//是文本,则不处理
}else {
String filename = fileItem.getName(); //获取到文件的名字
File newfile = new File(file,filename); //构建一个新的文件对象
fileItem.write(newfile); //写入的方法
}
}
}else {
System.out.println("不是文件上传");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
register2
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<p>注册小米账号</p>
<form action="servlet123" method="post" enctype="multipart/form-data"> <!--跳转到/servlet123 带斜杆的页面-->
<table style="width: 500px">
<tr>
<td>姓名:</td>
<td><input type="text" name="uname"></td>
</tr>
<tr>
<td>性别:</td>
<td>男<input type="radio" name="usex" value="男"> 女<input type="radio" name="usex" value="女"></td>
</tr>
<tr>
<td>所在地区:</td>
<td><input type="text" name="uregion"></td>
</tr>
<tr>
<tr>
<td>密码:</td>
<td><input type="password" name="upwd"></td>
</tr><tr>
<td>上传头像:</td>
<td><input type="file" name="ufile"></td>
</tr>
</table>
<input type="submit" value="立即注册">
<p style="font-size: 12px">注册账号即表示您同意并愿意准守小米用户协议和隐私政策</p>
</form>
</body>
</html>
dao
import com.mchange.v2.c3p0.ComboPooledDataSource;
import com.offcn.dao.UserDao;
import com.offcn.entity.User;
import org.apache.commons.dbutils.QueryRunner;
import javax.sql.DataSource;
import java.sql.SQLException;
public class UserDaoImpl implements UserDao {
private DataSource ds = new ComboPooledDataSource();
private QueryRunner qr = new QueryRunner(ds);
@Override
public int insertUser(User user) {
int num= 0;
try {
String sql ="insert into user(uname,upwd,usex,uregion,ufile)values(?,?,?,?,?)";
Object[] objects={user.getUname(),user.getUpwd(),user.getUsex(),user.getUregion(),user.getUfile()};
num = qr.update(sql,objects);
} catch (SQLException e) {
e.printStackTrace();
}
return num;
}
}
service
import com.offcn.dao.UserDao;
import com.offcn.dao.impl.UserDaoImpl;
import com.offcn.entity.User;
import com.offcn.service.UserSerivce;
public class UserSerivceImpl implements UserSerivce {
private UserDao userDao = new UserDaoImpl();
@Override
public int insertUser(User user) {
return userDao.insertUser(user);
}
}
实体类
import java.io.Serializable;
public class User implements Serializable {
private int uid;
private String uname;
private String upwd;
private String usex;
private String uregion;
private String ufile;
@Override
public String toString() {
return "User{" +
"uid=" + uid +
", uname='" + uname + '\'' +
", upwd='" + upwd + '\'' +
", usex='" + usex + '\'' +
", uregion='" + uregion + '\'' +
", ufile='" + ufile + '\'' +
'}';
}
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 getUpwd() {
return upwd;
}
public void setUpwd(String upwd) {
this.upwd = upwd;
}
public String getUsex() {
return usex;
}
public void setUsex(String usex) {
this.usex = usex;
}
public String getUregion() {
return uregion;
}
public void setUregion(String uregion) {
this.uregion = uregion;
}
public String getUfile() {
return ufile;
}
public void setUfile(String ufile) {
this.ufile = ufile;
}
public User(int uid, String uname, String upwd, String usex, String uregion, String ufile) {
this.uid = uid;
this.uname = uname;
this.upwd = upwd;
this.usex = usex;
this.uregion = uregion;
this.ufile = ufile;
}
public User() {
}
}
service接口
public interface UserSerivce {
int insertUser(User user);
}
xml
<!--5 完善登录-->
<servlet>
<servlet-name>servletqq</servlet-name>
<servlet-class>com.offcn.servlet.Servlet123</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>servletqq</servlet-name>
<url-pattern>/servlet123</url-pattern>
</servlet-mapping>
请求体——有七个
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class RequestDemoServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 请求行——有七个
// String sc = req.getScheme();
// String ser = req.getContextPath();
// String path = req.getContextPath();
// String mwthod = req.getMethod();
// String query = req.getQueryString();
// String uri = req.getRequestURI();
// String name = req.getServerName();
// System.out.println(sc); // http 获取协议
// System.out.println(ser); // /day10_war_exploded 请求路径
// System.out.println(path); // /day10_war_exploded 获取项目名称
// System.out.println(mwthod); // GET 请求的方式
// System.out.println(query); // null 拼凑的方式
// System.out.println(uri); // /day10_war_exploded/requestDemoServlet 项目名加访问路径
// System.out.println(name); //localhost 获取 ip 或者 域名
// 请求头
String sc = req.getHeader("host");
// EnumConstant<String> enumConstant = req.getHeaderNames();
// String key = enumConstant.nextElment;
String path = req.getContextPath();
String mwthod = req.getMethod();
String query = req.getQueryString();
String uri = req.getRequestURI();
String name = req.getServerName();
System.out.println(sc); //
}
}
浏览器下载指定图片
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
//下载指定图片
public class UserServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String filename = req.getParameter("filename");
//a 标签获取方式相同
resp.setHeader("Content-Disposition","attachment;fileName="+filename);
//设置头格式,下载的方式打开
InputStream is = req.getServletContext().getResourceAsStream("WEB-INF/upload/1.jpg");
//图片转换成流对象
ServletOutputStream sos = resp.getOutputStream();
//文件读写操作
byte[] b = new byte[1024];
int leng = -1;
while ((leng=is.read(b))!=-1){
sos.write(b,0,leng);
}
//读写操作
sos.close();
is.close();
}
}
上传文件到 out 目录
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
public class UploadServlet extends HttpServlet {
// 上传文件 到 out 目录
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
try {
String path = req.getServletContext().getRealPath("WEB-INF/upload"); // 获取到保存的路径
File file = new File(path);
if (!file.exists()){
file.mkdirs(); //如果不存在,则创建
} //file.mkdirs(); 可以创建子父目录
boolean flag = ServletFileUpload.isMultipartContent(req);
//如果 返回值是true 表示是文件的格式进行上传
//如果返回值是false 表示不是文件的格式进行上传 返回错误
if (flag){
FileItemFactory factory = new DiskFileItemFactory(); //得到核心工厂对象
ServletFileUpload sfu = new ServletFileUpload(factory); //得到文件上传的核心对象
List<FileItem> fileItemslist = sfu.parseRequest(req); //得到form表单中 input 标签中的所有的条目
Iterator<FileItem> iterator = fileItemslist.iterator(); //转换迭代器来进行遍历
while (iterator.hasNext()){
FileItem fileItem = iterator.next(); //获取具体的条目 FileItem
if(fileItem.isFormField()) //true 是普通的文本 false 是文件
{
//是文本,则不处理
}else {
String filename = fileItem.getName(); //获取到文件的名字
File newfile = new File(file,filename); //构建一个新的文件对象
fileItem.write(newfile); //写入的方法
}
}
}else {
System.out.println("不是文件上传");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
两个响应体的写方法
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
public class TableServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 两种方式的使用
// ServletOutputStream sos = resp.getOutputStream();
// sos.write("admin".getBytes());
// sos.write("你好".getBytes());
////两个同时运行,会显示 ServletOutputStream ,getWriter 却不显示
// PrintWriter pw = resp.getWriter();
// pw.write("admin");
// pw.write("我很好");
// 写一个表格
PrintWriter pw = resp.getWriter();
pw.write("<table border='1' >");
pw.write("<tr>");
pw.write("<td>");
pw.write("bianhao");
pw.write("</td>");
pw.write("<td>");
pw.write("xingming");
pw.write("</td>");
pw.write("</tr>");
pw.write("<tr>");
pw.write("<td>");
pw.write("1");
pw.write("</td>");
pw.write("<td>");
pw.write("zhangsan");
pw.write("</td>");
pw.write("</tr>");
pw.write("<tr>");
pw.write("<td>");
pw.write("2");
pw.write("</td>");
pw.write("<td>");
pw.write("lisi");
pw.write("</td>");
pw.write("</tr>");
pw.write("</table>");
}
}