文章目录
servlet连接jdbc
import java.sql.ResultSet;
@WebServlet("/test")
public class JdbcServlet extends HttpServlet{
Connection conn=null;
PreparedStatement ps=null;
@Override
public void doGet(HttpServletRequest request,HttpServletResponse response){
try{
Class.forName("com.mysql.cj.jdbc.Driver");
conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false","root","root");
ps=conn.prepareStatement("select * from student");
//ps.setParemeter(0,"lmj");
ResultSet rs= ps.executeQuery();
while(((ResultSet) rs).next()){
response.getWriter().write(rs.getString("name")+" "+rs.getString("age")+"<br>");
}
}catch(Exception e){System.out.println(e.toString());}
finally{
try{
ps.close();
conn.close();
}catch(Exception e){}
}
}
}
servlet封装jdbc(dao层实现代码)
public class UserDo {
private static String tbName = "user";
static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/nupoodb?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false";
static final String USER = "root";
static final String PASS = "root";
private static Connection conn;
public static Connection getConnection() {
try {
Class.forName(JDBC_DRIVER);
Connection conn = DriverManager.getConnection(DB_URL,USER,PASS);
} catch (Exception e) {
System.out.println(e);
}
return conn;
}
public static int login(User e){
int status = 0;
try {
Connection con = UserDo.getConnection();
String sql = "SELECT username,password FROM "+tbName+" where uname=? and upass=?";
PreparedStatement ps = con.prepareStatement(sql);
ps.setString(1, e.getUname());
ps.setString(2, e.getUpass());
ResultSet rs = ps.executeQuery();
if(rs.next()==true) {
status=1;
}
rs.close();
con.close();
} catch (Exception ex) {
ex.printStackTrace();
}
return status;
}
//UserDao.login()即可调用
}
servlet处理前端传来的多选框的值
String hobbys[]=request.getParameterValues(“hobby”);
servlet的三种跳转方式
response.sendRedirect("url")
1. 重 定 向 \color{red}{重定向} 重定向,当一个Servlet向当前的Servlet发出请求后,经过当前的Servlet的方法后,会再向服务器发出一个请求,生定向到这个方法中指定的URL,也就是说,在这个过程中,Servlet要向服务器请求两次,才能转到请求的URL.客户端跳转
request.getRequestDispatcher("url").forword(request,response)
2.
请
求
转
发
\color{red}{请求转发}
请求转发,也就是说,一个Servlet向当前的
Servlet发出请求后,经过这个方法后,请求会继续转发到请求的URL,在这个过程中,只向服务器发出一次请求.效率当然也就高了.服务端跳转
PrintWriter out = request.getWriter();
out.println("<script>window.location.href = "url"</script>");
3. 在 S e r v l e t 中 输 出 J a v a S c r i p t 代 码 \color{red}{在Servlet中输出JavaScript代码} 在Servlet中输出JavaScript代码,也能实现页面的跳转–要向服务器发出再次请求才能跳转到的URL.客户端跳转
重定向(客户端跳转)和分发(服务器端跳转)的区别:
1.转发是服务器行为,重定向是客户端行为
2.转发的速度快;重定向速度慢
3.转发的是同一次请求;重定向是两次不同请求
4.转发不会执行转发后的代码;重定向会执行重定向之后的代码
5.转发地址栏没有变化;重定向地址栏有变化
6.转发必须是在同一台服务器下完成;重定向可以在不同的服务器下完成
转发过程:客户浏览器发送http请求,web服务器接受此请求,调用内部的一个方法在容器内部完成请求处理和转发动作,将目标资源发送给客户;在这里,转发的路径必须是同一个web容器下的url,其不能转向到其他的web路径上去,中间传递的是自己的容器内的request。在客户浏览器路径栏显示的仍然是其第一次访问的路径,也就是说客户是感觉不到服务器做了转发的。转发行为是浏览器只做了一次访问请求。
重定向过程:客户浏览器发送http请求,web服务器接受后发送302状态码响应及对应新的location给客户浏览器,客户浏览器发现是302响应,则自动再发送一个新的http请求,请求url是新的location地址,服务器根据此请求寻找资源并发送给客户。在这里location可以重定向到任意URL,既然是浏览器重新发出了请求,则就没有什么request传递的概念了。在客户浏览器路径栏显示的是其重定向的路径,客户可以观察到地址的变化的。重定向行为是浏览器做了至少两次的访问请求的。
重定向,其实是两次request
第一次,客户端request A,服务器响应,并response回来,告诉浏览器,你应该去B。这个时候IE可以看到地址变了,而且历史的回退按钮也亮了。重定向可以访问自己web应用以外的资源。在重定向的过程中,传输的信息会被丢失。
servlet过滤器(登陆认证+字符编码过滤)
public class AuthFilter implements Filter {
//String encoding = null; //字符编码
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
String uri = request.getRequestURI();
if (uri.endsWith("login.html") || uri.endsWith("login")) {
chain.doFilter(request, response);
return;
}
String userName = (String) request.getSession().getAttribute("userName");
if (null == userName) {
response.sendRedirect("login.html");
return;
}
chain.doFilter(request, response);
}
/**
*if(encoding != null){
request.setCharacterEncoding(encoding); //设置request的编码格式
response.setContentType("text/html;charset="+encoding); //设置response字符编码
}
*/
....
}
web.xml中添加配置:
<filter>
<filter-name>AuthFilter</filter-name>
<filter-class>com.lmj.filter.AuthFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>AuthFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 过滤器声明 -->
<!-- <filter>
<filter-name>CharactorFilter</filter-name>
<filter-class>com.cn.gao.CharactorFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>gbk</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharactorFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
-->