1、JSP
1.1 JSP基础语法
1.1.1.JSP的注释
jsp有三种注释:
- //单行注释 /*多行注释*/
- <!-- HTML风格的注释-->
- <%-- JSP注释 -->
1.1.2 jsp脚本小程序
- <% %> :java 脚本段 用于定义局部变量、编写语句
- <%! %> :声明,可以定义局部(成员)变量、方法、类
- <%= %>:表达式,数据一个变量或具体内容
1.1.3 JSP的指令标签
1.2 JSP内置对象
1.2.1 request对象
1、简介
① 内置对象request封装了用户提交的信息,那么该对象调用相应的方法可以获取封装的信息,即使用该对象可以获取用户提交的信息。
② 内置对象request对象是实现了ServletRequest接口类的一个实例,可以在Tomcat服务器的webapps\tomcat-docs\servletapi中查找ServletRequest接口的方法。
2、get与post请求
①get请求
以明文的方式通过URL提交数据,数据在URL中可以看到。提交的数据最多不超过2KB。安全型较低但效率比post方式高。适合提交数据量不大,安全型不高的数据。比如:搜索、查询等功能。
②post请求
将用户提交的信息封装在HTML HEADER内。适合提交数据量大,安全性高的信息。比如:注册、修改、上传等功能。
3、处理中文乱码问题
① tomcat版本:8.5及以上版本
get请求方式:request对象使用的字符集默认为utf-8,不会出现乱码
post请求方式:request对象使用的编码方式为ISO8859-1,会出现乱码
解决的办法:设置request的编码方式为utf-8
request.setCharacterEncoding(“utf-8”);
② tomcat版本:8.5以下版本(了解):没有设置request的字符集,get和post都会出现乱码
get:
String name=new String(request.getParameter(“name”).getBytes(“ISO8859-1”),”UTF-8”)
post:
request.setCharacterEncoding(“utf-8”); 对请求进行统一的编码
4、request对象获取表单元素的多个值
String[ ] getParameterValues (String name) 获取指定参数name的多个值(数组)
注:多用于复选框中数据的获取
5、操作属性的方法
设置属性的值: request.setAttribute(String name,Object value)
读取属性的值: Object request.getAttribute(String name)
删除属性的值: void request.removeAttribute(String name)
6、request对象来获取请求头的信息
getProtocol() :获取请求使用的通信协议,如http/1.1 等。
getServletPath() :获取用户请求的JSP 页面文件的名字。
getContentLength() :获取用户提交的整个信息的长度。
getContentPath(): 获取用户请求的当前Web服务目录。
getMethod() :获取用户提交信息的方式,如POST 或GET 。
getHeader(String s) :获取HTTP头文件中由参数 s 指定的头名字的值。
getHeaderNames() :获取头名字的一个枚举。
getHeaders(String s) :获取头文件中指定头名字的的全部值的一个枚举。
getRemoteAddr() :获取用户的IP 地址。
getRemoteHost() :获取用户机的名称( 如果获取不到,就获取IP 地址).
getServerName() :获取服务器的名称。
getServerPort() :获取服务器的端口号。
getParameterNames() :获取用户提交的信息体部分中各个 name 给出的参数的一个枚举.
1.2.2 response对象
1、简介
用 response 对象对用户的请求作出动态响应,向客户端发送数据
2、动态响应contentType属性
1、页面用page指令设置页面的contentType属性的值,那么Tomcat服务器将按着这种属性值作出响应,将页面的静态部分返回给用户,用户浏览器接收到该响应就会使用相应的手段处理所收到的信息。
2、page指令只能为contentType指定一个值来决定响应的MIME类型,如果想动态的改变这个属性的值来响应用户,就需要使用response对象的setContentType(String s)方法来改变contentType的属性值
3、当用setContentType(String s)方法动态改变了contentType的属性值,即响应的MIME类型,Tomcat服务器就会按着新的MIME类型将JSP页面的输出结果返回给用户。
2、javabean
3、Servlet
3.1、什么是servlet?
servlet是一种应用于服务器端的Java程序,可以生成动态的web页面。servlet运行在服务器端,是由web服务器负责加载的,是独立于平台和协议的Java应用程序。
3.2 编写第一个servlet
package cn.eshop.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet(name = "HelloServlet" ,urlPatterns = {"/hello","/demo1"})
public class HelloServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<body>");
out.println("<h1>Hello world</h1>");
out.println("</body>");
out.println("</html>");
out.close();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
}
3.3 XML配置Servlet配置
前面对应的Servlet的配置,我们使用的是@WebServlet注解进行设置的,这个是从Servlet3.0版本开始支持注解配置的,3.0版本之前是使用的是XML配置文件进行配置的
在web.xml中配置该Servlet
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!--servlet全类名 -->
<servlet>
<!-- servlet的名称,名字任意 -->
<servlet-name>HellloServlet</servlet-name>
<servlet-class>cn.eshop.servlet.HelloServlet</servlet-class>
</servlet>
<!-- servlet的访问路径 -->
<servlet-mapping>
<!-- servlet的名称要和上面的名称一致-->
<servlet-name>HellloServlet</servlet-name>
<!-- servlet的访问路径-->
<url-pattern>/HelloServlet</url-pattern>
</servlet-mapping>
</web-app>
3.4 Servlet方法的介绍
Servlet中总共有5个方法,我们已经介绍过其中的三个,剩下的两个方法作用分别是什么?
我们先来回顾下前面讲的三个方法,分别是:
- 初始化方法,在Servlet被创建时执行,只执行一次
java void init(ServletConfig config)
- 提供服务方法, 每次Servlet被访问,都会调用该方法
java void service(ServletRequest req, ServletResponse res)
- 销毁方法,当Servlet被销毁时,调用该方法。在内存释放或服务器关闭时销毁Servlet
java void destroy()
@WebServlet(name = "HelloServlet" ,urlPatterns = {"/hello","/demo1"})
public class HelloServlet extends HttpServlet {
public void init(){
System.out.println("init...");
}
public void service(ServletRequest req, ServletResponse res)throws ServletException,java.io.IOException{
System.out.println("service...");
}
@Override
public void destroy() {
System.out.println("destroy...");
}
补充:
为什么类中重新service方法doget和dopost方法不执行了?
doget()、dopost()方法是HttpServlet类对Servlet接口service方法的重写,所以继承自HttpServlet类的Servlet类不需要重写service()方法,只需要重写doget()、dopost()方法,从Servlet生命周期中我们知道在调用init()方法初始化之后就调用service()方法,所以如果同时也重写了service方法,如果没有在service()方法中再调用doget()、dopost()方法,那么就只会调用service()方法。从HttpServlet类的源代码中可以看出来service方法调用了doget()、dopost()等方法,如果我们重写了service而没有在方法中调用doget()、dopost()方法,那么只会调用service()方法。
以下是HttpServlet类的service()方法源代码:
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取http request的method参数,其实就是html的form标签
//中method属性对应的字符串
String method = req.getMethod();
long errMsg;
//判断请求方式
if(method.equals("GET")) {
//获取最后被修改时间
errMsg = this.getLastModified(req);
if(errMsg == -1L) {
/**如果servlet不支持http request header的if-modified-since属性
* 则继续处理
**/
this.doGet(req, resp);
} else {
//如果支持这个属性
long ifModifiedSince;
try {
ifModifiedSince = req.getDateHeader("If-Modified-Since");
} catch (IllegalArgumentException var9) {
ifModifiedSince = -1L;
}
/**
* 如果客户端的文件最后修改时间和服务器端的文件最后修改时间一致则返回304不需要修改状态
* 这样服务器就不返回html,浏览器读取本地缓存文件,否则重新获取服务器端的对应html文件
**/
if(ifModifiedSince < errMsg / 1000L * 1000L) {
this.maybeSetLastModified(resp, errMsg);
this.doGet(req, resp);
} else {
resp.setStatus(304);
}
}
} else if(method.equals("HEAD")) {
errMsg = this.getLastModified(req);
this.maybeSetLastModified(resp, errMsg);
this.doHead(req, resp);
} else if(method.equals("POST")) {
this.doPost(req, resp);
} else if(method.equals("PUT")) {
this.doPut(req, resp);
} else if(method.equals("DELETE")) {
this.doDelete(req, resp);
} else if(method.equals("OPTIONS")) {
this.doOptions(req, resp);
} else if(method.equals("TRACE")) {
this.doTrace(req, resp);
} else {
//如果请求不是以上的所有请求方式,该方法就会响应501错误,也就是不支持这种请求
String errMsg1 = lStrings.getString("http.method_not_implemented");
Object[] errArgs = new Object[]{method};
errMsg1 = MessageFormat.format(errMsg1, errArgs);
resp.sendError(501, errMsg1);
}
}
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
HttpServletRequest request;
HttpServletResponse response;
try {
request = (HttpServletRequest)req;
response = (HttpServletResponse)res;
} catch (ClassCastException var6) {
throw new ServletException("non-HTTP request or response");
}
this.service(request, response);
}
剩下的两个方法是:
- 获取Servlet信息
java String getServletInfo() //该方法用来返回Servlet的相关信息,没有什么太大的用处,一般我们返回一个空字符串即可 public String getServletInfo() { return ""; }
- 获取ServletConfig对象
java ServletConfig getServletConfig()
ServletConfig对象,在init方法的参数中有,而Tomcat Web服务器在创建Servlet对象的时候会调用init方法,必定会传入一个ServletConfig对象,我们只需要将服务器传过来的ServletConfig进行返回即可。具体如何操作?
配置文件中配置servlet
<servlet>
<servlet-name>ServletConfigTest</servlet-name>
<servlet-class>cn.eshop.servlet.ServletConfigTest</servlet-class>
<!-- 传递参数到init中 参数为设置的编码格式-->
<init-param>
<param-name>charset</param-name>
<param-value>UTF-8</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>ServletConfigTest</servlet-name>
<url-pattern>/ServletConfigTest</url-pattern>
</servlet-mapping>
使用:
ackage cn.eshop.servlet;
import javax.servlet.ServletConfig;
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 ServletConfigTest extends HttpServlet {
private String initParam = null;
@Override
public void init(ServletConfig config) throws ServletException {
this.initParam=config.getInitParameter("charset");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
out.println("charset"+this.initParam);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
注意:一定要先进行servlet的创建,再进行配置。
3.5 客户端跳转和服务器端跳转
1、客户端跳转
response.sendRedirect("URL");
2、服务器端跳转
request.getRequestDispatcher("URL").forward(request,response);
4、mvc模式
4.1 什么是mvc?
5、案例
5.1分页查询案例
5.1.1 vo层商品表
package cn.eshop.dao.vo;
public class Goods {
private int id; //商品的编号
private String name;//商品的名称
private int number;//商品的库存
private double price;//商品的价格
private String depict;//商品的描述
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 int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public String getDepict() {
return depict;
}
public void setDepict(String depict) {
this.depict = depict;
}
}
5.1.2 建立数据库
CREATE TABLE goods(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(40),
number INT,
price DECIMAL,
depict VARCHAR(255))ENGINE=INNODB DEFAULT CHARSET = utf8;
5.1.3 数据库工具类 DBUtil
package cn.eshop.dao;
import java.sql.*;
public class DBUtil {
protected Connection connection;
//创建连接的方法
public Connection getConnection() {
//定义用户名
String name="root";
String password="123456";
String url="jdbc:mysql://127.0.0.1:3306/eshop?useUnicode=true&characterEncoding=utf-8&useServerPrepStmts=true";
try {
Class.forName("com.mysql.cj.jdbc.Driver");
//注册驱动
connection = DriverManager.getConnection(url, name, password);
}catch (Exception e){
e.printStackTrace();
}
return connection;
}
//释放资源的方法
public static void close(ResultSet resultSet, Statement statement, Connection connection) {
if(resultSet!=null){
try {
resultSet.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if(statement!=null){
try {
statement.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if(connection!=null){
try {
connection.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
public static void pclose(ResultSet resultSet, PreparedStatement preparedstatement, Connection connection) {
if(resultSet!=null){
try {
resultSet.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if(preparedstatement!=null){
try {
preparedstatement.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if(connection!=null){
try {
connection.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
public static void pcclose( PreparedStatement preparedstatement, Connection connection) {
if(preparedstatement!=null){
try {
preparedstatement.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if(connection!=null){
try {
connection.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
}
5.1.4 GoodsDao层
package cn.eshop.dao;
import cn.eshop.dao.vo.Goods;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
public class GoodsDao extends DBUtil {
//添加商品
public boolean addGoods(Goods goods) throws Exception{
Connection connection = super.getConnection();
String sql="insert into goods(name,number,price,depict)value (?,?,?,?)";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1,goods.getName());
preparedStatement.setInt(2,goods.getNumber());
preparedStatement.setDouble(3,goods.getPrice());
preparedStatement.setString(4,goods.getDepict());
int n = preparedStatement.executeUpdate();
UserDAO.pcclose(preparedStatement,connection);
if(n==1){
return true;
}else {
return false;
}
}
//查询所有
public ArrayList<Goods> listAll() throws SQLException {
ArrayList list =new ArrayList();
Connection connection = super.getConnection();
String sql = "select * from goods";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
ResultSet resultSet = preparedStatement.executeQuery();
while (resultSet.next()){
Goods goods =new Goods();
goods.setId(resultSet.getInt("id"));
goods.setName(resultSet.getString("name"));
goods.setNumber(resultSet.getInt("number"));
goods.setPrice(resultSet.getDouble("price"));
goods.setDepict(resultSet.getString("depict"));
list.add(goods);
}
UserDAO.close(resultSet,preparedStatement,connection);
return list;
}
//分页查询
public ArrayList<Goods> listFenYe(int currPage,int pageSize)throws Exception{
ArrayList list =new ArrayList();
Connection connection = super.getConnection();
String sql = "select * from goods limit ?,?";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setInt(1,(currPage-1)*pageSize);
preparedStatement.setInt(2,pageSize);
ResultSet resultSet = preparedStatement.executeQuery();
while (resultSet.next()){
Goods goods =new Goods();
goods.setId(resultSet.getInt("id"));
goods.setName(resultSet.getString("name"));
goods.setNumber(resultSet.getInt("number"));
goods.setPrice(resultSet.getDouble("price"));
goods.setDepict(resultSet.getString("depict"));
list.add(goods);
}
UserDAO.close(resultSet,preparedStatement,connection);
return list;
}
//查询所有页数
public int findAllCount() throws SQLException {
int count = 0;
Connection connection = super.getConnection();
String sql = "select count(*) from goods";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
ResultSet resultSet = preparedStatement.executeQuery();
if(resultSet.next()){
count= resultSet.getInt(1);
}
UserDAO.close(resultSet,preparedStatement,connection);
return count;
}
//条件查询
public ArrayList<Goods> findByCondtion(String sql) throws SQLException {
ArrayList list =new ArrayList();
Connection connection = super.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement(sql);
ResultSet resultSet = preparedStatement.executeQuery();
while (resultSet.next()){
Goods goods =new Goods();
goods.setId(resultSet.getInt("id"));
goods.setName(resultSet.getString("name"));
goods.setNumber(resultSet.getInt("number"));
goods.setPrice(resultSet.getDouble("price"));
goods.setDepict(resultSet.getString("depict"));
list.add(goods);
}
UserDAO.close(resultSet,preparedStatement,connection);
return list;
}
}
5.1.5 GoodsServlet
package cn.eshop.mvc.servlet;
import cn.eshop.dao.GoodsDao;
import cn.eshop.dao.vo.Goods;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Map;
@WebServlet(name = "GoodsServlet",urlPatterns = ("/Unit6/Goods/market"))
public class GoodsServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
String act =request.getParameter("act");
if("add".equals(act)){
Map<String,String[]> map =request.getParameterMap();
Goods goods =new Goods();
goods.setName(map.get("name")[0]);
goods.setNumber((Integer.parseInt(map.get("number")[0])));
goods.setPrice(Double.parseDouble(map.get("price")[0]));
goods.setDepict(map.get("depict")[0]);
GoodsDao goodsDao = new GoodsDao();
try {
if(goodsDao.addGoods(goods)){
// PrintWriter out = response.getWriter();
// out.println("添加成功!!!<br/><a href='addGoods.jsp'>继续添加!</a>");
response.sendRedirect("success.jsp");
}
} catch (Exception e) {
e.printStackTrace();
}
}else if("list".equals(act)){
try {
listGoods(request,response);
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}else if("fenYe".equals(act)){
try {
listFenYe(request,response);
} catch (SQLException throwables) {
throwables.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}else if ("condition".equals(act)){
try {
listByCondition(request,response);
} catch (Exception e) {
e.printStackTrace();
}
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
protected void listGoods(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, SQLException {
GoodsDao gd = new GoodsDao();
ArrayList<Goods> list = gd.listAll();
request.setAttribute("list",list);
request.getRequestDispatcher("listGoods.jsp").forward(request,response);
}
protected void listFenYe(HttpServletRequest request, HttpServletResponse response) throws Exception {
int page =Integer.parseInt(request.getParameter("page"));
int pageSize = 5; //每页显示的记录数
GoodsDao gd = new GoodsDao();
ArrayList<Goods> list = gd.listFenYe(page,pageSize);//获取当前页的商品数据
int recordCount = gd.findAllCount(); //求商品的表中总记录数
int pageCount = (recordCount+pageSize-1)/pageSize;
request.setAttribute("list",list);
request.setAttribute("page",page);
request.setAttribute("pageCount",pageCount);
request.getRequestDispatcher("listGoodsFenYe.jsp").forward(request,response);
}
protected void listByCondition(HttpServletRequest request, HttpServletResponse response) throws Exception {
String searchType = request.getParameter("searchType").trim();
GoodsDao gd = new GoodsDao();
List<Goods> someGoods = null;
StringBuffer sqlBuffer = new StringBuffer("select * from goods where ");
if(searchType.equals("按条件查询商品")){
String name = request.getParameter("name").trim();
if(name==null||name.equals("")){
sqlBuffer.append(true);
}else {
sqlBuffer.append("name like '%"+name+"%'");
}
String minPrice = request.getParameter("minprice").trim();
String maxPrice = request.getParameter("maxprice").trim();
if(minPrice==null||maxPrice==null||minPrice.equals("")||maxPrice.equals("")){
sqlBuffer.append("and"+true);
}else {
sqlBuffer.append("and price between "+minPrice+" and "+maxPrice);
}
String sql = sqlBuffer.toString();
System.out.println(sql);
someGoods = gd.findByCondtion(sql);
}else if(searchType.equals("查询所有商品")){
someGoods = gd.listAll();
}
request.setAttribute("list",someGoods);//把查询出来的商品集合放到request对象里
request.getRequestDispatcher("listGoods.jsp").forward(request,response);
}
}
5.1.6 listGoods
<%@ page import="java.util.ArrayList" %>
<%@ page import="cn.eshop.dao.vo.Goods" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>商品列表</title>
</head>
<body>
<table width="800" border="1" align="center">
<tr>
<th>商品名</th>
<th>库存数量</th>
<th>商品价格</th>
<th>商品描述</th>
</tr>
<%
ArrayList<Goods> list = ( ArrayList<Goods>)request.getAttribute("list");
for(Goods goods:list){
%>
<tr>
<td><%=goods.getName()%></td>
<td><%=goods.getNumber()%></td>
<td><%=goods.getPrice()%></td>
<td><%=goods.getDepict()%></td>
</tr>
<%
}
%>
</table>
</body>
</html>
5.1.7 listGoodsFenYe
<%@ page import="java.util.ArrayList" %>
<%@ page import="cn.eshop.dao.vo.Goods" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>商品列表</title>
</head>
<body>
<table width="800" border="1" align="center">
<tr>
<th>商品名</th>
<th>库存数量</th>
<th>商品价格</th>
<th>商品描述</th>
</tr>
<%
ArrayList<Goods> list = ( ArrayList<Goods>)request.getAttribute("list");
for(Goods goods:list){
%>
<tr>
<td><%=goods.getName()%></td>
<td><%=goods.getNumber()%></td>
<td><%=goods.getPrice()%></td>
<td><%=goods.getDepict()%></td>
</tr>
<%
}
%>
</table>
</body>
</html>
5.1.8 success页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>成功页面</title>
</head>
<body>
成功添加商品!<br/>
<a href="market?act=list">商品列表信息</a><br/>
<a href="market?act=fenYe&page=1">分页显示商品列表信息</a><br/>
<form action="market?act=condition" method="post" >
请选择查询类型:<input type="radio" id="searchType1" name="searchType"
value="按条件查询商品" checked="checked">按条件查询商品
<input type="radio" id="searchType2" name="searchType" value="按条件查询商品" checked="checked">查询所有商品<br/>
<div id="searchCondition">
商品名称:<input type="search" id="name" name="name" placeholder="输入商品名称"><br/>
价格区间:<input type="number" id="number" name="minprice" placeholder="商品最低价格" style="width: 150px;">
--<input type="number" name="maxprice" placeholder="商品最高价格" style="width: 150px;"><br/>
<input type="submit" id="submit" value="查询">
</div>
</form>
</body>
</html>
5.2 文件上传案例
5.2.1 知识点总结
5.2.2 jsp页面实现文件上传
1)引入SmartUpload.jar到web➡WEB-INF➡lib中
2)在工程目录下添加上上传文件的保存路径
3)编写程序
upload01.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>图片上传</title>
</head>
<body>
<form action="doUpload.jsp" method="post" enctype="multipart/form-data">
上传的图片:<input type="file" name="pic"><br>
<input type="submit" value="上传">
</form>
</body>
</html>
doUpload.jsp页面
<%@ page import="com.jspsmart.upload.SmartUpload" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>开始上传</title>
</head>
<body>
<%
SmartUpload smartUpload =new SmartUpload();
smartUpload.initialize(pageContext);//初始化上传
smartUpload.upload();//上传准备
smartUpload.save("picture");//将文件保存到服务器响应目录中
%>
</body>
</html>
5.2.3jsp+servlet处理