servlet介绍
Servlet是一个java类及接口,当Web应用运行在服务器上时负责接收客户端(Client)向服务器发起的HTTP请求(Request),然后再根据需要向客户端返回HTTP响应(Response)。
配置web.xml文件
<servlet>
<servlet-name>classtable</servlet-name>
<servlet-class>com.first.Classtable.classtable</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>classtable</servlet-name>
<url-pattern>/classtable</url-pattern>
</servlet-mapping>
servlet类
package com.classtable.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.mysql.jdbc.Driver;
public class Query extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
String str = request.getParameter("class");
try {
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
Connection conn =(Connection) DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/nf", "root", "148315");
Statement stmt = (Statement) conn.createStatement();
String sql = "SELECT classCode FROM class WHERE className ='"+str+"'";
ResultSet rs = stmt.executeQuery(sql);
String code = null;
if(rs.next()){
code = rs.getString("classCode");
}
sql = "select section,one,two,three,four,five,six,seven from timetable where classCode = '"+code+"'and semester ='17-18-1'";
rs = stmt.executeQuery(sql);
StringBuffer sb = new StringBuffer();
while(rs.next()){
sb.append(rs.getString("section")+rs.getString("one")+rs.getString("two")+rs.getString("three")+rs.getString("four")+rs.getString("five")+rs.getString("six")+rs.getString("seven"));
}
String data = sb.toString();
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset = utf-8");
PrintWriter pw = response.getWriter();
pw.write(data);
} catch (SQLException e) {
e.printStackTrace();
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request,response);
}
}
Classtable.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page contentType="text/html; charset=UTF-8" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
<%
ServletContext context = this.getServletContext();
List<classbean>TL=new ArrayList<classbean>();
TL=(List<classbean>)context.getAttribute("CLASSLIST");
%>
<table border="2" align="center" width="90%" cellpadding="2" cellspacing="2">
<caption><h2>我的课表</h2></caption>
<thead>
<td>学期</td>
<td>班级</td>
<td>数</td>
<td>星期一</td>
<td>星期二</td>
<td>星期三</td>
<td>星期四</td>
<td>星期五</td>
<td>星期六</td>
<td>星期日</td>
</thead>
<tbody>
<%
for(classbean L:TL){
%>
<tr>
<td><%=L.getsemester()%></td>
<td><%=L.getclassCode()%></td>
<td><%=L.getSection()%></td>
<td><%=L.getOne()%></td>
<td><%=L.getTwo()%></td>
<td><%=L.getfour()%></td>
<td><%=L.getfive()%></td>
<td><%=L.getsix()%></td>
<td><%=L.getseven()%></td>
</tr>
<%} %>
</tbody>
</table>
</body>
</html>
get和post的特点及其区别----体现在所传递的参数上面
- get()方式传参的特点
(1)参数直接放在请求url后面
(2)从浏览器的地址栏里面可以直接看到所传的参数
(3)参数的长度有限制,不能把一个很长的数据通过get方式传参 - post()这种方式传参的特点
(1).参数放在请求的体部而不是url后面.
(2).浏览器的地址栏中看不到所传的参数.
(3).因为参数不用出现在地址栏里面,所有参数长度是没有限制的.
9、 中文乱码问题:
同意格式为字符编码格式:utf-8
(1)设置浏览器的编码格式为:utf-8
(2)在tommact服务器中,在conf文件中设置编码格式:
<Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8888" protocol="HTTP/1.1" redirectPort="8443"/>
(3)在web.xml、servlet中,点击 alt+回车 快捷键 :设置编码格式
(4) 在servlet代码中,设置req/resp 的字符编码格式:req.setCharacterEncoding("UTF-8");
指定浏览器传输的数据是用特定编码格式:req.setContentType("text/html;charset=UTF-8");
常见错误及其解决 - 400错误:404产生的原因为Web服务器(容器)根据请求地址找不到对应资源,以下情况都会出现404的错误提示:
输入的地址有误(应用名大小写不正确,名称拼写不正确) 在web.xml文件中<servlet>和<servlet-mapping>中的两个<servlet-name>不一致 没有将工程部署到Tomcat的webapps下面 Web工程部署时的结构没有遵循Servlet的规范。 - 500错误: 500的错误原因是请求的Servlet在执行service方法的过程中出现了错误,程序不能继续运行了。
Servlet没有继承HttpServlet或实现Servlet接口, web.xml文件中的<servlet-class>写错,与真正的包名类名不符 ,service方法中的代码运行时抛出异常 .
网友评论