6.22 学习

  1. 注册信息
    a) 注册信息
import java.io.IOException;
import java.util.Arrays;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class RegisterServlet extends HttpServlet{

	private static final long serialVersionUID = 3613835604998207857L;

	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		String name = request.getParameter("name");
		String[] hobbies = request.getParameterValues("hobbies");
		System.out.println(name);
		System.out.println(Arrays.asList(hobbies));
	}
	
}

b) 注册的html

6.6

  1. 图片上传页面的编写

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.List;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class UploadServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	// 这里用到两个jar包 : commons-io-1.4.jar, commons-fileupload-1.2.2.jar
	/*
	 * 1. 导入jar包至WEB-INF/lib下 
	 * 
	 */

	public void doPost(HttpServletRequest request, HttpServletResponse response) {

		String filename = null;
		try {
			DiskFileItemFactory factory = new DiskFileItemFactory();
			ServletFileUpload upload = new ServletFileUpload(factory);
			// 设置上传文件的大小限制为100M
			factory.setSizeThreshold(1024 * 1024 * 100);

			@SuppressWarnings("rawtypes")
			List items = null;
			try {
				items = upload.parseRequest(request);
			} catch (FileUploadException e) {
				e.printStackTrace();
			}

			@SuppressWarnings("rawtypes")
			Iterator iter = items.iterator();
			while (iter.hasNext()) {
				FileItem item = (FileItem) iter.next();
				if (!item.isFormField()) {

					// 根据时间戳创建头像文件
					filename = System.currentTimeMillis() + ".jpg";

					// 通过getRealPath获取上传文件夹,如果项目在e:/project/j2ee/web,那么就会自动获取到
					// e:/project/j2ee/web/uploaded
					String photoFolder = request.getServletContext().getRealPath("uploaded");

					File f = new File(photoFolder, filename);
					f.getParentFile().mkdirs();

					// 通过item.getInputStream()获取浏览器上传的文件的输入流
					InputStream is = item.getInputStream();

					// 复制文件
					FileOutputStream fos = new FileOutputStream(f);
					byte b[] = new byte[1024 * 1024 * 100];
					int length = 0;
					while (-1 != (length = is.read(b))) {
						fos.write(b, 0, length);
					}
					fos.close();

				} else {
					System.out.println(item.getFieldName());
					String value = item.getString();
					value = new String(value.getBytes("ISO-8859-1"), "UTF-8");
					System.out.println(value);
				}

				// 这前面这一段是照抄的
				 String html = "<img width='500' height='500' src='uploaded/%s' />";
		            response.setContentType("text/html");
		            PrintWriter pw= response.getWriter();
		            pw.format(html, filename);
			}
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}
}

<!DOCTYPE html>
<html>
	<head>
		<meta http-equiv="Content-type" content="text/html" charset="UTF-8"></meta>
		<title>upload</title>
	</head>


	<!-- 需要上传的话 : form必须是post, get是不能上传问题件的, 而且还需要加上enctype="multipart/form-data"表示提交的数据是二进制文件 -->
	<body>
		<form action = "upload" method="post" enctype ="multipart/form-data">
			用户名 : <input type ="text" name = "UserName" /><br>
			头像 : <input type="file" name ="filepath" /><br>
			<input type ="submit" value = "upload">
		</form>
	</body>
</html>

6.10 动态web项目
问题 1 :
问题 : The Apache Tomcat installation at this directory is version 7.0.64. A Tomcat 8.5 installation is expected.
解决方法 :单单在myeclipse中使用tomcat一下午就遇到了各种问题,我又不想埋怨自己手贱,只能吐槽它太不接地气了,现将几个问题的解决办法进行汇总,仅以此文献给同我一样<……虚话不说了>遇到这些问题的人。(此篇跟上两篇内容相连)

问题三

报错内容:

The Apache Tomcat installation at this directory is version 8.5.14. A Tomcat 8.0installation is expected.

解决办法:

①在本地tomcat的解压缩文件下:apache-tomcat-8.5.6\lib找到catalina.jar,

②打开catalina.jar\org\apache\catalina\util(打开方式选择2345好压,解压缩工具)

③写字板打开ServerInfo.properties,

④找到文件内容下方的server.info=Apache Tomcat/8.5.14,将其改为server.info=Apache Tomcat/8.0.8.5.14(就是在下载的版本号前面加一个8.0.)

6.20 JDBC
问题1 :

  1. JDBC学习
  1. 导包,bin里和外部包都要导入 (mysql-connector-java-5.0.8-bin.jar)
  2. 创建查询实体
package bean;

public class Hero {
	public int id;
	public String name;
	public float hp;
	public int damage;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public float getHp() {
		return hp;
	}
	public void setHp(float hp) {
		this.hp = hp;
	}
	public int getDamage() {
		return damage;
	}
	public void setDamage(int damage) {
		this.damage = damage;
	}
	
}
  1. 准备HeroDAO (用来增删改查)
    package dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import bean.Hero;

public class HeroDao {

public HeroDao() {
    try {
        Class.forName("com.mysql.jdbc.Driver");
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }
}

public Connection getConnection() throws SQLException {
    return DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8", "root",
            "admin");
}

public int getTotal() {
    int total = 0;
    try (Connection c = getConnection(); Statement s = c.createStatement();) {

        String sql = "select count(*) from hero";

        ResultSet rs = s.executeQuery(sql);
        while (rs.next()) {
            total = rs.getInt(1);
        }

        System.out.println("total:" + total);

    } catch (SQLException e) {

        e.printStackTrace();
    }
    return total;
}

public void add(Hero hero) {

    String sql = "insert into hero values(null,?,?,?)";
    try (Connection c = getConnection(); PreparedStatement ps = c.prepareStatement(sql);) {

        ps.setString(1, hero.name);
        ps.setFloat(2, hero.hp);
        ps.setInt(3, hero.damage);

        ps.execute();

        ResultSet rs = ps.getGeneratedKeys();
        if (rs.next()) {
            int id = rs.getInt(1);
            hero.id = id;
        }
    } catch (SQLException e) {

        e.printStackTrace();
    }
}

public void update(Hero hero) {

    String sql = "update hero set name= ?, hp = ? , damage = ? where id = ?";
    try (Connection c = getConnection(); PreparedStatement ps = c.prepareStatement(sql);) {

        ps.setString(1, hero.name);
        ps.setFloat(2, hero.hp);
        ps.setInt(3, hero.damage);
        ps.setInt(4, hero.id);

        ps.execute();

    } catch (SQLException e) {

        e.printStackTrace();
    }

}

public void delete(int id) {

    try (Connection c = getConnection(); Statement s = c.createStatement();) {

        String sql = "delete from hero where id = " + id;

        s.execute(sql);

    } catch (SQLException e) {

        e.printStackTrace();
    }
}

public Hero get(int id) {
    Hero hero = null;

    try (Connection c = getConnection(); Statement s = c.createStatement();) {

        String sql = "select * from hero where id = " + id;

        ResultSet rs = s.executeQuery(sql);

        if (rs.next()) {
            hero = new Hero();
            String name = rs.getString(2);
            float hp = rs.getFloat("hp");
            int damage = rs.getInt(4);
            hero.name = name;
            hero.hp = hp;
            hero.damage = damage;
            hero.id = id;
        }

    } catch (SQLException e) {

        e.printStackTrace();
    }
    return hero;
}

public List<Hero> list() {
    return list(0, Short.MAX_VALUE);
}

public List<Hero> list(int start, int count) {
    List<Hero> heros = new ArrayList<Hero>();

    String sql = "select * from hero order by id desc limit ?,? ";

    try (Connection c = getConnection(); PreparedStatement ps = c.prepareStatement(sql);) {

        ps.setInt(1, start);
        ps.setInt(2, count);

        ResultSet rs = ps.executeQuery();

        while (rs.next()) {
            Hero hero = new Hero();
            int id = rs.getInt(1);
            String name = rs.getString(2);
            float hp = rs.getFloat("hp");
            int damage = rs.getInt(4);
            hero.id = id;
            hero.name = name;
            hero.hp = hp;
            hero.damage = damage;
            heros.add(hero);
        }
    } catch (SQLException e) {

        e.printStackTrace();
    }
    return heros;
}

}
4) 开始创建查询类(servlet)

import java.io.IOException;
import java.nio.charset.Charset;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import bean.Hero;
import dao.HeroDao;

public class HelloListServlet extends HttpServlet{

	private static final long serialVersionUID = 1L;

	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html; charset = UTF-8");
		List<Hero> heros = new HeroDao().list();
		StringBuffer sb = new StringBuffer();
		sb.append("<table align = 'center' border ='1' cellspacing = '0'>\r\n");
		sb.append("<tr><td>id</td><td>name</td><td>hp</td><td>damage</td></tr>");
		String trFormat = "<tr><td>%d</td><td>%s</td><td>%f</td><td>%d</td></tr>";
		for(Hero hero : heros){
			String tr = String.format(trFormat,hero.getId(),hero.getName(), hero.getHp(),hero.getDamage());
			sb.append(tr);
		}
		sb.append("</table>");
		response.getWriter().write(sb.toString());
		
		super.service(request, response);
		
	}
		
}
  1. 最后编写HelloListServlet
import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import bean.Hero;
import dao.HeroDao;

public class HelloListServlet extends HttpServlet{

	private static final long serialVersionUID = 1L;

	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html; charset = UTF-8");
		System.out.println("Coming into HelloServlet!!!");
		List<Hero> heros = new HeroDao().list();
		StringBuffer sb = new StringBuffer();
		sb.append("<table align = 'center' border ='1' cellspacing = '0'>\r\n");
		sb.append("<tr><td>id</td><td>name</td><td>hp</td><td>damage</td></tr>");
		String trFormat = "<tr><td>%d</td><td>%s</td><td>%f</td><td>%d</td></tr>";
		for(Hero hero : heros){
			String tr = String.format(trFormat,hero.getId(),hero.getName(), hero.getHp(),hero.getDamage());
			sb.append(tr);
			System.out.println(tr);
		}
		sb.append("</table>");
		System.out.println(sb);
		response.getWriter().write(sb.toString());

	}
		
}

6.20 http协议
1.

  1. http协议 请求协议
    观察Network里的请求链接, 同时还要观察Params里的信息(是你传递的信息)
  2. 请求头部信息 (这部分信息可以通过request来获得)
    Host : 主机名
    User-Agent : 浏览器的基本资料
    Accept : 浏览器能够识别的响应类型
    Accept-Language : 浏览器默认语言
    Refer : 来路页面, 通过哪个页面到达此处的。
    Connect : 是否保持连接。
  1. 响应协议

6.21 JSP

  1. 学习jsp
    1. 编写hello.jsp 网站
<!-- "text/html;charset=UTF-8" 相当于通知浏览器以UTF-8进行解码.  pageEncoding="UTF-8" 告诉浏览器如果出现中文对其进行UTF-8编码
"java.util.*" 导入其他类, 如果导入多个类, 彼此用逗号分开.
%=new Date().toLocaleString()  相当于 response.getWriter().println(new Date().toLocaleString())
-->

<%@page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" import="java.util.*"%>
Hello,Han!
<br>
<%=new Date().toLocaleString() %>>
  1. 问题 : 为什么JSP可以在html中运行java代码?因为JSP被转译成了Servlet

    1. 把hello.jsp转译成hello_jsp.java
    2. 然后把hello_jsp.java编译成hello_jsp.class
    3. 执行hello_jsp, 生成html
    4. 通过http协议把html响应返回给浏览器
  2. Jsp的组成

  1. 静态内容 : 就是html, css, javascript的内容
  2. 指令 : 以<%@ 开始, 以%>结尾 (范例如上)
  3. 表达式 <%=%>, 用以输出一段html
  4. Scriptlet 在<%%>之间可以写任何java代码
  5. 注释 : <%-- --%>
  1. Jsp的使用方法
<%@page language = "java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" import="java.util.*"%>
<% 
	ArrayList<String> strs = new ArrayList<String>();
	strs.add("han1");
	strs.add("han2");
	strs.add("han3");
	strs.add("han4");
%>


	<table width="300px" align="center" border="1" cellspacing="0">
		<%for (String name : strs ) {%>
		<tr>
			<td><%=name%></td>
		</tr>

		<%}%>
</table>

  1. JSP include (如果每个页面共有的信息就只需要写一次, 每次调用即可)
  1. 指令include操作方法 :
    i) 编写一个页面用来重复调用
    ii) 然后再其他页面中, 使用指令调用
  2. 范例
<hr>
<p style = "text-align:center">copyright@2016
</p>
<%@page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" import="java.util.*"%>
Hello,Han!
<br>
<%=new Date().toLocaleString() %><br>


<%-- 以下两种效果相同 --%>
<%="hello jsp1" %> <br> 
<h1><% out.println("hello jsp2"); %></h1>  


<%@  include file = "footer.jsp"%>
  1. 动作include
    i) 操作方法 : <jsp:include page=”footer.jsp”/>

  2. 这两者的区别
    i) 指令include : JSP会最终被转译成Servlet并与另一个jsp合并生成一个问题件
    ii) 动作include : JSP是独立转译的, 最终将两个java文件转译成的文件合成, 是相互独立的, 会涉及到传参问题.
    iii) 动作include传参解决方案 :

    <jsp:include page="footer.jsp"> 
    	<jsp:param name = "year" value = "2020"/>
    </jsp:include>
    
  1. JSP跳转
  1. 首先准备一个jump.jsp
  2. 服务器跳转 & 客户端跳转
    Example :
    i) 服务器跳转
    <%-- 这个jsp是用来跳转用的 --%>
    <%-- response.sendRedirect("hello.jsp"); 不用写成response.sendRedirect("j2ee/hello.jsp"); 	--%>
    <%-- 这是客户端跳转 --%>
    
    <% response.sendRedirect("hello.jsp"); %>
    

ii) 客户端跳转
```java
<%-- 这个jsp是用来跳转用的 --%>
<%-- response.sendRedirect(“hello.jsp”); 不用写成response.sendRedirect(“j2ee/hello.jsp”); --%>
<%-- 这是服务器跳转 --%>

<% request.getRequestDispatcher("hello.jsp").forward(request,response); %>
```
  1. JSP Cookie
  1. Cookie的作用, 保持登录状态(cooie是由服务器创建, 保存在用户本地)
  2. Cookie的使用方法
<%--
Cookie c = new Cookie("name","Gareen");  创建一个Cookie
c.setMaxAge(24*60*60); 设定保存时间(设定为1), 如果是0, 那么浏览器一关闭就销毁.
c.setPath("/"); path 表示访问服务器的所有应用都会提交这个cookie到服务器,  
其值是/abc, 那么表示仅仅访问/abc路径的时候才会提交cookie到服务端.
 --%>

<% 
Cookie c = new Cookie("name","Gareen"); 
c.setMaxAge(24*60*60);
c.setPath("/");
response.addCookie(c);
%>
  1. Cookie的获取方法

<%
	Cookie[] cookies = request.getCookies();
	if (null != cookies) {
		for (int i = 0; i <= cookies.length - 1; i++) {
			System.out.println(cookies[i].getName() + " : " + cookies[i].getValue());
		}
	}
%>
  1. Session的学习
  1. Session的设值
// setSession.jsp
<%@ page language = "java" contentType = "text/html ; charset = UTF-8"  pageEncoding = "UTF-8" import = "javax.servlet.*" %>
<%
	session.setAttribute("name", "teemo");
%>
<a href = "getSession.jsp">跳转到获取session的页面 </a>
  1. Session的获值
// getSession.jsp
<%@ page language = "java" contentType = "text/html; charset=UTF-8" pageEncoding="UTF-8" %>

<% 
String name = (String) session.getAttribute("name");
response.getWriter().write(name);
%><br>
session's name  : <%=name%>```

  1. Session的有效期可以调整, 到服务器设置中调整

6.22 JSP

  1. JSP作用域
    1. 4个作用域
      pageContext 当前页面
      requestContext 一次请求
      sessionContext 当前会话
      applicationContext 全局,所有用户共享
  1. 范例
    i) pageContext 当前页面 (只有当前页面可以获得参数)
    这个结果是han
<%@ page language = "java" contentType = "text/html; charset = UTF-8" pageEncoding = "UTF-8" %>
<%
	pageContext.setAttribute("name", "han");
%>

<%= pageContext.getAttribute("name") %>

这个结果就是null
	<%@ page language = "java" contentType = "text/html; charset = UTF-8" pageEncoding = 	"UTF-8" %>

	<%= pageContext.getAttribute("name") %>
ii) requestContext
这个结果是hxt
	<%@ page language = "java" contentType = "text/html; charset = UTF-8" pageEncoding = 	"UTF-8" %>
	<%
	
	//pageContext.setAttribute("name", "han");
	request.setAttribute("name","hxt");
	%>

	<%=request.getAttribute("name")

//=pageContext.getAttribute("name") 

%>

这个结果是null
	<%@ page language = "java" contentType = "text/html; charset = UTF-8" pageEncoding = 	"UTF-8" %>

	<%= request.getAttribute("name") %>
	```
	
	一次请求跳转
	```jsp
<%@ page language = "java" contentType = "text/html; charset = UTF-8" pageEncoding = "UTF-8" %>
<%
	
	request.setAttribute("name", "hxt1");
%>

<%
	request.getRequestDispatcher("getContext.jsp").forward(request, response);
%>

<%@ page language = "java" contentType = "text/html; charset = UTF-8" pageEncoding = "UTF-8" %>

<%= request.getAttribute("name") %>
结果就是hxt1
  1. 所以要搞清楚, 客户端和服务器端跳转的区别

  2. sessionContext是会话是指一个用户代开网站的那一刻起, 无论访问多少网页, 连接都属于同一个会话, 知道浏览器关闭, 所以页面间传递数据也可以通过session传递.

<%@ page language = "java" contentType = "text/html; charset = UTF-8" pageEncoding = "UTF-8" %>
<%
	session.setAttribute("name","hxt2");
	response.sendRedirect("getContext.jsp");
%>

<%@ page language = "java" contentType = "text/html; charset = UTF-8" pageEncoding = "UTF-8" %>

session.getAttribute = 
<%= session.getAttribute("name") %>
  1. applicationContext 全局参数
  1. jsp的隐式对象
  1. 分别为 : request, response, out, pageContext, session, application, page, config, exception
  2. request : 表示请求
    response : 表示响应
    out : 代表输出
    pageContext : 当前页面作用域
    session : 当前会话作用域
    application : 全局作用域
    page : 在jsp中代表java中的this (代表当前页面) , 作用与this一样
    config : config可以获取web.xml中的初始化参数(不推荐使用)
    exception : 有时候页面中会出现一些异常需要解决, 那就需要这样一个页面进行 处理
  3. exception的范例
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" errorPage = "catch.jsp"%>
<% 
	int[] a = new int[10];
	a[20] = 20;
%>

<%=a[20]%>
	
	<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isErrorPage="true" %>
错误信息是 : <br>

<%=exception %>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值