1.MVC思想概述
MVC是一个设计模式,M是model,V是view,C是controller,在Java中,一般利用JSP作为view作为视图层,负责可视化的界面;用JavaBean作为model,作为负责被实例化和存储数据的对象,Servlet则负责作为controller,因为Servlet可以连接JSP和JavaBean,因此适合作为中间控制器。
2.如何利用MVC思想去实现具体需求
题目:开发一个界面,输入学生的模糊信息,点击确定后,可以输出学生的个人详细信息。
主要代码如下:
StudentSearch.jsp:
<form action="searchServlet" method ="get">
姓名<input type="text" name="name">
<input type="submit" value="搜索">
</form>
表单会以get的方式被提交到searchServlet里面去
searchServlet.java:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String name=request.getParameter("name");
name=new String(name.getBytes(),"UTF-8");
StudentDao studentDao=new StudentDao();
ArrayList info=studentDao.getInfo(name);
request.setAttribute("info", info);
request.getRequestDispatcher("search.jsp").forward(request, response);
}
这里拿到了请求中的name属性,放到DAO里面去进行数据库的校验,因为Java 默认的编码方式不适合中文,所以这里进行了转码。
StudentDao.java:
public ArrayList getInfo(String name) {
ArrayList students=new ArrayList();
String driver="com.mysql.jdbc.Driver";
String url="jdbc:mysql://localhost:3306/letterwish?characterEncoding=UTF8";
String user="root";
String pass="Oushile123.";
Connection conn;
Statement stm;
try {
Class.forName(driver);
conn=DriverManager.getConnection(url,user,pass);
stm=conn.createStatement();
name = new String(name.getBytes("ISO8859-1"), "utf-8");
String sql="select * from user where name like '%"+name+"%'";
System.out.println(sql);
ResultSet rs=stm.executeQuery(sql);
while(rs.next()) {
Student student=new Student();
System.out.println(rs.getString("name"));
student.setAccount(rs.getString("account"));
student.setName(rs.getString("name"));
student.setSex(rs.getString("sex"));
students.add(student);
}
rs.close();
stm.close();
}catch (Exception e) {
e.printStackTrace();
}
return students;
}
这里再次使用了中文转码防止出错,其实不添加也是可以的。结果会返回一个ArrayList集合,然后被Servlet接收到,把结果存在request.setAttribute里面,然后网页跳转到search.jsp,利用request.getAttribute把结果都打印在屏幕上。
search.jsp:(注意导入beans.Student和ArrayList所在的包)
<%
ArrayList stus=(ArrayList)request.getAttribute("info");
for(int i=0;i<stus.size();i++){
Student stu = (Student)stus.get(i);
out.print(stu.getAccount());
out.print(stu.getName());
out.print(stu.getSex());
}
%>
具体效果如下: